synapse-react-client 4.0.19 → 4.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SWC.index.d.ts +1 -1
- package/dist/SWC.index.js +1 -1
- package/dist/SWC.index.js.map +1 -1
- package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
- package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
- package/dist/assets/DefaultColorfulPortalCardBackground.js.map +1 -1
- package/dist/assets/GoogleIcon.js.map +1 -1
- package/dist/assets/GoogleIcon24.js.map +1 -1
- package/dist/assets/homepage/BlinkingLiveIcon.d.ts +1 -1
- package/dist/assets/homepage/BlinkingLiveIcon.js.map +1 -1
- package/dist/assets/homepage/aacr.js.map +1 -1
- package/dist/assets/homepage/cri.js.map +1 -1
- package/dist/assets/homepage/ctf.js.map +1 -1
- package/dist/assets/homepage/egress.js.map +1 -1
- package/dist/assets/homepage/facebook.js.map +1 -1
- package/dist/assets/homepage/fisma.js.map +1 -1
- package/dist/assets/homepage/gff.js.map +1 -1
- package/dist/assets/homepage/github.js.map +1 -1
- package/dist/assets/homepage/gray.js.map +1 -1
- package/dist/assets/homepage/hipaa-compliant.js.map +1 -1
- package/dist/assets/homepage/instagram.js.map +1 -1
- package/dist/assets/homepage/linkedin.js.map +1 -1
- package/dist/assets/homepage/ml-commons.js.map +1 -1
- package/dist/assets/homepage/nih-aging.js.map +1 -1
- package/dist/assets/homepage/nih-heart.js.map +1 -1
- package/dist/assets/homepage/nih-nci.js.map +1 -1
- package/dist/assets/homepage/nih-nimh.js.map +1 -1
- package/dist/assets/homepage/ntap.js.map +1 -1
- package/dist/assets/homepage/plan-item.js.map +1 -1
- package/dist/assets/homepage/powered-by-synapse-feature.js.map +1 -1
- package/dist/assets/homepage/precision-governance-feature.js.map +1 -1
- package/dist/assets/homepage/python.js.map +1 -1
- package/dist/assets/homepage/r.js.map +1 -1
- package/dist/assets/homepage/research-credit-feature.js.map +1 -1
- package/dist/assets/homepage/seamless-integration-feature.js.map +1 -1
- package/dist/assets/homepage/sloan.js.map +1 -1
- package/dist/assets/homepage/twitter.js.map +1 -1
- package/dist/assets/homepage/users.js.map +1 -1
- package/dist/assets/homepage/youtube.js.map +1 -1
- package/dist/assets/icons/AccessDataAnywhere.js.map +1 -1
- package/dist/assets/icons/AccessPending.js.map +1 -1
- package/dist/assets/icons/AccessPendingCloud.js.map +1 -1
- package/dist/assets/icons/AddAd.js.map +1 -1
- package/dist/assets/icons/AddToList.js.map +1 -1
- package/dist/assets/icons/Alert.js.map +1 -1
- package/dist/assets/icons/Arrow.js.map +1 -1
- package/dist/assets/icons/AwardScroll.js.map +1 -1
- package/dist/assets/icons/Baseline.js.map +1 -1
- package/dist/assets/icons/Cavatica.js.map +1 -1
- package/dist/assets/icons/CertifiedUser.js.map +1 -1
- package/dist/assets/icons/Challenge.js.map +1 -1
- package/dist/assets/icons/Checkbox/Checked.js.map +1 -1
- package/dist/assets/icons/Checkbox/Checked2.js.map +1 -1
- package/dist/assets/icons/Checkbox/Indeterminate.js.map +1 -1
- package/dist/assets/icons/Checkbox/Indeterminate2.js.map +1 -1
- package/dist/assets/icons/Checkbox/Unchecked.js.map +1 -1
- package/dist/assets/icons/Checkbox/Unchecked2.js.map +1 -1
- package/dist/assets/icons/ClappingHands.js.map +1 -1
- package/dist/assets/icons/CloudWarning.js.map +1 -1
- package/dist/assets/icons/CommunicateFindings.js.map +1 -1
- package/dist/assets/icons/CreateVersion.js.map +1 -1
- package/dist/assets/icons/DNA_Two.js.map +1 -1
- package/dist/assets/icons/Data2.js.map +1 -1
- package/dist/assets/icons/DoubleQuotes.js.map +1 -1
- package/dist/assets/icons/EmailAddressAdornment.js.map +1 -1
- package/dist/assets/icons/FileWithShield.js.map +1 -1
- package/dist/assets/icons/FileWithShield2.js.map +1 -1
- package/dist/assets/icons/FrontHand.js.map +1 -1
- package/dist/assets/icons/HandWithMoney.js.map +1 -1
- package/dist/assets/icons/IconCopy.js.map +1 -1
- package/dist/assets/icons/IconMinus.js.map +1 -1
- package/dist/assets/icons/IconPlus.js.map +1 -1
- package/dist/assets/icons/Java.js.map +1 -1
- package/dist/assets/icons/MintDoi.js.map +1 -1
- package/dist/assets/icons/MultiFile.js.map +1 -1
- package/dist/assets/icons/MultiFile2.js.map +1 -1
- package/dist/assets/icons/NoData.js.map +1 -1
- package/dist/assets/icons/NoSearchResults.js.map +1 -1
- package/dist/assets/icons/ORCIDIcon.js.map +1 -1
- package/dist/assets/icons/OpenBook.js.map +1 -1
- package/dist/assets/icons/Podium.js.map +1 -1
- package/dist/assets/icons/Python.js.map +1 -1
- package/dist/assets/icons/QueryStructuredData.js.map +1 -1
- package/dist/assets/icons/RLogo.js.map +1 -1
- package/dist/assets/icons/RecordProvenance.js.map +1 -1
- package/dist/assets/icons/RosetteRibbon.js.map +1 -1
- package/dist/assets/icons/SageFullLogo.js.map +1 -1
- package/dist/assets/icons/SearchImage.js.map +1 -1
- package/dist/assets/icons/ShareYourResearch.js.map +1 -1
- package/dist/assets/icons/Sort.js.map +1 -1
- package/dist/assets/icons/StarTrophy.js.map +1 -1
- package/dist/assets/icons/SynapseFullLogo.js.map +1 -1
- package/dist/assets/icons/SynapseIconWhite.js.map +1 -1
- package/dist/assets/icons/SynapseLogoName.js.map +1 -1
- package/dist/assets/icons/TasksIcon.js.map +1 -1
- package/dist/assets/icons/Terminal.js.map +1 -1
- package/dist/assets/icons/ThreeStars.js.map +1 -1
- package/dist/assets/icons/UnpackagableFile.js.map +1 -1
- package/dist/assets/icons/UnpackagableFile2.js.map +1 -1
- package/dist/assets/icons/ValidatedProfile.js.map +1 -1
- package/dist/assets/icons/account-certified.js.map +1 -1
- package/dist/assets/icons/account-enabled-mfa.js.map +1 -1
- package/dist/assets/icons/account-validated.js.map +1 -1
- package/dist/assets/icons/bioChemicalPhysical.js.map +1 -1
- package/dist/assets/icons/chart2.js.map +1 -1
- package/dist/assets/icons/columns.js.map +1 -1
- package/dist/assets/icons/columnsDarkTheme.js.map +1 -1
- package/dist/assets/icons/computationalTool.js.map +1 -1
- package/dist/assets/icons/dataReuse.js.map +1 -1
- package/dist/assets/icons/emailAddressAdornment2.js.map +1 -1
- package/dist/assets/icons/emailWithNotification.js.map +1 -1
- package/dist/assets/icons/error_page/maintenance.js.map +1 -1
- package/dist/assets/icons/error_page/no-access.js.map +1 -1
- package/dist/assets/icons/error_page/unavailable.js.map +1 -1
- package/dist/assets/icons/file.js.map +1 -1
- package/dist/assets/icons/inSilicoModel.js.map +1 -1
- package/dist/assets/icons/institution.js.map +1 -1
- package/dist/assets/icons/json-form-tool-no-submissions.js.map +1 -1
- package/dist/assets/icons/modelSystem.js.map +1 -1
- package/dist/assets/icons/mouse.js.map +1 -1
- package/dist/assets/icons/organizations.js.map +1 -1
- package/dist/assets/icons/person.js.map +1 -1
- package/dist/assets/icons/spatialProfiling.js.map +1 -1
- package/dist/assets/icons/standardDataModel.js.map +1 -1
- package/dist/assets/icons/study-active.js.map +1 -1
- package/dist/assets/icons/study-complete.js.map +1 -1
- package/dist/assets/icons/subscribe_plus.js.map +1 -1
- package/dist/assets/icons/synapse-logo.js.map +1 -1
- package/dist/assets/icons/terms/CheckIcon.js.map +1 -1
- package/dist/assets/icons/translational.js.map +1 -1
- package/dist/assets/icons/tree_horizontal.js.map +1 -1
- package/dist/assets/illustrations/acknowledgement_statements_illustration.js.map +1 -1
- package/dist/assets/illustrations/challenges_illustration.js.map +1 -1
- package/dist/assets/illustrations/cohort_builder_illustration.js.map +1 -1
- package/dist/assets/illustrations/data_access_management_illustration.js.map +1 -1
- package/dist/assets/illustrations/datasets_illustration.js.map +1 -1
- package/dist/assets/illustrations/diagonalLinePattern.js.map +1 -1
- package/dist/assets/illustrations/discussions_illustration.js.map +1 -1
- package/dist/assets/illustrations/docker_illustration.js.map +1 -1
- package/dist/assets/illustrations/donation_illustration.js.map +1 -1
- package/dist/assets/illustrations/favorites_illustration.js.map +1 -1
- package/dist/assets/illustrations/files_illustration.js.map +1 -1
- package/dist/assets/illustrations/following_illustration.js.map +1 -1
- package/dist/assets/illustrations/index.js.map +1 -1
- package/dist/assets/illustrations/left_dot_blob_dark_illustration.js.map +1 -1
- package/dist/assets/illustrations/left_dot_blob_illustration.js.map +1 -1
- package/dist/assets/illustrations/projects_illustration.js.map +1 -1
- package/dist/assets/illustrations/right_dot_blob_dark_illustration.js.map +1 -1
- package/dist/assets/illustrations/right_dot_blob_illustration.js.map +1 -1
- package/dist/assets/illustrations/tables_illustration.js.map +1 -1
- package/dist/assets/illustrations/teams_illustration.js.map +1 -1
- package/dist/assets/illustrations/trash_can_illustration.js.map +1 -1
- package/dist/assets/illustrations/underconstruction_illustration.js.map +1 -1
- package/dist/assets/illustrations/wikis_illustration.js.map +1 -1
- package/dist/assets/logos/other/ad-workbench-logo.js.map +1 -1
- package/dist/assets/logos/other/cavatica-logo.js.map +1 -1
- package/dist/assets/logos/other/pluto-logo.js.map +1 -1
- package/dist/assets/logos/other/terra-logo.js.map +1 -1
- package/dist/assets/mui_components/AccessManagement.js.map +1 -1
- package/dist/assets/mui_components/AccountCertified.js.map +1 -1
- package/dist/assets/mui_components/AccountRegistered.js.map +1 -1
- package/dist/assets/mui_components/AccountValidated.js.map +1 -1
- package/dist/assets/mui_components/ActionKey.js.map +1 -1
- package/dist/assets/mui_components/BioChemicalPhysical.js.map +1 -1
- package/dist/assets/mui_components/Chromatin.js.map +1 -1
- package/dist/assets/mui_components/Clinical.js.map +1 -1
- package/dist/assets/mui_components/ComputationalTool.js.map +1 -1
- package/dist/assets/mui_components/Data.js.map +1 -1
- package/dist/assets/mui_components/DataLocked.js.map +1 -1
- package/dist/assets/mui_components/DataReuse.js.map +1 -1
- package/dist/assets/mui_components/Dataset.js.map +1 -1
- package/dist/assets/mui_components/DatasetCollection.js.map +1 -1
- package/dist/assets/mui_components/Docker.js.map +1 -1
- package/dist/assets/mui_components/GeneExpression.js.map +1 -1
- package/dist/assets/mui_components/GeneVariants.js.map +1 -1
- package/dist/assets/mui_components/HelpChatBubble.js.map +1 -1
- package/dist/assets/mui_components/Imaging.js.map +1 -1
- package/dist/assets/mui_components/InSilicoModel.js.map +1 -1
- package/dist/assets/mui_components/Kinomics.js.map +1 -1
- package/dist/assets/mui_components/LineGraph.js.map +1 -1
- package/dist/assets/mui_components/ModelSystem.js.map +1 -1
- package/dist/assets/mui_components/Other.js.map +1 -1
- package/dist/assets/mui_components/PackagableFile.js.map +1 -1
- package/dist/assets/mui_components/PackagableFile2.js.map +1 -1
- package/dist/assets/mui_components/Proteomics.js.map +1 -1
- package/dist/assets/mui_components/Rat.js.map +1 -1
- package/dist/assets/mui_components/SpatialProfiling.js.map +1 -1
- package/dist/assets/sustainability/darkDialPosition1.js.map +1 -1
- package/dist/assets/sustainability/darkDialPosition2.js.map +1 -1
- package/dist/assets/sustainability/darkDialPosition3.js.map +1 -1
- package/dist/assets/sustainability/darkDialPosition4.js.map +1 -1
- package/dist/assets/sustainability/dialPosition1.js.map +1 -1
- package/dist/assets/sustainability/dialPosition2.js.map +1 -1
- package/dist/assets/sustainability/dialPosition3.js.map +1 -1
- package/dist/assets/sustainability/dialPosition4.js.map +1 -1
- package/dist/assets/themed_icons/Active.js.map +1 -1
- package/dist/assets/themed_icons/Chart.js.map +1 -1
- package/dist/assets/themed_icons/Close.js.map +1 -1
- package/dist/assets/themed_icons/Collapse.js.map +1 -1
- package/dist/assets/themed_icons/Columns.js.map +1 -1
- package/dist/assets/themed_icons/ColumnsDark.js.map +1 -1
- package/dist/assets/themed_icons/Database.js.map +1 -1
- package/dist/assets/themed_icons/Download.js.map +1 -1
- package/dist/assets/themed_icons/Expand.js.map +1 -1
- package/dist/assets/themed_icons/Explore.js.map +1 -1
- package/dist/assets/themed_icons/ExternalLink.js.map +1 -1
- package/dist/assets/themed_icons/Filter.js.map +1 -1
- package/dist/assets/themed_icons/Program.js.map +1 -1
- package/dist/assets/themed_icons/Project.js.map +1 -1
- package/dist/assets/themed_icons/Publication.js.map +1 -1
- package/dist/assets/themed_icons/Search.js.map +1 -1
- package/dist/assets/themed_icons/Settings.js.map +1 -1
- package/dist/assets/themed_icons/SortDown.js.map +1 -1
- package/dist/assets/themed_icons/SortUp.js.map +1 -1
- package/dist/assets/themed_icons/SqlEditorIcon.js.map +1 -1
- package/dist/assets/themed_icons/Study.js.map +1 -1
- package/dist/assets/themed_icons/ToolClinical.js.map +1 -1
- package/dist/assets/themed_icons/ToolComputational.js.map +1 -1
- package/dist/assets/themed_icons/ToolExperimental.js.map +1 -1
- package/dist/assets/themed_icons/VerticalDots.js.map +1 -1
- package/dist/components/AccessRequirement/AddConditionsForUseButton/AddConditionsForUseButton.js.map +1 -1
- package/dist/components/AccessRequirement/EntityActionsRequired.js.map +1 -1
- package/dist/components/AccessRequirement/ImposeRestrictionDialog/ImposeRestrictionDialog.js.map +1 -1
- package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js +10 -11
- package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementList.js +73 -76
- package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListItem.js.map +1 -1
- package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/CancelRequestDataAccess.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsFilesForm/DataAccessRequestAccessorsFilesForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DocumentTemplate.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementFormWikiWrapper.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ManagedACTAccessRequirementItemView.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/RequestDataAccessSuccess.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/ResearchProjectForm/ResearchProjectForm.js.map +1 -1
- package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/UploadDocumentField.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/AuthenticatedRequirement.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/CertificationRequirement.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/LockAccessRequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/RequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/TwoFactorAuthEnabledRequirement.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/UnmanagedACTAccessRequirementItem.js.map +1 -1
- package/dist/components/AccessRequirementList/RequirementItem/ValidationRequirement.js.map +1 -1
- package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
- package/dist/components/AccessTokenPage/AccessTokenPage.js.map +1 -1
- package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
- package/dist/components/AccountLevelBadge/AccountLevelBadge.js.map +1 -1
- package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
- package/dist/components/AccountLevelBadges/useRevokeCertificationUI.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsDialog.js.map +1 -1
- package/dist/components/AcknowledgementsPage/AcknowledgementsPage.js.map +1 -1
- package/dist/components/AcknowledgementsPage/StudyAcknowledgement.js.map +1 -1
- package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.js.map +1 -1
- package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
- package/dist/components/AclEditor/AclEditorSkeleton.js.map +1 -1
- package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
- package/dist/components/AclEditor/ReadOnlyPermissionLevel.js.map +1 -1
- package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js +2 -4
- package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
- package/dist/components/AclEditor/ResourceAccessItem.js.map +1 -1
- package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
- package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
- package/dist/components/AdaptiveTwoColumnLayout/AdaptiveTwoColumnLayout.js.map +1 -1
- package/dist/components/AddToDownloadListV2.js.map +1 -1
- package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
- package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
- package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
- package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
- package/dist/components/Authentication/LoginFlowBackButton.js.map +1 -1
- package/dist/components/Authentication/LoginForm.js.map +1 -1
- package/dist/components/Authentication/LoginMethod.js.map +1 -1
- package/dist/components/Authentication/LoginMethodButton.js.map +1 -1
- package/dist/components/Authentication/Logout.js.map +1 -1
- package/dist/components/Authentication/OneTimePasswordForm.js.map +1 -1
- package/dist/components/Authentication/PasswordField.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
- package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
- package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
- package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
- package/dist/components/Authentication/StandaloneLoginForm.js.map +1 -1
- package/dist/components/Authentication/TOTPForm.js.map +1 -1
- package/dist/components/Authentication/TwoFactorAuthSettingsPanel.js.map +1 -1
- package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
- package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
- package/dist/components/Authentication/TwoFactorSecretDialog.js.map +1 -1
- package/dist/components/Authentication/UsernamePasswordForm.js.map +1 -1
- package/dist/components/BasePortalCard/BasePortalCard.js.map +1 -1
- package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
- package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/CTASectionWrapper/CTASectionWrapper.js.map +1 -1
- package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
- package/dist/components/CardContainer/CardConfiguration.d.ts +2 -0
- package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
- package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
- package/dist/components/CardContainer/CardContainer.js +3 -3
- package/dist/components/CardContainer/CardContainer.js.map +1 -1
- package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +1 -0
- package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
- package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
- package/dist/components/CardDeck/CardDeck.Desktop.js.map +1 -1
- package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
- package/dist/components/CardDeck/CardDeck.js.map +1 -1
- package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
- package/dist/components/CardGridWithLinks/CardGridWithLinks.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationAnswer.js.map +1 -1
- package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
- package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
- package/dist/components/ChallengeDetailPage/ChallengeDetailPage.js.map +1 -1
- package/dist/components/ChallengeRegisterButton/ChallengeRegisterButton.js.map +1 -1
- package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
- package/dist/components/ChallengeSubmission/AddExternalRepo.js.map +1 -1
- package/dist/components/ChallengeSubmission/AvailableEvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
- package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js +62 -64
- package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
- package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionCommitList.js.map +1 -1
- package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamSearch.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamTable.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js +96 -102
- package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/MembershipRequestForm.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/OpenMembershipInvitation.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/RegistrationSuccessful.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
- package/dist/components/ChallengeTeamWizard/useCreateAndRegisterChallengeTeam.js.map +1 -1
- package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
- package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
- package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopover.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
- package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
- package/dist/components/CitationPopover/useCitation.js.map +1 -1
- package/dist/components/ColorGradient/ColorGradient.js.map +1 -1
- package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -1
- package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
- package/dist/components/ComponentCollapse.js.map +1 -1
- package/dist/components/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
- package/dist/components/CookiesNotification/CookiePreferencesDialog.js.map +1 -1
- package/dist/components/CookiesNotification/CookiesNotification.d.ts.map +1 -1
- package/dist/components/CookiesNotification/CookiesNotification.js +9 -9
- package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
- package/dist/components/CopyToClipboardIcon.js.map +1 -1
- package/dist/components/CopyToClipboardInput/CopyToClipboardInput.js.map +1 -1
- package/dist/components/CopyToClipboardString/CopyToClipboardString.js.map +1 -1
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
- package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizardUtils.js.map +1 -1
- package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
- package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -1
- package/dist/components/CreateTableViewWizard/CreateTableViewWizard.js.map +1 -1
- package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
- package/dist/components/CreateTableViewWizard/TableNameForm.js.map +1 -1
- package/dist/components/CreateTableViewWizard/TableTypeSelection.js.map +1 -1
- package/dist/components/CreateTableViewWizard/ViewTypeSelection.js.map +1 -1
- package/dist/components/CrispChat/CrispChat.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.css +1 -1
- package/dist/components/DataExplorer/DataExplorer.js +28 -31
- package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
- package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
- package/dist/components/DataExplorer/DataExplorer.module.scss +26 -6
- package/dist/components/DataGrid/DataGrid.js +72 -72
- package/dist/components/DataGrid/DataGrid.js.map +1 -1
- package/dist/components/DataGrid/DataGridTypes.js.map +1 -1
- package/dist/components/DataGrid/DataGridWebSocket.d.ts +2 -0
- package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
- package/dist/components/DataGrid/DataGridWebSocket.js +9 -10
- package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
- package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
- package/dist/components/DataGrid/StartGridSession.js.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts +3 -1
- package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/SynapseGrid.js +219 -211
- package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/DateTimeColumn.js.map +1 -1
- package/dist/components/DataGrid/columns/GridAutocompleteChip.js.map +1 -1
- package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts +5 -3
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +46 -47
- package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
- package/dist/components/DataGrid/components/ExportCsvFromGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/GridMenuButton/GridMenuButton.js.map +1 -1
- package/dist/components/DataGrid/components/GridSessionSelectionField.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridButton.js.map +1 -1
- package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
- package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
- package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
- package/dist/components/DataGrid/hooks/useColumnResizeHandles.d.ts.map +1 -1
- package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +3 -1
- package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
- package/dist/components/DataGrid/hooks/useExportDataGridToCsv.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridReplicaUsers.js.map +1 -1
- package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
- package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -1
- package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
- package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts +2 -0
- package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
- package/dist/components/DataGrid/useDataGridWebsocket.js +12 -2
- package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
- package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
- package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
- package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
- package/dist/components/DataGrid/utils/MessageCounter.js.map +1 -1
- package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/calculateColumnWidth.js.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
- package/dist/components/DataGrid/utils/columnFactory.js +1 -0
- package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
- package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
- package/dist/components/DataGrid/utils/convertActionToModelChange.js.map +1 -1
- package/dist/components/DataGrid/utils/createTestModel.js.map +1 -1
- package/dist/components/DataGrid/utils/enrichRowsWithChangeInfo.js.map +1 -1
- package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
- package/dist/components/DataGrid/utils/getCellAuthorSid.js.map +1 -1
- package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
- package/dist/components/DataGrid/utils/getChangeTooltipText.js.map +1 -1
- package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -1
- package/dist/components/DataGrid/utils/getReplicaCategory.js.map +1 -1
- package/dist/components/DataGrid/utils/isValidationUpToDateForRow.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxMessage.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxNotification.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxRequest.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxRequestComplete.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxResponse.js.map +1 -1
- package/dist/components/DataGrid/utils/json-rx/JsonRxResponseComplete.js.map +1 -1
- package/dist/components/DataGrid/utils/logicalTimestampToString.js.map +1 -1
- package/dist/components/DataGrid/utils/mapOperationsToModelChanges.js.map +1 -1
- package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
- package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
- package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
- package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -1
- package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -1
- package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
- package/dist/components/DatasetJsonLdScript.js.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/dist/components/Dialog/ConfirmCloseWithoutSavingDialog.js.map +1 -1
- package/dist/components/DialogBase.js.map +1 -1
- package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
- package/dist/components/DirectDownload/FileEntityDirectDownload.js.map +1 -1
- package/dist/components/DirectDownloadButton.js.map +1 -1
- package/dist/components/DownloadCart/ActionRequiredCard/ActionRequiredCard.js.map +1 -1
- package/dist/components/DownloadCart/ActionRequiredListItem.js.map +1 -1
- package/dist/components/DownloadCart/AvailableForDownloadTable.js.map +1 -1
- package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
- package/dist/components/DownloadCart/DirectProgrammaticDownload.js.map +1 -1
- package/dist/components/DownloadCart/DownloadCartPage.js.map +1 -1
- package/dist/components/DownloadCart/DownloadDetails.js.map +1 -1
- package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
- package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
- package/dist/components/DownloadCart/DownloadListStats.js.map +1 -1
- package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
- package/dist/components/DownloadCart/EnableTwoFaRequirementCard.js.map +1 -1
- package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
- package/dist/components/DownloadCart/RequestDownloadCard.js.map +1 -1
- package/dist/components/DownloadCart/ShowDownloadV2.js.map +1 -1
- package/dist/components/DownloadCart/TableQueryActionsRequired.js.map +1 -1
- package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
- package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
- package/dist/components/DropdownSelect/DropdownSelect.js.map +1 -1
- package/dist/components/DynamicForm/DynamicForm.js.map +1 -1
- package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
- package/dist/components/Ecosystem/EcosystemCard.js.map +1 -1
- package/dist/components/Ecosystem/EcosystemLayout.js.map +1 -1
- package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
- package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
- package/dist/components/EntityAclEditor/CreateOrDeleteLocalSharingSettingsButton.js.map +1 -1
- package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
- package/dist/components/EntityAclEditor/EntityAclEditorModal.js.map +1 -1
- package/dist/components/EntityAclEditor/InheritanceMessage.js.map +1 -1
- package/dist/components/EntityAclEditor/OpenData.js.map +1 -1
- package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js +68 -70
- package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
- package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
- package/dist/components/EntityCitation/EntityCitationUtils.js.map +1 -1
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js +32 -35
- package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
- package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
- package/dist/components/EntityFinder/Breadcrumbs.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinder.js +134 -136
- package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
- package/dist/components/EntityFinder/EntityFinderModal.js.map +1 -1
- package/dist/components/EntityFinder/EntityIdTextField.js.map +1 -1
- package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
- package/dist/components/EntityFinder/details/EntityDetailsList.js +20 -20
- package/dist/components/EntityFinder/details/EntityDetailsList.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/ReferenceDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/configurations/SearchDetails.js.map +1 -1
- package/dist/components/EntityFinder/details/view/DetailsView.js +67 -67
- package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
- package/dist/components/EntityFinder/details/view/VersionColumnHeader.js +1 -1
- package/dist/components/EntityFinder/details/view/VersionColumnHeader.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/AddToDownloadListCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/CreatedOnCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/DateCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityBadgeIconsCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityFinderCheckboxCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityFinderVersionCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityNameCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/EntityTypeCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/FileEntityDirectDownloadCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/FileEntityMD5Cell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/FileEntitySizeCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/ModifiedByCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/ModifiedOnCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/ParentProjectCell.js.map +1 -1
- package/dist/components/EntityFinder/details/view/table/UserBadgeCell.js.map +1 -1
- package/dist/components/EntityFinder/tree/EntityTree.js +80 -80
- package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
- package/dist/components/EntityFinder/tree/VirtualizedTree.js +31 -31
- package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
- package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
- package/dist/components/EntityForm/EntityForm.js.map +1 -1
- package/dist/components/EntityHeaderTable/DebouncedInput.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
- package/dist/components/EntityHeaderTable/EntityHeaderTableCellRenderers.js.map +1 -1
- package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
- package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
- package/dist/components/EntityIcon.js.map +1 -1
- package/dist/components/EntityLink.js.map +1 -1
- package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
- package/dist/components/EntityTreeTable/EntityTreeTable.js.map +1 -1
- package/dist/components/EntityTreeTable/components/AutoLoadMore.js.map +1 -1
- package/dist/components/EntityTreeTable/components/ColumnHeaders.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityBadgeIconsCell.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityNameCell.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityTreeTableContext.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityTreeTableRow.js.map +1 -1
- package/dist/components/EntityTreeTable/components/EntityTreeTableView.js.map +1 -1
- package/dist/components/EntityTreeTable/components/IdCell.js.map +1 -1
- package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
- package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
- package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
- package/dist/components/EntityUpload/EntityUploadModal.js +29 -31
- package/dist/components/EntityUpload/EntityUploadModal.js.map +1 -1
- package/dist/components/EntityUpload/EntityUploadPromptDialog.js.map +1 -1
- package/dist/components/EntityUpload/ExternalObjectStoreCredentialsForm.js.map +1 -1
- package/dist/components/EntityUpload/FileUploadProgress.js.map +1 -1
- package/dist/components/EntityUpload/LinkToURL.js.map +1 -1
- package/dist/components/EntityUpload/ProjectStorageLimitAlert.js.map +1 -1
- package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
- package/dist/components/EntityViewScopeEditor/EntityViewScopeEditor.js.map +1 -1
- package/dist/components/EntityViewScopeEditor/EntityViewScopeEditorModal.js.map +1 -1
- package/dist/components/Evaluation/CreatedOnByUserDiv.js.map +1 -1
- package/dist/components/Evaluation/DeleteEvaluationQueueConfirmationDialog.js.map +1 -1
- package/dist/components/Evaluation/EvaluationCard.js.map +1 -1
- package/dist/components/Evaluation/EvaluationEditor.js.map +1 -1
- package/dist/components/Evaluation/EvaluationEditorPage.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditorDropdown.js.map +1 -1
- package/dist/components/Evaluation/EvaluationRoundEditorList.js.map +1 -1
- package/dist/components/Evaluation/input_models/models.js.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptions.js.map +1 -1
- package/dist/components/Evaluation/round_limits/EvaluationRoundLimitOptionsList.js.map +1 -1
- package/dist/components/EvaluationFinder/EvaluationFinder.js.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.d.ts.map +1 -1
- package/dist/components/ExperimentalMode/ExperimentalMode.js +24 -30
- package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
- package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FacetPlotsCardGrid.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FeaturedDataPlots.js.map +1 -1
- package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
- package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
- package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
- package/dist/components/FeaturedResearch/FeaturedResearch.js +16 -18
- package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
- package/dist/components/FeaturedToolsList/FeaturedToolCard.js.map +1 -1
- package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
- package/dist/components/FilePreview/EntityPreview.js.map +1 -1
- package/dist/components/FilePreview/FileEntityPreview.js.map +1 -1
- package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
- package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
- package/dist/components/FilePreview/PdfPreview.js.map +1 -1
- package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
- package/dist/components/FilePreview/PreviewUtils.js.map +1 -1
- package/dist/components/FileUpload/FileUpload.js.map +1 -1
- package/dist/components/Forum/DiscussionReply.js.map +1 -1
- package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
- package/dist/components/Forum/DiscussionThread.js.map +1 -1
- package/dist/components/Forum/ForumPage.js.map +1 -1
- package/dist/components/Forum/ForumTable.js.map +1 -1
- package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
- package/dist/components/Forum/SubscribersModal.js.map +1 -1
- package/dist/components/ForumSearch/ForumSearch.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearch.js.map +1 -1
- package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
- package/dist/components/FullWidthAlert/FullWidthAlert.js.map +1 -1
- package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
- package/dist/components/GenericCard/CardUtils.js.map +1 -1
- package/dist/components/GenericCard/CollapsibleDescription.js.map +1 -1
- package/dist/components/GenericCard/CroissantButton/CroissantButton.js.map +1 -1
- package/dist/components/GenericCard/GenericCard.d.ts +2 -0
- package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
- package/dist/components/GenericCard/GenericCard.js +76 -64
- package/dist/components/GenericCard/GenericCard.js.map +1 -1
- package/dist/components/GenericCard/GenericCardActionButton.js.map +1 -1
- package/dist/components/GenericCard/GenericCardIcon.js.map +1 -1
- package/dist/components/GenericCard/GenericCardTitle.js.map +1 -1
- package/dist/components/GenericCard/LabelMaybeWithIcon.js.map +1 -1
- package/dist/components/GenericCard/Linkify.js.map +1 -1
- package/dist/components/GenericCard/PortalDOI/PortalDOI.js.map +1 -1
- package/dist/components/GenericCard/PortalDOI/PortalDOIUtils.js.map +1 -1
- package/dist/components/GenericCard/SynapseCardLabel.js +1 -1
- package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
- package/dist/components/GenericCard/TableRowGenericCard.js +33 -25
- package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
- package/dist/components/GenericCard/useResolvedSynapseEntity.js.map +1 -1
- package/dist/components/Goals/Goals.Desktop.js.map +1 -1
- package/dist/components/Goals/Goals.Mobile.js.map +1 -1
- package/dist/components/Goals/Goals.js +25 -27
- package/dist/components/Goals/Goals.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.Desktop.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
- package/dist/components/GoalsV2/GoalsV2.js +14 -16
- package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.Desktop.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
- package/dist/components/GoalsV3/GoalsV3.js +14 -16
- package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
- package/dist/components/GoogleAnalytics/GoogleAnalytics.js.map +1 -1
- package/dist/components/GoogleMap/GoogleMap.js.map +1 -1
- package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
- package/dist/components/HasAccess/AccessIcon.js +10 -10
- package/dist/components/HasAccess/AccessIcon.js.map +1 -1
- package/dist/components/HasAccess/HasAccessV2.js.map +1 -1
- package/dist/components/HasAccess/useHasAccess.js.map +1 -1
- package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
- package/dist/components/HeaderCard.js.map +1 -1
- package/dist/components/HelpPopover/HelpPopover.js.map +1 -1
- package/dist/components/HexGrid/HexGrid.js.map +1 -1
- package/dist/components/IDUReport/IDUReport.js.map +1 -1
- package/dist/components/IDUReport/IDUReportSubmissionInfo.js.map +1 -1
- package/dist/components/Icon/Icon.js.map +1 -1
- package/dist/components/IconList.js.map +1 -1
- package/dist/components/IconSvg/IconSvg.js.map +1 -1
- package/dist/components/IconSvgButton.js.map +1 -1
- package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js +7 -9
- package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
- package/dist/components/ImageFromSynapseTable.js.map +1 -1
- package/dist/components/InteractiveCopyIdsIcon.js.map +1 -1
- package/dist/components/JSONArrayEditor/JSONArrayEditor.js.map +1 -1
- package/dist/components/JSONArrayEditor/JSONArrayEditorModal.js.map +1 -1
- package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
- package/dist/components/JsonLdScript.js.map +1 -1
- package/dist/components/JsonSchemaForm/JsonSchemaForm.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldItemButtonTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ArrayFieldTitleTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ButtonTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/DescriptionFieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/ErrorListTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldDescriptionTable.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldErrorTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
- package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/BooleanWidget.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/DateTimeWidget.js.map +1 -1
- package/dist/components/JsonSchemaForm/widgets/SelectWidget.js.map +1 -1
- package/dist/components/LoadingScreen/LoadingScreen.js.map +1 -1
- package/dist/components/MailchimpSubscribeSection/MailchimpSubscribeSection.js.map +1 -1
- package/dist/components/Markdown/GovernanceMarkdownGithub.js.map +1 -1
- package/dist/components/Markdown/MarkdownCollapse.js.map +1 -1
- package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
- package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
- package/dist/components/Markdown/MarkdownPopover.js.map +1 -1
- package/dist/components/Markdown/MarkdownSynapse.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownSynapse.js +75 -106
- package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
- package/dist/components/Markdown/MarkdownUtils.d.ts +14 -4
- package/dist/components/Markdown/MarkdownUtils.d.ts.map +1 -1
- package/dist/components/Markdown/MarkdownUtils.js +38 -37
- package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
- package/dist/components/Markdown/MarkdownWidget.js.map +1 -1
- package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
- package/dist/components/Markdown/UserMentionModal.js.map +1 -1
- package/dist/components/Markdown/widget/Bookmarks.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownButton.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownEntityPreview.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownIDUReport.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownSynapseImage.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownSynapsePlot.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownSynapseTable.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownTableOfContents.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownUserOrTeamBadge.js.map +1 -1
- package/dist/components/Markdown/widget/MarkdownVideo.js.map +1 -1
- package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.FormSchema.js.map +1 -1
- package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
- package/dist/components/MuiContainer.js.map +1 -1
- package/dist/components/OAuthClientAclEditor/OAuthAclEditorModal.js.map +1 -1
- package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
- package/dist/components/OAuthClientManagement/CreateOAuthClient.js.map +1 -1
- package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
- package/dist/components/OrientationBanner/OrientationBanner.js.map +1 -1
- package/dist/components/PageProgress/PageProgress.js.map +1 -1
- package/dist/components/Plot/BarPlot.js.map +1 -1
- package/dist/components/Plot/DotPlot.js.map +1 -1
- package/dist/components/Plot/Plot.d.ts +12 -1
- package/dist/components/Plot/Plot.d.ts.map +1 -1
- package/dist/components/Plot/Plot.js +5 -1
- package/dist/components/Plot/Plot.js.map +1 -1
- package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
- package/dist/components/Plot/SynapsePlot.js.map +1 -1
- package/dist/components/Plot/SynapseSankeyPlot.css +1 -0
- package/dist/components/Plot/SynapseSankeyPlot.d.ts +54 -0
- package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -0
- package/dist/components/Plot/SynapseSankeyPlot.js +359 -0
- package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -0
- package/dist/components/Plot/SynapseSankeyPlot.module.js +15 -0
- package/dist/components/Plot/SynapseSankeyPlot.module.js.map +1 -0
- package/dist/components/Plot/SynapseSankeyPlot.module.scss +63 -0
- package/dist/components/Plot/ThemesPlot.js.map +1 -1
- package/dist/components/Plot/UpsetPlot.js.map +1 -1
- package/dist/components/Plot/index.d.ts +3 -1
- package/dist/components/Plot/index.d.ts.map +1 -1
- package/dist/components/Plot/index.js +2 -1
- package/dist/components/Plot/safe-react-plotly-factory.js.map +1 -1
- package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
- package/dist/components/PortalAclEditor/PortalAclEditorModal.js.map +1 -1
- package/dist/components/PortalFeatureHighlights/PortalFeatureHighlights.js.map +1 -1
- package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js +4 -6
- package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
- package/dist/components/PortalHomePageHeader/PortalHomePageHeader.js.map +1 -1
- package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
- package/dist/components/PortalList/PortalCard.js.map +1 -1
- package/dist/components/PortalList/PortalList.js.map +1 -1
- package/dist/components/PortalSectionHeader/PortalSectionHeader.js.map +1 -1
- package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js +69 -69
- package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
- package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
- package/dist/components/Programs/Programs.Desktop.js.map +1 -1
- package/dist/components/Programs/Programs.Mobile.js.map +1 -1
- package/dist/components/Programs/Programs.js.map +1 -1
- package/dist/components/ProjectStorage/ProjectDataAvailability.js.map +1 -1
- package/dist/components/ProvenanceGraph/ActivityNodeLabel.js.map +1 -1
- package/dist/components/ProvenanceGraph/EntityNodeLabel.js.map +1 -1
- package/dist/components/ProvenanceGraph/EntityPlaceholderNodeLabel.js.map +1 -1
- package/dist/components/ProvenanceGraph/ExpandGraphNodeLabel.js.map +1 -1
- package/dist/components/ProvenanceGraph/ExternalGraphNodeLabel.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceEntityIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
- package/dist/components/ProvenanceGraph/ProvenanceUtils.js +13 -13
- package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
- package/dist/components/ProvenanceGraph/UndefinedNodeLabel.js.map +1 -1
- package/dist/components/QueryContext/QueryContext.js.map +1 -1
- package/dist/components/QueryCount/QueryCount.js.map +1 -1
- package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
- package/dist/components/QuerySortSelector.js.map +1 -1
- package/dist/components/QueryVisualizationWrapper/NoContentPlaceholder.js.map +1 -1
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationContext.js.map +1 -1
- package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/QueryWrapper.js +27 -27
- package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
- package/dist/components/QueryWrapper/QueryWrapperLoadingScreen.js.map +1 -1
- package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
- package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
- package/dist/components/QueryWrapper/ViewMoreQueryResultsButton.js.map +1 -1
- package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
- package/dist/components/QueryWrapper/useComputeRowSelectionPrimaryKey.js.map +1 -1
- package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
- package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
- package/dist/components/QueryWrapper/useHasFacetedSelectColumn.js.map +1 -1
- package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
- package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/RowSetView.js.map +1 -1
- package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
- package/dist/components/RORInstitutionField/RORInstitutionField.js.map +1 -1
- package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js +6 -8
- package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
- package/dist/components/RegisterPageLogoutPrompt/RegisterPageLogoutPrompt.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCard.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardLarge.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardMedium.js.map +1 -1
- package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
- package/dist/components/RenderIfInView/RenderIfInView.js.map +1 -1
- package/dist/components/ResizableContainer/ResizableContainer.js.map +1 -1
- package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
- package/dist/components/Resources/Resources.Desktop.js.map +1 -1
- package/dist/components/Resources/Resources.Mobile.js.map +1 -1
- package/dist/components/Resources/Resources.js +8 -11
- package/dist/components/Resources/Resources.js.map +1 -1
- package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
- package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
- package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
- package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/SchemaDrivenAnnotationEditor.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/field/SynapseAnnotationsRJSFObjectField.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/AdditionalPropertyContext.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/template/SynapseAnnotationsWrapIfAdditionalTemplate.js.map +1 -1
- package/dist/components/SchemaDrivenAnnotationEditor/widget/TextWidget.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +13 -12
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +88 -77
- package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
- package/dist/components/SearchQueryWrapper/SearchQueryWrapper.js.map +1 -1
- package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
- package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/AccessRequirementTextInstructions.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/AccessRequirementWikiInstructions.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/AccessorRequirements.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/GovernanceUtils.js.map +1 -1
- package/dist/components/SetBasicAccessRequirementFields/SetBasicAccessRequirementFields.js.map +1 -1
- package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
- package/dist/components/ShareThisPage/ShareThisPage.js.map +1 -1
- package/dist/components/ShowMore/ShowMore.js.map +1 -1
- package/dist/components/SignInButton.js.map +1 -1
- package/dist/components/SignInRequiredModal/SignInRequiredModal.js.map +1 -1
- package/dist/components/Skeleton/SkeletonButton.js.map +1 -1
- package/dist/components/Skeleton/SkeletonInlineBlock.js.map +1 -1
- package/dist/components/Skeleton/SkeletonParagraph.js.map +1 -1
- package/dist/components/Skeleton/SkeletonTable.js.map +1 -1
- package/dist/components/SmartLink/SmartButton.js.map +1 -1
- package/dist/components/SmartLink/SmartLink.js.map +1 -1
- package/dist/components/SmartLink/useSmartLink.js.map +1 -1
- package/dist/components/SourceAppImage.js.map +1 -1
- package/dist/components/SpinnerButton/SpinnerButton.js.map +1 -1
- package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditor.js.map +1 -1
- package/dist/components/SqlDefinedTableEditor/SqlDefinedTableEditorModal.js.map +1 -1
- package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
- package/dist/components/StatisticsPlot.js.map +1 -1
- package/dist/components/StepperDialog/StepperDialog.js.map +1 -1
- package/dist/components/StorybookComponentWrapper.js.map +1 -1
- package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditor.js.map +1 -1
- package/dist/components/SubmissionViewScopeEditor/SubmissionViewScopeEditorModal.js.map +1 -1
- package/dist/components/SubscriptionPage/ForumTopic.js.map +1 -1
- package/dist/components/SubscriptionPage/SubscriptionItem.js.map +1 -1
- package/dist/components/SubscriptionPage/SubscriptionPage.js.map +1 -1
- package/dist/components/SubscriptionPage/ThreadTopic.js.map +1 -1
- package/dist/components/SubscriptionPage/Topic.js.map +1 -1
- package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
- package/dist/components/SustainabilityScorecard/Dial.js.map +1 -1
- package/dist/components/SustainabilityScorecard/DialLayout.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecardSummary.js.map +1 -1
- package/dist/components/SustainabilityScorecard/SustainabilityScorecardUtils.js.map +1 -1
- package/dist/components/SynapseChat/AccessLevelMenu.js.map +1 -1
- package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChat.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatDialog.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
- package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
- package/dist/components/SynapseChat/SynapsePortalChatDialog.js.map +1 -1
- package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
- package/dist/components/SynapseChat/useChatState.js.map +1 -1
- package/dist/components/SynapseFooter/SynapseFooter.js.map +1 -1
- package/dist/components/SynapseFooter/SynapseLinksColumn.js.map +1 -1
- package/dist/components/SynapseForm/DataDebug.js.map +1 -1
- package/dist/components/SynapseForm/Header.js.map +1 -1
- package/dist/components/SynapseForm/NavButtons.js.map +1 -1
- package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
- package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
- package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormCheckboxWidget.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormCheckboxesWidget.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormRadioWidget.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormUtils.js.map +1 -1
- package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
- package/dist/components/SynapseForm/WarningDialog.js.map +1 -1
- package/dist/components/SynapseForm/types.js.map +1 -1
- package/dist/components/SynapseForm/useGetFormPropsFromSearchParams.js.map +1 -1
- package/dist/components/SynapseHomepageV2/FloatingBlobsBackground.js.map +1 -1
- package/dist/components/SynapseHomepageV2/HomepageStyles.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseByTheNumbers.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasetItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeaturedDatasets.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseFeatures.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js +18 -21
- package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageNavBar.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHomepageV2.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHotdrops.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseHotdropsItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInAction.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePartners.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePlan.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePlanContent.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapsePlansPage.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseSearchChips.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
- package/dist/components/SynapseHomepageV2/SynapseTrendingProjectsItem.js.map +1 -1
- package/dist/components/SynapseHomepageV2/WordPressNews.js.map +1 -1
- package/dist/components/SynapseHomepageV2/WordPressNewsItem.js.map +1 -1
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +78 -78
- package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
- package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/HasAccessChip.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SearchPagePortalBanners.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPage.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchPageRouter.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/SynapseSearchResultsCard.js.map +1 -1
- package/dist/components/SynapseSearchPageResults/chipStyles.js.map +1 -1
- package/dist/components/SynapseTable/CustomControls/CustomControlButton.js.map +1 -1
- package/dist/components/SynapseTable/CustomControls/CustomControlPanel.js.map +1 -1
- package/dist/components/SynapseTable/CustomControls/CustomControls.js.map +1 -1
- package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
- package/dist/components/SynapseTable/ExpandCollapseButton.js.map +1 -1
- package/dist/components/SynapseTable/ExpandableTableDataCell.js.map +1 -1
- package/dist/components/SynapseTable/NoContentAvailable.js.map +1 -1
- package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +4 -4
- package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
- package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js.map +1 -1
- package/dist/components/SynapseTable/SearchResultsNotFound.js.map +1 -1
- package/dist/components/SynapseTable/SearchV2.js.map +1 -1
- package/dist/components/SynapseTable/SqlEditor.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/EntityIdList.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/EvaluationIdRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/ComplexJSONRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONArrayRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONObjectRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONPrimitiveRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONRendererUtils.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/JSON/JSONTableCellRenderer.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableCell/UserIdList.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableConstants.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableContext.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
- package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
- package/dist/components/SynapseTable/TableIsEmpty.js.map +1 -1
- package/dist/components/SynapseTable/TablePagination.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +63 -74
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
- package/dist/components/SynapseTable/TopLevelControls/TopLevelControlsUtils.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorCheckboxCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorUtils.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +131 -133
- package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
- package/dist/components/SynapseTable/datasets/EntityFetchErrorCell.js.map +1 -1
- package/dist/components/SynapseTable/export/ADDiscoveryPortalInstructions.js.map +1 -1
- package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +48 -51
- package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js.map +1 -1
- package/dist/components/SynapseTable/export/ExternalAnalysisPlatformInstructions.js.map +1 -1
- package/dist/components/SynapseTable/export/ExternalAnalysisPlatformsConstants.js.map +1 -1
- package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
- package/dist/components/SynapseTable/export/ExternalPlatformDisclaimer.js.map +1 -1
- package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadLoginModal.js.map +1 -1
- package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
- package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
- package/dist/components/SynapseTable/useTableSort.js.map +1 -1
- package/dist/components/SystemUseNotification/SystemUseNotification.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +72 -68
- package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/FieldWithRecommendedMinimum.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/MultiValueField.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditor.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +27 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +47 -36
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +10 -10
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormActions.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.d.ts +12 -12
- package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts +4 -1
- package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts +167 -517
- package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js +65 -65
- package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DefaultValueValidator.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js +6 -13
- package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/EnumValuesValidator.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js +2 -2
- package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.js.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts +2 -2
- package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts.map +1 -1
- package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js +15 -16
- package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
- package/dist/components/TableFeedCards/TableFeedCards.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
- package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
- package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
- package/dist/components/TanStackTable/StyledVirtualTanStackTable.js.map +1 -1
- package/dist/components/TanStackTable/TableBody.js.map +1 -1
- package/dist/components/TanStackTable/TableCellRenderer.js.map +1 -1
- package/dist/components/TanStackTable/TanStackTableUtils.js.map +1 -1
- package/dist/components/TeamBadge.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamBadgeOrError.js.map +1 -1
- package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
- package/dist/components/TemplateComponent.js.map +1 -1
- package/dist/components/TemporaryBanner/TemporaryBanner.js.map +1 -1
- package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
- package/dist/components/TermsAndConditions/TermsAndConditionsItem.js.map +1 -1
- package/dist/components/TextField/TextField.js.map +1 -1
- package/dist/components/TextField/TextFieldWithWordLimit.js.map +1 -1
- package/dist/components/TextToComponentCollapse.js.map +1 -1
- package/dist/components/ThemeGallery/ThemeGallery.js.map +1 -1
- package/dist/components/TimelinePlot/TimelineLegendItem.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
- package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
- package/dist/components/TimelinePlot/phasesQueryResponseData.js.map +1 -1
- package/dist/components/ToastMessage/ToastMessage.js.map +1 -1
- package/dist/components/TotalQueryResults.js.map +1 -1
- package/dist/components/UserCard/Avatar.js.map +1 -1
- package/dist/components/UserCard/UserBadge.js.map +1 -1
- package/dist/components/UserCard/UserCard.js.map +1 -1
- package/dist/components/UserCard/UserCardContextMenu.js.map +1 -1
- package/dist/components/UserCard/UserCardLarge.js.map +1 -1
- package/dist/components/UserCard/UserCardMedium.js.map +1 -1
- package/dist/components/UserCardList/UserCardList.js.map +1 -1
- package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Desktop.js.map +1 -1
- package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
- package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.js.map +1 -1
- package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
- package/dist/components/UserOrTeamBadge/UserOrTeamBadge.js.map +1 -1
- package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
- package/dist/components/UserProfileLinks/UserChallenges.js.map +1 -1
- package/dist/components/UserProfileLinks/UserProfileLinks.js.map +1 -1
- package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
- package/dist/components/UserProfileLinks/UserTeams.js.map +1 -1
- package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
- package/dist/components/Webhook/CreateWebhookModal.js.map +1 -1
- package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
- package/dist/components/Webhook/WebhookVerificationDialog.js.map +1 -1
- package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
- package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
- package/dist/components/WizardChoiceButton/WizardChoiceButton.js.map +1 -1
- package/dist/components/WizardChoiceButton/WizardChoiceButtonDescription.js.map +1 -1
- package/dist/components/WizardChoiceButton/WizardChoiceButtonGroup.js.map +1 -1
- package/dist/components/WordPress/WordPressLatestPostChip.js.map +1 -1
- package/dist/components/WordPress/useWordPressCategories.js.map +1 -1
- package/dist/components/WordPress/useWordPressPosts.js.map +1 -1
- package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
- package/dist/components/dataaccess/AccessHistoryDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementDashboard.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementSearchBox/AccessRequirementSearchBox.js.map +1 -1
- package/dist/components/dataaccess/AccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/AccessSubmissionDashboard.js.map +1 -1
- package/dist/components/dataaccess/RejectDataAccessRequestModal.js.map +1 -1
- package/dist/components/dataaccess/RejectProfileValidationRequestModal.js.map +1 -1
- package/dist/components/dataaccess/ReviewerDashboard.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/ApproveSubmissionConfirmationModal.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/CancelDataAccessRequestConfirmationModal.js.map +1 -1
- package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
- package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/SubmissionSortStateTranslator.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPage.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryPlace.js.map +1 -1
- package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
- package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
- package/dist/components/doi/DoiFormSchemas.js.map +1 -1
- package/dist/components/doi/PrivateEntityDoiWarning.js.map +1 -1
- package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUI.js +30 -32
- package/dist/components/download_list/DownloadConfirmationUI.js.map +1 -1
- package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
- package/dist/components/download_list/DownloadDetails.js.map +1 -1
- package/dist/components/download_list/index.js.map +1 -1
- package/dist/components/entity/metadata/AnnotationsTable.js.map +1 -1
- package/dist/components/entity/metadata/EntityAnnotationKey.js.map +1 -1
- package/dist/components/entity/metadata/EntityModal.js.map +1 -1
- package/dist/components/entity/metadata/MetadataTable.js.map +1 -1
- package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
- package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
- package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
- package/dist/components/entity/page/title_bar/CitationsDialog.js.map +1 -1
- package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
- package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
- package/dist/components/entity/page/title_bar/TitleBarProperties.js.map +1 -1
- package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetEntityTitleBarProperties.js.map +1 -1
- package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
- package/dist/components/error/ErrorBanner.js.map +1 -1
- package/dist/components/error/ErrorChip.js.map +1 -1
- package/dist/components/error/ErrorPage.js +24 -24
- package/dist/components/error/ErrorPage.js.map +1 -1
- package/dist/components/error/RouteErrorBoundary.js.map +1 -1
- package/dist/components/error/SendMessageToEntityOwnerDialog.js.map +1 -1
- package/dist/components/error/SynapseObjectDOIInfo.js.map +1 -1
- package/dist/components/favorites/FavoriteButton.js.map +1 -1
- package/dist/components/favorites/FavoritesPage.js.map +1 -1
- package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
- package/dist/components/file/upload/MultiFileUploadProgress.js.map +1 -1
- package/dist/components/file/upload/UploadFilePanel.js.map +1 -1
- package/dist/components/form/RadioGroupWithOtherString.js.map +1 -1
- package/dist/components/home_page/ExpandableContent.js.map +1 -1
- package/dist/components/index.js +48 -47
- package/dist/components/layout/InfiniteTableLayout.js.map +1 -1
- package/dist/components/layout/SWCHeader.js.map +1 -1
- package/dist/components/layout/SWCPageLayout.js.map +1 -1
- package/dist/components/menu/ComplexMenu.js.map +1 -1
- package/dist/components/menu/DropdownMenu.js.map +1 -1
- package/dist/components/row_renderers/Dataset.js.map +1 -1
- package/dist/components/row_renderers/Funder.js.map +1 -1
- package/dist/components/row_renderers/ObservationCard.js.map +1 -1
- package/dist/components/row_renderers/utils/CardFooter.js.map +1 -1
- package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
- package/dist/components/styled/HoverPopover.js.map +1 -1
- package/dist/components/styled/InlineBadge.js.map +1 -1
- package/dist/components/styled/InputSizedButton.js.map +1 -1
- package/dist/components/styled/LargeButton.js.map +1 -1
- package/dist/components/styled/LeftRightPanel.js.map +1 -1
- package/dist/components/styled/LightTooltip.js.map +1 -1
- package/dist/components/styled/StyledFormControl.js.map +1 -1
- package/dist/components/styled/StyledPopover.js.map +1 -1
- package/dist/components/styled/StyledTableContainer.js.map +1 -1
- package/dist/components/styled/WideButton.js.map +1 -1
- package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js +39 -42
- package/dist/components/table/CsvPreview/CreateTableFromCsvDialog.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvPreviewWithOptions.js.map +1 -1
- package/dist/components/table/CsvPreview/CsvUploadPreviewContent.js.map +1 -1
- package/dist/components/table/CsvPreview/UpdateTableWithCsvDialog.js.map +1 -1
- package/dist/components/table/CsvPreview/useCreateTableFromCsv.js.map +1 -1
- package/dist/components/table/CsvPreview/useCsvUploadPreview.js +11 -11
- package/dist/components/table/CsvPreview/useCsvUploadPreview.js.map +1 -1
- package/dist/components/table/CsvPreview/useUploadCsvToExistingTable.js.map +1 -1
- package/dist/components/table/CsvTableDescriptorForm/CsvTableDescriptorForm.js.map +1 -1
- package/dist/components/trash/TrashCanList.js.map +1 -1
- package/dist/components/utils/Blocker.js.map +1 -1
- package/dist/components/utils/ConditionalWrapper.js.map +1 -1
- package/dist/components/utils/VisibilityObserver.js.map +1 -1
- package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
- package/dist/components/widgets/EntityColumnImage.js.map +1 -1
- package/dist/components/widgets/FileHandleLink.js.map +1 -1
- package/dist/components/widgets/ImageFileHandle.js.map +1 -1
- package/dist/components/widgets/LoginAwareButton.js.map +1 -1
- package/dist/components/widgets/Range.js.map +1 -1
- package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
- package/dist/components/widgets/SynapseImage.js.map +1 -1
- package/dist/components/widgets/SynapseVideo.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
- package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
- package/dist/components/widgets/facet-nav/PlotsContainerSkeleton.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPill.js.map +1 -1
- package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
- package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
- package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterDropdown.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterSkeleton.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
- package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetChip.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterHeader.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterSkeleton.js.map +1 -1
- package/dist/components/widgets/query-filter/FacetFilterUtils.js.map +1 -1
- package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilter.js +3 -3
- package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.js +41 -41
- package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
- package/dist/features/curator/GridPage/GridPage.js.map +1 -1
- package/dist/features/curator/GridPage/components/GridPageRouter.js.map +1 -1
- package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
- package/dist/features/curator/GridPage/components/UpdateGridPageSearchParamsForm.js.map +1 -1
- package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -1
- package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -1
- package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -1
- package/dist/features/curator/dashboard/components/UserOrTeamChip.js.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts +5 -0
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js +227 -181
- package/dist/features/entity/metadata-task/components/CreateOrUpdateCurationTaskDialog.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +3 -0
- package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
- package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
- package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
- package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
- package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -1
- package/dist/features/entity/metadata-task/utils/constants.js +2 -2
- package/dist/features/entity/metadata-task/utils/constants.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/getGridSourceIdForTask.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/getLatestGridSessionForSource.js.map +1 -1
- package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -1
- package/dist/features/team/invitation/components/OpenInvitationsToUserCard.js.map +1 -1
- package/dist/index.js +54 -53
- package/dist/index.js.map +1 -1
- package/dist/mocks/MockAccessApprovals.js.map +1 -1
- package/dist/mocks/MockSynapseContext.js.map +1 -1
- package/dist/mocks/accessRequirement/mockAccessRequirementAcls.js.map +1 -1
- package/dist/mocks/accessRequirement/mockAccessRequirements.js.map +1 -1
- package/dist/mocks/applicationSessionContext/MockApplicationSessionContext.js.map +1 -1
- package/dist/mocks/challenge/mockChallenge.js.map +1 -1
- package/dist/mocks/chat/mockChat.js.map +1 -1
- package/dist/mocks/curation/mockCurationTask.js.map +1 -1
- package/dist/mocks/dataaccess/MockDataAccessRequest.js.map +1 -1
- package/dist/mocks/dataaccess/MockResearchProject.js.map +1 -1
- package/dist/mocks/dataaccess/MockSubmission.js.map +1 -1
- package/dist/mocks/dataaccess/mockAccessRequest.js.map +1 -1
- package/dist/mocks/discussion/mock_discussion.js.map +1 -1
- package/dist/mocks/doi/MockDoi.js.map +1 -1
- package/dist/mocks/entity/index.js.map +1 -1
- package/dist/mocks/entity/mockDataset.js.map +1 -1
- package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
- package/dist/mocks/entity/mockEntity.js.map +1 -1
- package/dist/mocks/entity/mockEvaluationQueue.js.map +1 -1
- package/dist/mocks/entity/mockFileEntity.js.map +1 -1
- package/dist/mocks/entity/mockFileEntityACLVariants.js.map +1 -1
- package/dist/mocks/entity/mockFileView.js.map +1 -1
- package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
- package/dist/mocks/entity/mockProject.js.map +1 -1
- package/dist/mocks/entity/mockProjectView.js.map +1 -1
- package/dist/mocks/entity/mockReleaseCardsTable.js.map +1 -1
- package/dist/mocks/entity/mockRootEntity.js.map +1 -1
- package/dist/mocks/entity/mockTableEntity.js.map +1 -1
- package/dist/mocks/faker/fakerUtils.js.map +1 -1
- package/dist/mocks/faker/generateDiscussion.js.map +1 -1
- package/dist/mocks/faker/generateEvaluation.js.map +1 -1
- package/dist/mocks/faker/generateFakeEntity.js.map +1 -1
- package/dist/mocks/faker/generateSubscription.js.map +1 -1
- package/dist/mocks/mockAnnotationColumns.js.map +1 -1
- package/dist/mocks/mockCertificationQuiz.js.map +1 -1
- package/dist/mocks/mockDataCatalogQuery.js.map +1 -1
- package/dist/mocks/mockFileViewQuery.js.map +1 -1
- package/dist/mocks/mockOAuthClientAcls.js.map +1 -1
- package/dist/mocks/mockQueryResponseData.js.map +1 -1
- package/dist/mocks/mockQueryResponseDataWithManyEnumFacets.js.map +1 -1
- package/dist/mocks/mockSchema.js.map +1 -1
- package/dist/mocks/mockSearchQueryData.js +2 -2
- package/dist/mocks/mockSearchQueryData.js.map +1 -1
- package/dist/mocks/mockShortIo.js.map +1 -1
- package/dist/mocks/mockSourceAppConfigQuery.js.map +1 -1
- package/dist/mocks/mockSubscription.js.map +1 -1
- package/dist/mocks/mockWiki.js.map +1 -1
- package/dist/mocks/mockWikiPageKey.js.map +1 -1
- package/dist/mocks/mock_drug_tool_data.js.map +1 -1
- package/dist/mocks/mock_file_handle.js.map +1 -1
- package/dist/mocks/mock_file_statistics.js.map +1 -1
- package/dist/mocks/mock_has_access_data.js.map +1 -1
- package/dist/mocks/mock_upload_destination.js.map +1 -1
- package/dist/mocks/msw/handlers/accessRequirementAclHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/accessRequirementHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/authHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/chatHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/dataAccessRequestHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/dataciteHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/doiHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/evaluationHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/featureFlagHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/messageHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/oauthClientAclHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/projectStorageHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/realmHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/researchProjectHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/resetTwoFactorAuthHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/schemaHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
- package/dist/mocks/msw/handlers/searchQueryHandlers.js +6 -3
- package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/shortIoHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/tableQueryService.js.map +1 -1
- package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/termsOfServiceHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/webhookHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
- package/dist/mocks/msw/handlers.js.map +1 -1
- package/dist/mocks/msw/server.d.ts +1 -1
- package/dist/mocks/msw/server.d.ts.map +1 -1
- package/dist/mocks/msw/server.js.map +1 -1
- package/dist/mocks/msw/util/BasicMockedCrudService.js.map +1 -1
- package/dist/mocks/oauth/MockClient.js.map +1 -1
- package/dist/mocks/personalAccessToken/mockPersonalAccessToken.js.map +1 -1
- package/dist/mocks/projectStorage/mockProjectStorageLimits.js.map +1 -1
- package/dist/mocks/provenance/mockActivity.js.map +1 -1
- package/dist/mocks/query/defaultFileViewColumnModels.js.map +1 -1
- package/dist/mocks/query/mockFeaturedDataTabsQueryData.js.map +1 -1
- package/dist/mocks/query/mockHomepageQueryResultData.js.map +1 -1
- package/dist/mocks/query/mockProjectViewQueryResults.js.map +1 -1
- package/dist/mocks/query/mockRejectionReasonsTableQueryResultBundle.js.map +1 -1
- package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
- package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts +13 -0
- package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts.map +1 -1
- package/dist/mocks/query/mockUserCardTableQueryResultBundle.js +27 -0
- package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
- package/dist/mocks/query/mock_query_data.js.map +1 -1
- package/dist/mocks/query/syn16787123.js.map +1 -1
- package/dist/mocks/query/syn17328596.js.map +1 -1
- package/dist/mocks/query/syn51735464.js.map +1 -1
- package/dist/mocks/query/syn51735464GroupBySpecies.js.map +1 -1
- package/dist/mocks/realm/mockRealmPrincipal.js.map +1 -1
- package/dist/mocks/team/mockTeam.js.map +1 -1
- package/dist/mocks/termsOfService/mockTermsOfService.js.map +1 -1
- package/dist/mocks/user/mock_user_profile.js.map +1 -1
- package/dist/mocks/usergroup/mockUserGroup.js.map +1 -1
- package/dist/ror-client/index.js.map +1 -1
- package/dist/stories/ColorPaletteInspector.js.map +1 -1
- package/dist/stories/ToastDemo.js.map +1 -1
- package/dist/stories/stubs/Alert/MuiAlert.js.map +1 -1
- package/dist/stories/stubs/Button/MuiButton.js.map +1 -1
- package/dist/stories/stubs/Dialog/MuiDialog.js.map +1 -1
- package/dist/stories/stubs/TextField/MuiTextField.js.map +1 -1
- package/dist/stories/stubs/Tooltip/MuiTooltip.js.map +1 -1
- package/dist/style/components/_cards.scss +10 -0
- package/dist/style/components/_data-grid-extra.css +1 -1
- package/dist/style/components/_data-grid-extra.scss +7 -1
- package/dist/style/main.css +1 -1
- package/dist/synapse-client/HttpClient.js.map +1 -1
- package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
- package/dist/synapse-client/SynapseClient.js +499 -505
- package/dist/synapse-client/SynapseClient.js.map +1 -1
- package/dist/synapse-client/SynapseClientUtils.js.map +1 -1
- package/dist/synapse-queries/InfiniteQueryUtils.js.map +1 -1
- package/dist/synapse-queries/KeyFactory.js.map +1 -1
- package/dist/synapse-queries/QueryFilterUtils.js.map +1 -1
- package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
- package/dist/synapse-queries/asynchronous/usePollAsynchronousJob.js.map +1 -1
- package/dist/synapse-queries/auth/useChangePassword.js.map +1 -1
- package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
- package/dist/synapse-queries/auth/useResetPassword.js.map +1 -1
- package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
- package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
- package/dist/synapse-queries/chat/useChat.js.map +1 -1
- package/dist/synapse-queries/croissant/useGetCroissantUrl.js.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -0
- package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
- package/dist/synapse-queries/curation/task/useCurationTask.js +12 -2
- package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessApprovals.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useGetApprovedSubmissionInfo.js.map +1 -1
- package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
- package/dist/synapse-queries/docker/useGetDockerTag.js.map +1 -1
- package/dist/synapse-queries/doi/useDOI.js.map +1 -1
- package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
- package/dist/synapse-queries/entity/useActionsRequiredForTableQuery.js.map +1 -1
- package/dist/synapse-queries/entity/useEntity.js.map +1 -1
- package/dist/synapse-queries/entity/useEntityBoundSchema.js.map +1 -1
- package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
- package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
- package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
- package/dist/synapse-queries/entity/useGetEntityActionsRequired.js.map +1 -1
- package/dist/synapse-queries/entity/useGetEntityChallenge.js.map +1 -1
- package/dist/synapse-queries/entity/useGetEntityChildren.js.map +1 -1
- package/dist/synapse-queries/entity/useGetEntityForum.js.map +1 -1
- package/dist/synapse-queries/entity/useGetEntityHeaders.js.map +1 -1
- package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
- package/dist/synapse-queries/entity/useProjectStorage.js.map +1 -1
- package/dist/synapse-queries/entity/useSchema.js.map +1 -1
- package/dist/synapse-queries/evaluation/useEvaluation.js.map +1 -1
- package/dist/synapse-queries/featureflags/useGetFeatureFlag.js.map +1 -1
- package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
- package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
- package/dist/synapse-queries/file/useFileHandle.js.map +1 -1
- package/dist/synapse-queries/file/useFiles.js.map +1 -1
- package/dist/synapse-queries/file/useSynapseMultipartUpload.js.map +1 -1
- package/dist/synapse-queries/file/useUploadDestination.js.map +1 -1
- package/dist/synapse-queries/forum/useForum.js.map +1 -1
- package/dist/synapse-queries/forum/useReply.js.map +1 -1
- package/dist/synapse-queries/forum/useThread.js.map +1 -1
- package/dist/synapse-queries/github/useGithub.js.map +1 -1
- package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
- package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
- package/dist/synapse-queries/grid/useGridPresignedUrl.js.map +1 -1
- package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
- package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
- package/dist/synapse-queries/message/useMessage.js.map +1 -1
- package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
- package/dist/synapse-queries/portal/useListPortals.js.map +1 -1
- package/dist/synapse-queries/portal/usePortal.js.map +1 -1
- package/dist/synapse-queries/provenance/useGetActivityForEntity.js.map +1 -1
- package/dist/synapse-queries/realm/useRealmPrincipals.js.map +1 -1
- package/dist/synapse-queries/ror/index.js.map +1 -1
- package/dist/synapse-queries/search/useSearch.js.map +1 -1
- package/dist/synapse-queries/search/useSuggestion.js.map +1 -1
- package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
- package/dist/synapse-queries/table/useColumnModel.js.map +1 -1
- package/dist/synapse-queries/table/useDefiningSql.js.map +1 -1
- package/dist/synapse-queries/table/useDownloadTable.js.map +1 -1
- package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
- package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
- package/dist/synapse-queries/team/useTeam.js.map +1 -1
- package/dist/synapse-queries/team/useTeamList.js.map +1 -1
- package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
- package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
- package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
- package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
- package/dist/synapse-queries/user/useFavorites.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserProjects.js.map +1 -1
- package/dist/synapse-queries/user/useGetUserTeams.js.map +1 -1
- package/dist/synapse-queries/user/usePersonalAccessToken.js.map +1 -1
- package/dist/synapse-queries/user/useProjects.js.map +1 -1
- package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
- package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
- package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
- package/dist/synapse-queries/verificationSubmission/useVerificationSubmission.js.map +1 -1
- package/dist/synapse-queries/webhook/useWebhook.js.map +1 -1
- package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
- package/dist/testutils/ComponentToBePassedPropsCustomMatcher.js.map +1 -1
- package/dist/testutils/IsEditingStoreTestUtils.js +17 -0
- package/dist/testutils/IsEditingStoreTestUtils.js.map +1 -0
- package/dist/testutils/LocationTracker.js.map +1 -1
- package/dist/testutils/MarkdownSynapseUtils.js.map +1 -1
- package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
- package/dist/testutils/TestingLibraryUtils.js +18 -16
- package/dist/testutils/TestingLibraryUtils.js.map +1 -1
- package/dist/testutils/muiDatePickerMock.js.map +1 -1
- package/dist/testutils/vitest.setup.js.map +1 -1
- package/dist/theme/DefaultTheme.js.map +1 -1
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/mergeTheme.js.map +1 -1
- package/dist/theme/palette/Palettes.js.map +1 -1
- package/dist/theme/spreadSx.js.map +1 -1
- package/dist/theme/typography/Link.js.map +1 -1
- package/dist/theme/typography/Typography.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/APIConstants.js.map +1 -1
- package/dist/utils/AppUtils/AppUtils.d.ts.map +1 -1
- package/dist/utils/AppUtils/AppUtils.js +11 -11
- package/dist/utils/AppUtils/AppUtils.js.map +1 -1
- package/dist/utils/AppUtils/session/ApplicationSessionContext.js.map +1 -1
- package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
- package/dist/utils/AppUtils/session/AuthenticationGuard.js.map +1 -1
- package/dist/utils/AppUtils/session/SessionInitializedGuard.js.map +1 -1
- package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
- package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
- package/dist/utils/ContentTypeUtils.js.map +1 -1
- package/dist/utils/OrientationBannerConstants.js.map +1 -1
- package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
- package/dist/utils/SynapseConstants.js.map +1 -1
- package/dist/utils/analytics/sendAnalyticsEvent.js.map +1 -1
- package/dist/utils/analytics/sendSearchEvent.js.map +1 -1
- package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
- package/dist/utils/appendFinalQueryParamKey.js.map +1 -1
- package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
- package/dist/utils/context/AridhiaContext.js.map +1 -1
- package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
- package/dist/utils/context/FullContextProvider.js.map +1 -1
- package/dist/utils/context/GlobalIsEditingContext.js.map +1 -1
- package/dist/utils/context/SynapseContext.js.map +1 -1
- package/dist/utils/featureflag/FeatureFlags.js.map +1 -1
- package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
- package/dist/utils/functions/ArrayUtils.js.map +1 -1
- package/dist/utils/functions/DateFormatter.js.map +1 -1
- package/dist/utils/functions/DateTimeUtils.js.map +1 -1
- package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
- package/dist/utils/functions/FileHandleUtils.js.map +1 -1
- package/dist/utils/functions/GridApiUtils.js.map +1 -1
- package/dist/utils/functions/IsEqualTreatUndefinedAsMissing.js.map +1 -1
- package/dist/utils/functions/IsExternalLink.js.map +1 -1
- package/dist/utils/functions/ObjectUtils.js.map +1 -1
- package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
- package/dist/utils/functions/RealmUtils.js.map +1 -1
- package/dist/utils/functions/RegularExpressions.js.map +1 -1
- package/dist/utils/functions/ResolveLinkEntity.js.map +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
- package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
- package/dist/utils/functions/SqlFunctions.js.map +1 -1
- package/dist/utils/functions/StringUtils.js.map +1 -1
- package/dist/utils/functions/TableColumnSchemaUtils.js.map +1 -1
- package/dist/utils/functions/calculateFriendlyFileSize.js.map +1 -1
- package/dist/utils/functions/colorPalette.js.map +1 -1
- package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
- package/dist/utils/functions/dispatchDownloadListChangeEvent.js.map +1 -1
- package/dist/utils/functions/generateCsrfToken.js.map +1 -1
- package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
- package/dist/utils/functions/getEndpoint.js +3 -3
- package/dist/utils/functions/getEndpoint.js.map +1 -1
- package/dist/utils/functions/getPrincipalDisplayName.js.map +1 -1
- package/dist/utils/functions/getSynapseEntityUrl.js.map +1 -1
- package/dist/utils/functions/getSynapseWebClientLink.js.map +1 -1
- package/dist/utils/functions/getUserData.js.map +1 -1
- package/dist/utils/functions/queryUtils.js.map +1 -1
- package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
- package/dist/utils/functions/unCamelCase.js.map +1 -1
- package/dist/utils/hooks/useConfirmItems.js.map +1 -1
- package/dist/utils/hooks/useCookiePreferences.d.ts.map +1 -1
- package/dist/utils/hooks/useCookiePreferences.js +24 -23
- package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
- package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
- package/dist/utils/hooks/useDebouncedEffect.js.map +1 -1
- package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
- package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
- package/dist/utils/hooks/useGetEntityMetadata.js.map +1 -1
- package/dist/utils/hooks/useGetGoalData.js +2 -4
- package/dist/utils/hooks/useGetGoalData.js.map +1 -1
- package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
- package/dist/utils/hooks/useGetIsAllSelectedInfiniteList.js.map +1 -1
- package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
- package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
- package/dist/utils/hooks/useIsBot.js.map +1 -1
- package/dist/utils/hooks/useJsonLdScriptElement.js.map +1 -1
- package/dist/utils/hooks/useListState.js.map +1 -1
- package/dist/utils/hooks/useLogin.js.map +1 -1
- package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -1
- package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
- package/dist/utils/hooks/useNativeSearchParams.js.map +1 -1
- package/dist/utils/hooks/useOneSageURL.js.map +1 -1
- package/dist/utils/hooks/useOverlay.js.map +1 -1
- package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
- package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
- package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
- package/dist/utils/hooks/useSet.js.map +1 -1
- package/dist/utils/hooks/useShowDesktop.js.map +1 -1
- package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
- package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
- package/dist/utils/hooks/useTraceUpdate.js.map +1 -1
- package/dist/utils/hooks/useTrackTransientListItems.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/getActiveUploadCount.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/getFileEntityIdWithSameName.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
- package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
- package/dist/utils/html/TargetEnum.js.map +1 -1
- package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
- package/dist/utils/jsonschema/getEnumeratedValues.js.map +1 -1
- package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
- package/dist/utils/jsonschema/getRequiredAttributes.js.map +1 -1
- package/dist/utils/jsonschema/getSchemaForProperty.js.map +1 -1
- package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
- package/dist/utils/jsonschema/getType.js.map +1 -1
- package/dist/utils/searchDefaults.js.map +1 -1
- package/dist/utils/slots/SlotUtils.js.map +1 -1
- package/dist/utils/types/IsType.js.map +1 -1
- package/package.json +68 -65
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentMetadataContext.js","names":[],"sources":["../../../src/utils/context/DocumentMetadataContext.tsx"],"sourcesContent":["import {\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport noop from 'lodash-es/noop'\n\nexport type DocumentMetadataRegistration = {\n title?: string\n description?: string\n priority?: number\n}\n\ntype DocumentMetadataContextValue = {\n register: (registration: DocumentMetadataRegistration) => () => void\n}\n\ntype DocumentMetadataProviderProps = PropsWithChildren<{\n defaultTitle?: string\n defaultDescription?: string\n}>\n\ntype MetadataEntry = {\n id: symbol\n title?: string\n description?: string\n priority: number\n}\n\nconst DocumentMetadataContext = createContext<\n DocumentMetadataContextValue | undefined\n>(undefined)\n\nexport function DocumentMetadataProvider(props: DocumentMetadataProviderProps) {\n // Centralizes document.title/meta description writes so consumers can register values\n // with priorities; highest priority wins, then portal defaults\n const { children, defaultTitle, defaultDescription } = props\n const [entries, setEntries] = useState<MetadataEntry[]>([])\n\n // Keep registrations stable between renders and automatically clean up on unmount.\n const sortedEntries = useMemo(\n () => [...entries].sort((a, b) => b.priority - a.priority),\n [entries],\n )\n\n const register = useCallback(\n (registration: DocumentMetadataRegistration) => {\n const entry: MetadataEntry = {\n id: Symbol('DocumentMetadataEntry'),\n title: registration.title,\n description: registration.description,\n priority: registration.priority ?? 0,\n }\n setEntries(current => [...current, entry])\n return () => {\n setEntries(current => current.filter(item => item.id !== entry.id))\n }\n },\n [setEntries],\n )\n\n const contextValue = useMemo<DocumentMetadataContextValue>(\n () => ({ register }),\n [register],\n )\n\n useEffect(() => {\n // Resolve the highest-priority title/description and push them to the DOM.\n const resolvedTitle =\n sortedEntries.find(entry => entry.title !== undefined)?.title ??\n defaultTitle\n\n if (resolvedTitle !== undefined && document.title !== resolvedTitle) {\n document.title = resolvedTitle\n }\n\n const descriptionElement = document.querySelector(\n 'meta[name=\"description\"]',\n )\n if (descriptionElement) {\n const resolvedDescription =\n sortedEntries.find(entry => entry.description !== undefined)\n ?.description ?? defaultDescription\n\n if (\n typeof resolvedDescription === 'string' &&\n descriptionElement.getAttribute('content') !== resolvedDescription\n ) {\n descriptionElement.setAttribute('content', resolvedDescription)\n }\n }\n }, [defaultTitle, defaultDescription, sortedEntries])\n\n return (\n <DocumentMetadataContext.Provider value={contextValue}>\n {children}\n </DocumentMetadataContext.Provider>\n )\n}\n\nexport function useDocumentMetadata(\n registration: DocumentMetadataRegistration,\n) {\n const context = useContext(DocumentMetadataContext)\n const { title, description, priority } = registration\n\n useEffect(() => {\n if (context) {\n return context.register({ title, description, priority })\n }\n return noop\n }, [context, title, description, priority])\n}\n"],"mappings":";;;;AAiCA,IAAM,IAA0B,EAE9B,KAAA,
|
|
1
|
+
{"version":3,"file":"DocumentMetadataContext.js","names":[],"sources":["../../../src/utils/context/DocumentMetadataContext.tsx"],"sourcesContent":["import {\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport noop from 'lodash-es/noop'\n\nexport type DocumentMetadataRegistration = {\n title?: string\n description?: string\n priority?: number\n}\n\ntype DocumentMetadataContextValue = {\n register: (registration: DocumentMetadataRegistration) => () => void\n}\n\ntype DocumentMetadataProviderProps = PropsWithChildren<{\n defaultTitle?: string\n defaultDescription?: string\n}>\n\ntype MetadataEntry = {\n id: symbol\n title?: string\n description?: string\n priority: number\n}\n\nconst DocumentMetadataContext = createContext<\n DocumentMetadataContextValue | undefined\n>(undefined)\n\nexport function DocumentMetadataProvider(props: DocumentMetadataProviderProps) {\n // Centralizes document.title/meta description writes so consumers can register values\n // with priorities; highest priority wins, then portal defaults\n const { children, defaultTitle, defaultDescription } = props\n const [entries, setEntries] = useState<MetadataEntry[]>([])\n\n // Keep registrations stable between renders and automatically clean up on unmount.\n const sortedEntries = useMemo(\n () => [...entries].sort((a, b) => b.priority - a.priority),\n [entries],\n )\n\n const register = useCallback(\n (registration: DocumentMetadataRegistration) => {\n const entry: MetadataEntry = {\n id: Symbol('DocumentMetadataEntry'),\n title: registration.title,\n description: registration.description,\n priority: registration.priority ?? 0,\n }\n setEntries(current => [...current, entry])\n return () => {\n setEntries(current => current.filter(item => item.id !== entry.id))\n }\n },\n [setEntries],\n )\n\n const contextValue = useMemo<DocumentMetadataContextValue>(\n () => ({ register }),\n [register],\n )\n\n useEffect(() => {\n // Resolve the highest-priority title/description and push them to the DOM.\n const resolvedTitle =\n sortedEntries.find(entry => entry.title !== undefined)?.title ??\n defaultTitle\n\n if (resolvedTitle !== undefined && document.title !== resolvedTitle) {\n document.title = resolvedTitle\n }\n\n const descriptionElement = document.querySelector(\n 'meta[name=\"description\"]',\n )\n if (descriptionElement) {\n const resolvedDescription =\n sortedEntries.find(entry => entry.description !== undefined)\n ?.description ?? defaultDescription\n\n if (\n typeof resolvedDescription === 'string' &&\n descriptionElement.getAttribute('content') !== resolvedDescription\n ) {\n descriptionElement.setAttribute('content', resolvedDescription)\n }\n }\n }, [defaultTitle, defaultDescription, sortedEntries])\n\n return (\n <DocumentMetadataContext.Provider value={contextValue}>\n {children}\n </DocumentMetadataContext.Provider>\n )\n}\n\nexport function useDocumentMetadata(\n registration: DocumentMetadataRegistration,\n) {\n const context = useContext(DocumentMetadataContext)\n const { title, description, priority } = registration\n\n useEffect(() => {\n if (context) {\n return context.register({ title, description, priority })\n }\n return noop\n }, [context, title, description, priority])\n}\n"],"mappings":";;;;AAiCA,IAAM,IAA0B,EAE9B,KAAA,CAAS;AAEX,SAAgB,EAAyB,GAAsC;CAG7E,IAAM,EAAE,aAAU,iBAAc,0BAAuB,GACjD,CAAC,GAAS,KAAc,EAA0B,CAAC,CAAC,GAGpD,IAAgB,QACd,CAAC,GAAG,CAAO,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,GACzD,CAAC,CAAO,CACV,GAEM,IAAW,GACd,MAA+C;EAC9C,IAAM,IAAuB;GAC3B,IAAI,OAAO,uBAAuB;GAClC,OAAO,EAAa;GACpB,aAAa,EAAa;GAC1B,UAAU,EAAa,YAAY;EACrC;EAEA,OADA,GAAW,MAAW,CAAC,GAAG,GAAS,CAAK,CAAC,SAC5B;GACX,GAAW,MAAW,EAAQ,QAAO,MAAQ,EAAK,OAAO,EAAM,EAAE,CAAC;EACpE;CACF,GACA,CAAC,CAAU,CACb,GAEM,IAAe,SACZ,EAAE,YAAS,IAClB,CAAC,CAAQ,CACX;CA6BA,OA3BA,QAAgB;EAEd,IAAM,IACJ,EAAc,MAAK,MAAS,EAAM,UAAU,KAAA,CAAS,GAAG,SACxD;EAEF,AAAI,MAAkB,KAAA,KAAa,SAAS,UAAU,MACpD,SAAS,QAAQ;EAGnB,IAAM,IAAqB,SAAS,cAClC,4BACF;EACA,IAAI,GAAoB;GACtB,IAAM,IACJ,EAAc,MAAK,MAAS,EAAM,gBAAgB,KAAA,CAAS,GACvD,eAAe;GAErB,AACE,OAAO,KAAwB,YAC/B,EAAmB,aAAa,SAAS,MAAM,KAE/C,EAAmB,aAAa,WAAW,CAAmB;EAElE;CACF,GAAG;EAAC;EAAc;EAAoB;CAAa,CAAC,GAGlD,kBAAC,EAAwB,UAAzB;EAAkC,OAAO;EACtC;CAC+B,CAAA;AAEtC;AAEA,SAAgB,EACd,GACA;CACA,IAAM,IAAU,EAAW,CAAuB,GAC5C,EAAE,UAAO,gBAAa,gBAAa;CAEzC,QACM,IACK,EAAQ,SAAS;EAAE;EAAO;EAAa;CAAS,CAAC,IAEnD,GACN;EAAC;EAAS;EAAO;EAAa;CAAQ,CAAC;AAC5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullContextProvider.js","names":[],"sources":["../../../src/utils/context/FullContextProvider.tsx"],"sourcesContent":["import { ThemeProvider } from '@/theme/ThemeProvider'\nimport {\n GlobalIsEditingContextProvider,\n IsEditingStore,\n} from '@/utils/context/GlobalIsEditingContext'\nimport { ThemeOptions } from '@mui/material'\nimport {\n QueryClient,\n QueryClientConfig,\n QueryClientProvider,\n} from '@tanstack/react-query'\nimport { PropsWithChildren, Suspense } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from './SynapseContext'\nimport { DocumentMetadataProvider } from './DocumentMetadataContext'\nimport {\n ApplicationSessionContextProvider,\n ApplicationSessionContextType,\n} from '../AppUtils/session/ApplicationSessionContext'\n\nexport const defaultQueryClientConfig = {\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5, // 5 min\n gcTime: 1000 * 60 * 30, // 30 min\n retry: false, // SynapseClient knows which queries to retry\n refetchOnWindowFocus: false,\n },\n },\n} satisfies QueryClientConfig\n\nconst defaultQueryClient = new QueryClient(defaultQueryClientConfig)\n\nexport type FullContextProviderProps = PropsWithChildren<{\n isEditingStore?: IsEditingStore\n synapseContext: Partial<SynapseContextType>\n queryClient?: QueryClient\n theme?: ThemeOptions\n applicationSessionContext: ApplicationSessionContextType\n}>\n\n/**\n * Provides all context necessary for components in SRC.\n *\n * Contexts include:\n * - SynapseContext\n * - QueryClientContext (react-query)\n * - ThemeContext (@mui)\n * - DocumentMetadataContext - for managing page title and meta descriptions\n * - ApplicationSessionContext - for managing user session state\n * - isEditingStore - used to sync editing state across the application\n *\n * IMPORTANT: The `applicationSessionContext` prop is required. For applications that need\n * full session management (e.g., login/logout), use `ApplicationSessionManager` which\n * provides its own context. For testing or simple use cases, use `MOCK_APPLICATION_SESSION_CONTEXT`.\n */\nexport function FullContextProvider(props: FullContextProviderProps) {\n const {\n children,\n synapseContext,\n queryClient,\n theme,\n isEditingStore: isEditingStoreFromProps,\n applicationSessionContext,\n } = props\n const isEditingStore = isEditingStoreFromProps || {\n subscribe: () => () => {},\n getSnapshot: () => false,\n setIsEditing: () => {},\n }\n\n return (\n <QueryClientProvider client={queryClient ?? defaultQueryClient}>\n <ThemeProvider theme={theme}>\n <SynapseContextProvider synapseContext={{ ...synapseContext }}>\n <ApplicationSessionContextProvider\n context={applicationSessionContext}\n >\n <DocumentMetadataProvider>\n <GlobalIsEditingContextProvider\n subscribe={isEditingStore.subscribe}\n getSnapshot={isEditingStore.getSnapshot}\n setIsEditing={isEditingStore.setIsEditing}\n >\n <Suspense fallback={null}>{children}</Suspense>\n </GlobalIsEditingContextProvider>\n </DocumentMetadataProvider>\n </ApplicationSessionContextProvider>\n </SynapseContextProvider>\n </ThemeProvider>\n </QueryClientProvider>\n )\n}\n\nexport default FullContextProvider\n"],"mappings":";;;;;;;;;AAmBA,IAAa,IAA2B,EACtC,gBAAgB,EACd,SAAS;CACP,WAAW,MAAO,KAAK;CACvB,QAAQ,MAAO,KAAK;CACpB,OAAO;CACP,sBAAsB;
|
|
1
|
+
{"version":3,"file":"FullContextProvider.js","names":[],"sources":["../../../src/utils/context/FullContextProvider.tsx"],"sourcesContent":["import { ThemeProvider } from '@/theme/ThemeProvider'\nimport {\n GlobalIsEditingContextProvider,\n IsEditingStore,\n} from '@/utils/context/GlobalIsEditingContext'\nimport { ThemeOptions } from '@mui/material'\nimport {\n QueryClient,\n QueryClientConfig,\n QueryClientProvider,\n} from '@tanstack/react-query'\nimport { PropsWithChildren, Suspense } from 'react'\nimport { SynapseContextProvider, SynapseContextType } from './SynapseContext'\nimport { DocumentMetadataProvider } from './DocumentMetadataContext'\nimport {\n ApplicationSessionContextProvider,\n ApplicationSessionContextType,\n} from '../AppUtils/session/ApplicationSessionContext'\n\nexport const defaultQueryClientConfig = {\n defaultOptions: {\n queries: {\n staleTime: 1000 * 60 * 5, // 5 min\n gcTime: 1000 * 60 * 30, // 30 min\n retry: false, // SynapseClient knows which queries to retry\n refetchOnWindowFocus: false,\n },\n },\n} satisfies QueryClientConfig\n\nconst defaultQueryClient = new QueryClient(defaultQueryClientConfig)\n\nexport type FullContextProviderProps = PropsWithChildren<{\n isEditingStore?: IsEditingStore\n synapseContext: Partial<SynapseContextType>\n queryClient?: QueryClient\n theme?: ThemeOptions\n applicationSessionContext: ApplicationSessionContextType\n}>\n\n/**\n * Provides all context necessary for components in SRC.\n *\n * Contexts include:\n * - SynapseContext\n * - QueryClientContext (react-query)\n * - ThemeContext (@mui)\n * - DocumentMetadataContext - for managing page title and meta descriptions\n * - ApplicationSessionContext - for managing user session state\n * - isEditingStore - used to sync editing state across the application\n *\n * IMPORTANT: The `applicationSessionContext` prop is required. For applications that need\n * full session management (e.g., login/logout), use `ApplicationSessionManager` which\n * provides its own context. For testing or simple use cases, use `MOCK_APPLICATION_SESSION_CONTEXT`.\n */\nexport function FullContextProvider(props: FullContextProviderProps) {\n const {\n children,\n synapseContext,\n queryClient,\n theme,\n isEditingStore: isEditingStoreFromProps,\n applicationSessionContext,\n } = props\n const isEditingStore = isEditingStoreFromProps || {\n subscribe: () => () => {},\n getSnapshot: () => false,\n setIsEditing: () => {},\n }\n\n return (\n <QueryClientProvider client={queryClient ?? defaultQueryClient}>\n <ThemeProvider theme={theme}>\n <SynapseContextProvider synapseContext={{ ...synapseContext }}>\n <ApplicationSessionContextProvider\n context={applicationSessionContext}\n >\n <DocumentMetadataProvider>\n <GlobalIsEditingContextProvider\n subscribe={isEditingStore.subscribe}\n getSnapshot={isEditingStore.getSnapshot}\n setIsEditing={isEditingStore.setIsEditing}\n >\n <Suspense fallback={null}>{children}</Suspense>\n </GlobalIsEditingContextProvider>\n </DocumentMetadataProvider>\n </ApplicationSessionContextProvider>\n </SynapseContextProvider>\n </ThemeProvider>\n </QueryClientProvider>\n )\n}\n\nexport default FullContextProvider\n"],"mappings":";;;;;;;;;AAmBA,IAAa,IAA2B,EACtC,gBAAgB,EACd,SAAS;CACP,WAAW,MAAO,KAAK;CACvB,QAAQ,MAAO,KAAK;CACpB,OAAO;CACP,sBAAsB;AACxB,EACF,EACF,GAEM,IAAqB,IAAI,EAAY,CAAwB;AAyBnE,SAAgB,EAAoB,GAAiC;CACnE,IAAM,EACJ,aACA,mBACA,gBACA,UACA,gBAAgB,GAChB,iCACE,GACE,IAAiB,KAA2B;EAChD,uBAAuB,CAAC;EACxB,mBAAmB;EACnB,oBAAoB,CAAC;CACvB;CAEA,OACE,kBAAC,GAAD;EAAqB,QAAQ,KAAe;YAC1C,kBAAC,GAAD;GAAsB;aACpB,kBAAC,GAAD;IAAwB,gBAAgB,EAAE,GAAG,EAAe;cAC1D,kBAAC,GAAD;KACE,SAAS;eAET,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MACE,WAAW,EAAe;MAC1B,aAAa,EAAe;MAC5B,cAAc,EAAe;gBAE7B,kBAAC,GAAD;OAAU,UAAU;OAAO;MAAmB,CAAA;KAChB,CAAA,EACR,CAAA;IACO,CAAA;GACb,CAAA;EACX,CAAA;CACI,CAAA;AAEzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalIsEditingContext.js","names":[],"sources":["../../../src/utils/context/GlobalIsEditingContext.tsx"],"sourcesContent":["import noop from 'lodash-es/noop'\nimport {\n createContext,\n PropsWithChildren,\n useContext,\n useSyncExternalStore,\n} from 'react'\n\ntype GlobalIsEditingContextType = {\n /** If true, the user is editing a resource and should be presented with a warning before navigating away or performing\n * some other action that will destroy the unsaved changes */\n isEditing: boolean\n /** Function to set the editing state. This should be called when the user starts or stops editing a resource */\n setIsEditing: (value: boolean) => void\n}\n\nconst GlobalIsEditingContext = createContext<GlobalIsEditingContextType>({\n isEditing: false,\n setIsEditing: noop,\n})\n\ntype UnsubscribeFn = () => void\ntype SubscribeFn = (callback: () => void) => UnsubscribeFn\nexport type IsEditingStore = {\n subscribe: SubscribeFn\n getSnapshot: () => boolean\n setIsEditing: (value: boolean) => void\n}\ntype GlobalIsEditingContextProviderProps = PropsWithChildren<IsEditingStore>\n\n/**\n * Provider for context that tracks whether the user is currently editing a resource, to be used to prevent the user from\n * navigating away before changes are saved.\n *\n * This context provider does not itself implement the logic to prevent navigation, but provides an interface for\n * synchronizing with the editing state tracked in the application.\n */\nexport function GlobalIsEditingContextProvider(\n props: GlobalIsEditingContextProviderProps,\n) {\n const { subscribe, getSnapshot, setIsEditing, children } = props\n\n const isEditing = useSyncExternalStore(subscribe, getSnapshot, () => false)\n\n return (\n <GlobalIsEditingContext.Provider value={{ isEditing, setIsEditing }}>\n {children}\n </GlobalIsEditingContext.Provider>\n )\n}\n\n/**\n * Hook to access the global editing context so the application can prevent navigation away from a page if a resource is being edited.\n */\nexport function useGlobalIsEditingContext(): GlobalIsEditingContextType {\n const context = useContext(GlobalIsEditingContext)\n if (context === undefined) {\n console.warn(\n 'useGlobalIsEditingContext should be used within a GlobalIsEditingContextProvider. Editing state will not be tracked!',\n )\n return {\n isEditing: false,\n setIsEditing: () => {\n console.warn(\n 'setIsEditing called outside of a GlobalIsEditingContextProvider. Editing state will not be tracked!',\n )\n },\n }\n }\n return context\n}\n"],"mappings":";;;;AAgBA,IAAM,IAAyB,EAA0C;CACvE,WAAW;CACX,cAAc;
|
|
1
|
+
{"version":3,"file":"GlobalIsEditingContext.js","names":[],"sources":["../../../src/utils/context/GlobalIsEditingContext.tsx"],"sourcesContent":["import noop from 'lodash-es/noop'\nimport {\n createContext,\n PropsWithChildren,\n useContext,\n useSyncExternalStore,\n} from 'react'\n\ntype GlobalIsEditingContextType = {\n /** If true, the user is editing a resource and should be presented with a warning before navigating away or performing\n * some other action that will destroy the unsaved changes */\n isEditing: boolean\n /** Function to set the editing state. This should be called when the user starts or stops editing a resource */\n setIsEditing: (value: boolean) => void\n}\n\nconst GlobalIsEditingContext = createContext<GlobalIsEditingContextType>({\n isEditing: false,\n setIsEditing: noop,\n})\n\ntype UnsubscribeFn = () => void\ntype SubscribeFn = (callback: () => void) => UnsubscribeFn\nexport type IsEditingStore = {\n subscribe: SubscribeFn\n getSnapshot: () => boolean\n setIsEditing: (value: boolean) => void\n}\ntype GlobalIsEditingContextProviderProps = PropsWithChildren<IsEditingStore>\n\n/**\n * Provider for context that tracks whether the user is currently editing a resource, to be used to prevent the user from\n * navigating away before changes are saved.\n *\n * This context provider does not itself implement the logic to prevent navigation, but provides an interface for\n * synchronizing with the editing state tracked in the application.\n */\nexport function GlobalIsEditingContextProvider(\n props: GlobalIsEditingContextProviderProps,\n) {\n const { subscribe, getSnapshot, setIsEditing, children } = props\n\n const isEditing = useSyncExternalStore(subscribe, getSnapshot, () => false)\n\n return (\n <GlobalIsEditingContext.Provider value={{ isEditing, setIsEditing }}>\n {children}\n </GlobalIsEditingContext.Provider>\n )\n}\n\n/**\n * Hook to access the global editing context so the application can prevent navigation away from a page if a resource is being edited.\n */\nexport function useGlobalIsEditingContext(): GlobalIsEditingContextType {\n const context = useContext(GlobalIsEditingContext)\n if (context === undefined) {\n console.warn(\n 'useGlobalIsEditingContext should be used within a GlobalIsEditingContextProvider. Editing state will not be tracked!',\n )\n return {\n isEditing: false,\n setIsEditing: () => {\n console.warn(\n 'setIsEditing called outside of a GlobalIsEditingContextProvider. Editing state will not be tracked!',\n )\n },\n }\n }\n return context\n}\n"],"mappings":";;;;AAgBA,IAAM,IAAyB,EAA0C;CACvE,WAAW;CACX,cAAc;AAChB,CAAC;AAkBD,SAAgB,EACd,GACA;CACA,IAAM,EAAE,cAAW,gBAAa,iBAAc,gBAAa,GAErD,IAAY,EAAqB,GAAW,SAAmB,EAAK;CAE1E,OACE,kBAAC,EAAuB,UAAxB;EAAiC,OAAO;GAAE;GAAW;EAAa;EAC/D;CAC8B,CAAA;AAErC;AAKA,SAAgB,IAAwD;CACtE,IAAM,IAAU,EAAW,CAAsB;CAcjD,OAbI,MAAY,KAAA,KACd,QAAQ,KACN,sHACF,GACO;EACL,WAAW;EACX,oBAAoB;GAClB,QAAQ,KACN,qGACF;EACF;CACF,KAEK;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SynapseContext.js","names":[],"sources":["../../../src/utils/context/SynapseContext.tsx"],"sourcesContent":["import { SynapseErrorBoundary } from '@/components/error/ErrorBanner'\nimport { KeyFactory } from '@/synapse-queries/KeyFactory'\nimport { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport { createContext, PropsWithChildren, useContext, useMemo } from 'react'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/getEndpoint'\n\nexport type SynapseContextType = {\n /** The user's access token. If undefined, the user is not logged in */\n accessToken: string | undefined\n /** Whether the user is authenticated */\n isAuthenticated: boolean\n /** If the user has enabled experimental mode */\n isInExperimentalMode: boolean\n /** If the user prefers time to be displayed in UTC format */\n utcTime: boolean\n /** Whether to wrap all children of this context in an error boundary. Useful if this context wraps just one component. */\n withErrorBoundary: boolean\n /** The URL of the download cart page in the current app. Used to properly link components */\n downloadCartPageUrl: string\n /** The URL of the people search page in the current app */\n peopleSearchPageUrl?: string\n /** The key factory to use for react-query. Generated automatically. */\n keyFactory: KeyFactory\n /** The appId identifying the product. Used to brand the Synapse account management site, aka OneSage. */\n appId?: string\n /* API client objects for Synapse. Generated automatically. */\n synapseClient: SynapseClient\n}\n\nconst defaultContext = {\n accessToken: undefined,\n isAuthenticated: false,\n isInExperimentalMode: false,\n utcTime: false,\n withErrorBoundary: false,\n keyFactory: new KeyFactory(undefined),\n downloadCartPageUrl: '/DownloadCart',\n peopleSearchPageUrl: '/PeopleSearch:',\n appId: undefined,\n synapseClient: new SynapseClient(),\n} satisfies SynapseContextType\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseContext = createContext<SynapseContextType>(defaultContext)\n\nexport type SynapseContextProviderProps = PropsWithChildren<{\n synapseContext?: Partial<SynapseContextType>\n}>\n\n/**\n * Provides context necessary for most components in SRC.\n *\n * The SynapseContextProvider must be wrapped in a react-query QueryClientProvider.\n * @returns\n */\nexport function SynapseContextProvider(props: SynapseContextProviderProps) {\n const { children, synapseContext: providedContext } = props\n const queryKeyFactory = useMemo(\n () => new KeyFactory(providedContext?.accessToken),\n [providedContext?.accessToken],\n )\n\n const basePath = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT)\n\n const synapseApiClient = useMemo(() => {\n if (providedContext?.synapseClient) {\n return providedContext?.synapseClient\n }\n const configurationParameters = {\n accessToken: providedContext?.accessToken,\n basePath: basePath,\n }\n return new SynapseClient(configurationParameters)\n }, [providedContext?.synapseClient, providedContext?.accessToken, basePath])\n\n const synapseContext: SynapseContextType = useMemo(\n () => ({\n accessToken: providedContext?.accessToken,\n isAuthenticated: providedContext?.isAuthenticated ?? false,\n isInExperimentalMode: providedContext?.isInExperimentalMode ?? false,\n utcTime: providedContext?.utcTime ?? false,\n withErrorBoundary: providedContext?.withErrorBoundary ?? false,\n downloadCartPageUrl:\n providedContext?.downloadCartPageUrl ?? '/DownloadCart',\n peopleSearchPageUrl:\n providedContext?.peopleSearchPageUrl ?? '/PeopleSearch:',\n keyFactory: providedContext?.keyFactory ?? queryKeyFactory,\n appId: providedContext?.appId,\n synapseClient: synapseApiClient,\n }),\n [\n providedContext?.accessToken,\n providedContext?.isAuthenticated,\n providedContext?.downloadCartPageUrl,\n providedContext?.peopleSearchPageUrl,\n providedContext?.isInExperimentalMode,\n providedContext?.keyFactory,\n providedContext?.utcTime,\n providedContext?.withErrorBoundary,\n providedContext?.appId,\n queryKeyFactory,\n synapseApiClient,\n ],\n )\n\n return (\n <SynapseContext.Provider value={synapseContext}>\n {synapseContext?.withErrorBoundary ? (\n <SynapseErrorBoundary>{children}</SynapseErrorBoundary>\n ) : (\n children\n )}\n </SynapseContext.Provider>\n )\n}\n\nexport const SynapseContextConsumer = SynapseContext.Consumer\n\nexport function useSynapseContext(): SynapseContextType {\n const context = useContext(SynapseContext)\n if (context === undefined) {\n throw new Error(\n 'useSynapseContext must be used within a SynapseContextProvider',\n )\n }\n return context\n}\n"],"mappings":";;;;;;AA6CA,IAAa,IAAiB,EAAkC;CAf9D,aAAa,KAAA;CACb,iBAAiB;CACjB,sBAAsB;CACtB,SAAS;CACT,mBAAmB;CACnB,YAAY,IAAI,EAAW,KAAA,
|
|
1
|
+
{"version":3,"file":"SynapseContext.js","names":[],"sources":["../../../src/utils/context/SynapseContext.tsx"],"sourcesContent":["import { SynapseErrorBoundary } from '@/components/error/ErrorBanner'\nimport { KeyFactory } from '@/synapse-queries/KeyFactory'\nimport { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport { createContext, PropsWithChildren, useContext, useMemo } from 'react'\nimport { BackendDestinationEnum, getEndpoint } from '../functions/getEndpoint'\n\nexport type SynapseContextType = {\n /** The user's access token. If undefined, the user is not logged in */\n accessToken: string | undefined\n /** Whether the user is authenticated */\n isAuthenticated: boolean\n /** If the user has enabled experimental mode */\n isInExperimentalMode: boolean\n /** If the user prefers time to be displayed in UTC format */\n utcTime: boolean\n /** Whether to wrap all children of this context in an error boundary. Useful if this context wraps just one component. */\n withErrorBoundary: boolean\n /** The URL of the download cart page in the current app. Used to properly link components */\n downloadCartPageUrl: string\n /** The URL of the people search page in the current app */\n peopleSearchPageUrl?: string\n /** The key factory to use for react-query. Generated automatically. */\n keyFactory: KeyFactory\n /** The appId identifying the product. Used to brand the Synapse account management site, aka OneSage. */\n appId?: string\n /* API client objects for Synapse. Generated automatically. */\n synapseClient: SynapseClient\n}\n\nconst defaultContext = {\n accessToken: undefined,\n isAuthenticated: false,\n isInExperimentalMode: false,\n utcTime: false,\n withErrorBoundary: false,\n keyFactory: new KeyFactory(undefined),\n downloadCartPageUrl: '/DownloadCart',\n peopleSearchPageUrl: '/PeopleSearch:',\n appId: undefined,\n synapseClient: new SynapseClient(),\n} satisfies SynapseContextType\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseContext = createContext<SynapseContextType>(defaultContext)\n\nexport type SynapseContextProviderProps = PropsWithChildren<{\n synapseContext?: Partial<SynapseContextType>\n}>\n\n/**\n * Provides context necessary for most components in SRC.\n *\n * The SynapseContextProvider must be wrapped in a react-query QueryClientProvider.\n * @returns\n */\nexport function SynapseContextProvider(props: SynapseContextProviderProps) {\n const { children, synapseContext: providedContext } = props\n const queryKeyFactory = useMemo(\n () => new KeyFactory(providedContext?.accessToken),\n [providedContext?.accessToken],\n )\n\n const basePath = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT)\n\n const synapseApiClient = useMemo(() => {\n if (providedContext?.synapseClient) {\n return providedContext?.synapseClient\n }\n const configurationParameters = {\n accessToken: providedContext?.accessToken,\n basePath: basePath,\n }\n return new SynapseClient(configurationParameters)\n }, [providedContext?.synapseClient, providedContext?.accessToken, basePath])\n\n const synapseContext: SynapseContextType = useMemo(\n () => ({\n accessToken: providedContext?.accessToken,\n isAuthenticated: providedContext?.isAuthenticated ?? false,\n isInExperimentalMode: providedContext?.isInExperimentalMode ?? false,\n utcTime: providedContext?.utcTime ?? false,\n withErrorBoundary: providedContext?.withErrorBoundary ?? false,\n downloadCartPageUrl:\n providedContext?.downloadCartPageUrl ?? '/DownloadCart',\n peopleSearchPageUrl:\n providedContext?.peopleSearchPageUrl ?? '/PeopleSearch:',\n keyFactory: providedContext?.keyFactory ?? queryKeyFactory,\n appId: providedContext?.appId,\n synapseClient: synapseApiClient,\n }),\n [\n providedContext?.accessToken,\n providedContext?.isAuthenticated,\n providedContext?.downloadCartPageUrl,\n providedContext?.peopleSearchPageUrl,\n providedContext?.isInExperimentalMode,\n providedContext?.keyFactory,\n providedContext?.utcTime,\n providedContext?.withErrorBoundary,\n providedContext?.appId,\n queryKeyFactory,\n synapseApiClient,\n ],\n )\n\n return (\n <SynapseContext.Provider value={synapseContext}>\n {synapseContext?.withErrorBoundary ? (\n <SynapseErrorBoundary>{children}</SynapseErrorBoundary>\n ) : (\n children\n )}\n </SynapseContext.Provider>\n )\n}\n\nexport const SynapseContextConsumer = SynapseContext.Consumer\n\nexport function useSynapseContext(): SynapseContextType {\n const context = useContext(SynapseContext)\n if (context === undefined) {\n throw new Error(\n 'useSynapseContext must be used within a SynapseContextProvider',\n )\n }\n return context\n}\n"],"mappings":";;;;;;AA6CA,IAAa,IAAiB,EAAkC;CAf9D,aAAa,KAAA;CACb,iBAAiB;CACjB,sBAAsB;CACtB,SAAS;CACT,mBAAmB;CACnB,YAAY,IAAI,EAAW,KAAA,CAAS;CACpC,qBAAqB;CACrB,qBAAqB;CACrB,OAAO,KAAA;CACP,eAAe,IAAI,EAAc;AAM6B,CAAc;AAY9E,SAAgB,EAAuB,GAAoC;CACzE,IAAM,EAAE,aAAU,gBAAgB,MAAoB,GAChD,IAAkB,QAChB,IAAI,EAAW,GAAiB,WAAW,GACjD,CAAC,GAAiB,WAAW,CAC/B,GAEM,IAAW,EAAY,EAAuB,aAAa,GAE3D,IAAmB,QACnB,GAAiB,gBACZ,GAAiB,gBAMnB,IAAI,EAAc;EAHvB,aAAa,GAAiB;EACpB;CAEa,CAAuB,GAC/C;EAAC,GAAiB;EAAe,GAAiB;EAAa;CAAQ,CAAC,GAErE,IAAqC,SAClC;EACL,aAAa,GAAiB;EAC9B,iBAAiB,GAAiB,mBAAmB;EACrD,sBAAsB,GAAiB,wBAAwB;EAC/D,SAAS,GAAiB,WAAW;EACrC,mBAAmB,GAAiB,qBAAqB;EACzD,qBACE,GAAiB,uBAAuB;EAC1C,qBACE,GAAiB,uBAAuB;EAC1C,YAAY,GAAiB,cAAc;EAC3C,OAAO,GAAiB;EACxB,eAAe;CACjB,IACA;EACE,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB,GAAiB;EACjB;EACA;CACF,CACF;CAEA,OACE,kBAAC,EAAe,UAAhB;EAAyB,OAAO;YAC7B,GAAgB,oBACf,kBAAC,GAAD,EAAuB,YAA+B,CAAA,IAEtD;CAEqB,CAAA;AAE7B;AAEA,IAAa,IAAyB,EAAe;AAErD,SAAgB,IAAwC;CACtD,IAAM,IAAU,EAAW,CAAc;CACzC,IAAI,MAAY,KAAA,GACd,MAAU,MACR,gEACF;CAEF,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureFlags.js","names":[],"sources":["../../../src/utils/featureflag/FeatureFlags.ts"],"sourcesContent":["export type FeatureFlags = Record<FeatureFlagEnum, boolean>\n\nexport enum FeatureFlagEnum {\n // If enabled, show the new header component that uses the HeaderSearchBox component\n PORTAL_SEARCH_HEADER = 'PORTAL_SEARCH_HEADER',\n\n // If enabled, allow viewing & editing the 'description' string field on entities\n DESCRIPTION_FIELD = 'DESCRIPTION_FIELD',\n\n // If enabled, use the re-implemented ACL Editor for entities\n REACT_ENTITY_ACL_EDITOR = 'REACT_ENTITY_ACL_EDITOR',\n\n // If enabled, show the chatbot entrypoint from the new Synapse Homepage\n HOMEPAGE_CHATBOT = 'HOMEPAGE_CHATBOT',\n\n // If enabled, account settings will link to a page to manage webhooks\n WEBHOOKS_UI = 'WEBHOOKS_UI',\n\n // If enabled, load the Crisp chat widget\n CRISP_CHAT = 'CRISP_CHAT',\n\n // If enabled, show the SynapseChat dialog in portals\n PORTAL_CHAT = 'PORTAL_CHAT',\n\n // If enabled, show the new version of the ADKP homepage\n ADKP_HOMEPAGE_V2 = 'ADKP_HOMEPAGE_V2',\n\n // If enabled, shows a \"New Task\" button on the metadata tasks page\n CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON = 'CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON',\n}\n"],"mappings":";AAEA,IAAY,IAAL,yBAAA,GAAA;QAEL,EAAA,
|
|
1
|
+
{"version":3,"file":"FeatureFlags.js","names":[],"sources":["../../../src/utils/featureflag/FeatureFlags.ts"],"sourcesContent":["export type FeatureFlags = Record<FeatureFlagEnum, boolean>\n\nexport enum FeatureFlagEnum {\n // If enabled, show the new header component that uses the HeaderSearchBox component\n PORTAL_SEARCH_HEADER = 'PORTAL_SEARCH_HEADER',\n\n // If enabled, allow viewing & editing the 'description' string field on entities\n DESCRIPTION_FIELD = 'DESCRIPTION_FIELD',\n\n // If enabled, use the re-implemented ACL Editor for entities\n REACT_ENTITY_ACL_EDITOR = 'REACT_ENTITY_ACL_EDITOR',\n\n // If enabled, show the chatbot entrypoint from the new Synapse Homepage\n HOMEPAGE_CHATBOT = 'HOMEPAGE_CHATBOT',\n\n // If enabled, account settings will link to a page to manage webhooks\n WEBHOOKS_UI = 'WEBHOOKS_UI',\n\n // If enabled, load the Crisp chat widget\n CRISP_CHAT = 'CRISP_CHAT',\n\n // If enabled, show the SynapseChat dialog in portals\n PORTAL_CHAT = 'PORTAL_CHAT',\n\n // If enabled, show the new version of the ADKP homepage\n ADKP_HOMEPAGE_V2 = 'ADKP_HOMEPAGE_V2',\n\n // If enabled, shows a \"New Task\" button on the metadata tasks page\n CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON = 'CURATION_TASK_PAGE_SHOW_NEW_TASK_BUTTON',\n}\n"],"mappings":";AAEA,IAAY,IAAL,yBAAA,GAAA;QAEL,EAAA,uBAAA,wBAGA,EAAA,oBAAA,qBAGA,EAAA,0BAAA,2BAGA,EAAA,mBAAA,oBAGA,EAAA,cAAA,eAGA,EAAA,aAAA,cAGA,EAAA,cAAA,eAGA,EAAA,mBAAA,oBAGA,EAAA,0CAAA;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccessControlListUtils.js","names":[],"sources":["../../../src/utils/functions/AccessControlListUtils.ts"],"sourcesContent":["import { cloneDeep, isEqual } from 'lodash-es'\nimport { ACCESS_TYPE, ResourceAccess } from '@sage-bionetworks/synapse-types'\nimport {\n AccessControlList,\n ResourceAccess as SynapseClientResourceAccess,\n} from '@sage-bionetworks/synapse-client'\n\nfunction sortResourceAccessList(\n resourceAccessList: ResourceAccess[],\n): ResourceAccess[] {\n const clone = cloneDeep(resourceAccessList)\n // Sort the resource access list by principal ID\n clone.sort((a, b) => b.principalId - a.principalId)\n // In each resource access, sort the access type set\n clone.forEach(ra => ra.accessType.sort())\n return clone\n}\n\n/**\n * Compares two objects for equality, ignoring the order of elements in arrays.\n * @param a\n * @param b\n */\nexport function resourceAccessListIsEqual(\n a: ResourceAccess[],\n b: ResourceAccess[],\n) {\n const aSorted = sortResourceAccessList(a)\n const bSorted = sortResourceAccessList(b)\n\n return isEqual(aSorted, bSorted)\n}\n\n/** Conversion utility to go from synapse-client ResourceAccess Set to the SRC SynapseClient ResourceAccess[] type */\nexport function convertResourceAccessSetToSRC(\n resourceAccessSet?: Set<SynapseClientResourceAccess>,\n): ResourceAccess[] {\n return Array.from(resourceAccessSet ?? []).map(item => ({\n principalId: item.principalId ?? -1,\n accessType: Array.isArray(item.accessType)\n ? (item.accessType as ACCESS_TYPE[])\n : (Array.from(item.accessType ?? []) as ACCESS_TYPE[]),\n }))\n}\n\n/** Conversion utility to go from synapse-react-client ResourceAccess[] to the synapse-client ResourceAccess Set in an ACL */\nexport function updateACLWithSRCResourceAccessList(\n acl: AccessControlList | null | undefined,\n resourceAccessList: ResourceAccess[],\n): AccessControlList {\n const newAcl = { ...acl }\n newAcl.resourceAccess = new Set(\n resourceAccessList.map(ra => ({\n principalId: ra.principalId,\n accessType: new Set(ra.accessType),\n })),\n )\n return newAcl\n}\n\n/**\n * Determines if an entity is publicly accessible by checking if any public principals\n * (authenticated users, public group, or anonymous user) have access in the resource access list.\n *\n * @param resourceAccess - The list of resource access entries to check\n * @param realmPrincipals - An object containing the principal IDs for public groups\n * @param realmPrincipals.authenticatedUsers - The principal ID for authenticated users\n * @param realmPrincipals.publicGroup - The principal ID for the public group\n * @param realmPrincipals.anonymousUser - The principal ID for anonymous users\n * @returns true if any public principal has access, false otherwise\n */\nexport function isEntityPublic(\n resourceAccess: ResourceAccess[],\n realmPrincipals: {\n authenticatedUsers?: string\n publicGroup?: string\n anonymousUser?: string\n },\n): boolean {\n const publicPrincipalIds = [\n realmPrincipals.authenticatedUsers,\n realmPrincipals.publicGroup,\n realmPrincipals.anonymousUser,\n ].filter((id): id is string => id !== undefined)\n\n return resourceAccess.some(ra =>\n publicPrincipalIds.includes(String(ra.principalId)),\n )\n}\n\n/**\n * Consolidate access types for duplicate entries for the same principal into a single entry with the union of all access types.\n */\nexport function consolidateResourceAccessList(\n list: ResourceAccess[],\n): ResourceAccess[] {\n const permissionsMap = new Map<number, Set<ACCESS_TYPE>>()\n for (const item of list) {\n const permissions = permissionsMap.get(item.principalId)\n\n if (permissions) {\n item.accessType.forEach(type => permissions.add(type))\n } else {\n permissionsMap.set(item.principalId, new Set(item.accessType))\n }\n }\n\n return Array.from(permissionsMap, ([principalId, accessTypeSet]) => ({\n principalId,\n accessType: Array.from(accessTypeSet),\n }))\n}\n"],"mappings":";;AAOA,SAAS,EACP,GACkB;CAClB,IAAM,IAAQ,EAAU,
|
|
1
|
+
{"version":3,"file":"AccessControlListUtils.js","names":[],"sources":["../../../src/utils/functions/AccessControlListUtils.ts"],"sourcesContent":["import { cloneDeep, isEqual } from 'lodash-es'\nimport { ACCESS_TYPE, ResourceAccess } from '@sage-bionetworks/synapse-types'\nimport {\n AccessControlList,\n ResourceAccess as SynapseClientResourceAccess,\n} from '@sage-bionetworks/synapse-client'\n\nfunction sortResourceAccessList(\n resourceAccessList: ResourceAccess[],\n): ResourceAccess[] {\n const clone = cloneDeep(resourceAccessList)\n // Sort the resource access list by principal ID\n clone.sort((a, b) => b.principalId - a.principalId)\n // In each resource access, sort the access type set\n clone.forEach(ra => ra.accessType.sort())\n return clone\n}\n\n/**\n * Compares two objects for equality, ignoring the order of elements in arrays.\n * @param a\n * @param b\n */\nexport function resourceAccessListIsEqual(\n a: ResourceAccess[],\n b: ResourceAccess[],\n) {\n const aSorted = sortResourceAccessList(a)\n const bSorted = sortResourceAccessList(b)\n\n return isEqual(aSorted, bSorted)\n}\n\n/** Conversion utility to go from synapse-client ResourceAccess Set to the SRC SynapseClient ResourceAccess[] type */\nexport function convertResourceAccessSetToSRC(\n resourceAccessSet?: Set<SynapseClientResourceAccess>,\n): ResourceAccess[] {\n return Array.from(resourceAccessSet ?? []).map(item => ({\n principalId: item.principalId ?? -1,\n accessType: Array.isArray(item.accessType)\n ? (item.accessType as ACCESS_TYPE[])\n : (Array.from(item.accessType ?? []) as ACCESS_TYPE[]),\n }))\n}\n\n/** Conversion utility to go from synapse-react-client ResourceAccess[] to the synapse-client ResourceAccess Set in an ACL */\nexport function updateACLWithSRCResourceAccessList(\n acl: AccessControlList | null | undefined,\n resourceAccessList: ResourceAccess[],\n): AccessControlList {\n const newAcl = { ...acl }\n newAcl.resourceAccess = new Set(\n resourceAccessList.map(ra => ({\n principalId: ra.principalId,\n accessType: new Set(ra.accessType),\n })),\n )\n return newAcl\n}\n\n/**\n * Determines if an entity is publicly accessible by checking if any public principals\n * (authenticated users, public group, or anonymous user) have access in the resource access list.\n *\n * @param resourceAccess - The list of resource access entries to check\n * @param realmPrincipals - An object containing the principal IDs for public groups\n * @param realmPrincipals.authenticatedUsers - The principal ID for authenticated users\n * @param realmPrincipals.publicGroup - The principal ID for the public group\n * @param realmPrincipals.anonymousUser - The principal ID for anonymous users\n * @returns true if any public principal has access, false otherwise\n */\nexport function isEntityPublic(\n resourceAccess: ResourceAccess[],\n realmPrincipals: {\n authenticatedUsers?: string\n publicGroup?: string\n anonymousUser?: string\n },\n): boolean {\n const publicPrincipalIds = [\n realmPrincipals.authenticatedUsers,\n realmPrincipals.publicGroup,\n realmPrincipals.anonymousUser,\n ].filter((id): id is string => id !== undefined)\n\n return resourceAccess.some(ra =>\n publicPrincipalIds.includes(String(ra.principalId)),\n )\n}\n\n/**\n * Consolidate access types for duplicate entries for the same principal into a single entry with the union of all access types.\n */\nexport function consolidateResourceAccessList(\n list: ResourceAccess[],\n): ResourceAccess[] {\n const permissionsMap = new Map<number, Set<ACCESS_TYPE>>()\n for (const item of list) {\n const permissions = permissionsMap.get(item.principalId)\n\n if (permissions) {\n item.accessType.forEach(type => permissions.add(type))\n } else {\n permissionsMap.set(item.principalId, new Set(item.accessType))\n }\n }\n\n return Array.from(permissionsMap, ([principalId, accessTypeSet]) => ({\n principalId,\n accessType: Array.from(accessTypeSet),\n }))\n}\n"],"mappings":";;AAOA,SAAS,EACP,GACkB;CAClB,IAAM,IAAQ,EAAU,CAAkB;CAK1C,OAHA,EAAM,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW,GAElD,EAAM,SAAQ,MAAM,EAAG,WAAW,KAAK,CAAC,GACjC;AACT;AAOA,SAAgB,EACd,GACA,GACA;CAIA,OAAO,EAHS,EAAuB,CAGxB,GAFC,EAAuB,CAEf,CAAO;AACjC;AAGA,SAAgB,EACd,GACkB;CAClB,OAAO,MAAM,KAAK,KAAqB,CAAC,CAAC,EAAE,KAAI,OAAS;EACtD,aAAa,EAAK,eAAe;EACjC,YAAY,MAAM,QAAQ,EAAK,UAAU,IACpC,EAAK,aACL,MAAM,KAAK,EAAK,cAAc,CAAC,CAAC;CACvC,EAAE;AACJ;AAGA,SAAgB,EACd,GACA,GACmB;CACnB,IAAM,IAAS,EAAE,GAAG,EAAI;CAOxB,OANA,EAAO,iBAAiB,IAAI,IAC1B,EAAmB,KAAI,OAAO;EAC5B,aAAa,EAAG;EAChB,YAAY,IAAI,IAAI,EAAG,UAAU;CACnC,EAAE,CACJ,GACO;AACT;AAaA,SAAgB,EACd,GACA,GAKS;CACT,IAAM,IAAqB;EACzB,EAAgB;EAChB,EAAgB;EAChB,EAAgB;CAClB,EAAE,QAAQ,MAAqB,MAAO,KAAA,CAAS;CAE/C,OAAO,EAAe,MAAK,MACzB,EAAmB,SAAS,OAAO,EAAG,WAAW,CAAC,CACpD;AACF;AAKA,SAAgB,EACd,GACkB;CAClB,IAAM,oBAAiB,IAAI,IAA8B;CACzD,KAAK,IAAM,KAAQ,GAAM;EACvB,IAAM,IAAc,EAAe,IAAI,EAAK,WAAW;EAEvD,AAAI,IACF,EAAK,WAAW,SAAQ,MAAQ,EAAY,IAAI,CAAI,CAAC,IAErD,EAAe,IAAI,EAAK,aAAa,IAAI,IAAI,EAAK,UAAU,CAAC;CAEjE;CAEA,OAAO,MAAM,KAAK,IAAiB,CAAC,GAAa,QAAoB;EACnE;EACA,YAAY,MAAM,KAAK,CAAa;CACtC,EAAE;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayUtils.js","names":[],"sources":["../../../src/utils/functions/ArrayUtils.ts"],"sourcesContent":["import isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\nimport xorWith from 'lodash-es/xorWith'\nimport { removeUndefined } from './ObjectUtils'\n\n/**\n * Removes trailing undefined elements from an array. Also removes trailing objects that are empty or only keys with\n * undefined values are present.\n */\nexport function removeTrailingUndefinedElements(params: unknown[]): unknown[] {\n const result = [...params]\n let lastElement = result[result.length - 1]\n while (\n result.length > 0 &&\n (lastElement === undefined ||\n // Also remove empty objects or objects where only keys with undefined values are present\n (typeof lastElement === 'object' &&\n isEmpty(removeUndefined(lastElement as Record<string, unknown>))))\n ) {\n result.pop()\n lastElement = result[result.length - 1]\n }\n return result\n}\n\n/**\n * Returns true if an item exists in one array that does not exist in another, using deep comparison by default.\n */\nexport function hasDifference(\n x: Array<unknown>,\n y: Array<unknown>,\n comparator = isEqual,\n): boolean {\n return xorWith(x, y, comparator).length > 0\n}\n"],"mappings":";;;;;AASA,SAAgB,EAAgC,GAA8B;CAC5E,IAAM,IAAS,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"ArrayUtils.js","names":[],"sources":["../../../src/utils/functions/ArrayUtils.ts"],"sourcesContent":["import isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\nimport xorWith from 'lodash-es/xorWith'\nimport { removeUndefined } from './ObjectUtils'\n\n/**\n * Removes trailing undefined elements from an array. Also removes trailing objects that are empty or only keys with\n * undefined values are present.\n */\nexport function removeTrailingUndefinedElements(params: unknown[]): unknown[] {\n const result = [...params]\n let lastElement = result[result.length - 1]\n while (\n result.length > 0 &&\n (lastElement === undefined ||\n // Also remove empty objects or objects where only keys with undefined values are present\n (typeof lastElement === 'object' &&\n isEmpty(removeUndefined(lastElement as Record<string, unknown>))))\n ) {\n result.pop()\n lastElement = result[result.length - 1]\n }\n return result\n}\n\n/**\n * Returns true if an item exists in one array that does not exist in another, using deep comparison by default.\n */\nexport function hasDifference(\n x: Array<unknown>,\n y: Array<unknown>,\n comparator = isEqual,\n): boolean {\n return xorWith(x, y, comparator).length > 0\n}\n"],"mappings":";;;;;AASA,SAAgB,EAAgC,GAA8B;CAC5E,IAAM,IAAS,CAAC,GAAG,CAAM,GACrB,IAAc,EAAO,EAAO,SAAS;CACzC,OACE,EAAO,SAAS,MACf,MAAgB,KAAA,KAEd,OAAO,KAAgB,YACtB,EAAQ,EAAgB,CAAsC,CAAC,KAGnE,AADA,EAAO,IAAI,GACX,IAAc,EAAO,EAAO,SAAS;CAEvC,OAAO;AACT;AAKA,SAAgB,EACd,GACA,GACA,IAAa,GACJ;CACT,OAAO,EAAQ,GAAG,GAAG,CAAU,EAAE,SAAS;AAC5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateFormatter.js","names":[],"sources":["../../../src/utils/functions/DateFormatter.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport dayjs, { Dayjs } from 'dayjs'\nimport advancedFormat from 'dayjs/plugin/advancedFormat'\nimport localizedFormat from 'dayjs/plugin/localizedFormat'\nimport timezone from 'dayjs/plugin/timezone'\nimport utc from 'dayjs/plugin/utc'\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(advancedFormat)\ndayjs.extend(localizedFormat)\n\nexport function formatDate(time: Dayjs, pattern?: string): string {\n if (!pattern) {\n // By default, only show timezone if using UTC time\n pattern = 'M/D/YYYY h:mm A'\n if (SynapseClient.getUseUtcTimeFromCookie()) {\n pattern += ' z'\n }\n }\n if (SynapseClient.getUseUtcTimeFromCookie()) {\n return dayjs(time).tz('utc').format(pattern)\n } else {\n return dayjs(time).tz(dayjs.tz.guess()).format(pattern)\n }\n}\n"],"mappings":";;;;;;AAOA,EAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"DateFormatter.js","names":[],"sources":["../../../src/utils/functions/DateFormatter.ts"],"sourcesContent":["import SynapseClient from '@/synapse-client'\nimport dayjs, { Dayjs } from 'dayjs'\nimport advancedFormat from 'dayjs/plugin/advancedFormat'\nimport localizedFormat from 'dayjs/plugin/localizedFormat'\nimport timezone from 'dayjs/plugin/timezone'\nimport utc from 'dayjs/plugin/utc'\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(advancedFormat)\ndayjs.extend(localizedFormat)\n\nexport function formatDate(time: Dayjs, pattern?: string): string {\n if (!pattern) {\n // By default, only show timezone if using UTC time\n pattern = 'M/D/YYYY h:mm A'\n if (SynapseClient.getUseUtcTimeFromCookie()) {\n pattern += ' z'\n }\n }\n if (SynapseClient.getUseUtcTimeFromCookie()) {\n return dayjs(time).tz('utc').format(pattern)\n } else {\n return dayjs(time).tz(dayjs.tz.guess()).format(pattern)\n }\n}\n"],"mappings":";;;;;;AAOA,EAAM,OAAO,CAAG,GAChB,EAAM,OAAO,CAAQ,GACrB,EAAM,OAAO,CAAc,GAC3B,EAAM,OAAO,CAAe;AAE5B,SAAgB,EAAW,GAAa,GAA0B;CAW9D,OAVG,MAEH,IAAU,mBACN,EAAc,wBAAwB,MACxC,KAAW,QAGX,EAAc,wBAAwB,IACjC,EAAM,CAAI,EAAE,GAAG,KAAK,EAAE,OAAO,CAAO,IAEpC,EAAM,CAAI,EAAE,GAAG,EAAM,GAAG,MAAM,CAAC,EAAE,OAAO,CAAO;AAE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeUtils.js","names":[],"sources":["../../../src/utils/functions/DateTimeUtils.ts"],"sourcesContent":["/**\n * Returns true iff the given string is a valid ISO timestamp.\n *\n * See https://stackoverflow.com/a/52869830\n * @param maybeISOTimestamp\n */\nexport function isISOTimestamp(maybeISOTimestamp: string): boolean {\n // Must match the ISO Timestamp format\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(maybeISOTimestamp))\n return false\n const d = new Date(maybeISOTimestamp)\n return (\n d instanceof Date &&\n // Verify that the date is valid\n !isNaN(d.getTime()) &&\n d.toISOString() === maybeISOTimestamp\n )\n}\n"],"mappings":";AAMA,SAAgB,EAAe,GAAoC;
|
|
1
|
+
{"version":3,"file":"DateTimeUtils.js","names":[],"sources":["../../../src/utils/functions/DateTimeUtils.ts"],"sourcesContent":["/**\n * Returns true iff the given string is a valid ISO timestamp.\n *\n * See https://stackoverflow.com/a/52869830\n * @param maybeISOTimestamp\n */\nexport function isISOTimestamp(maybeISOTimestamp: string): boolean {\n // Must match the ISO Timestamp format\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/.test(maybeISOTimestamp))\n return false\n const d = new Date(maybeISOTimestamp)\n return (\n d instanceof Date &&\n // Verify that the date is valid\n !isNaN(d.getTime()) &&\n d.toISOString() === maybeISOTimestamp\n )\n}\n"],"mappings":";AAMA,SAAgB,EAAe,GAAoC;CAEjE,IAAI,CAAC,6CAA6C,KAAK,CAAiB,GACtE,OAAO;CACT,IAAM,IAAI,IAAI,KAAK,CAAiB;CACpC,OACE,aAAa,QAEb,CAAC,MAAM,EAAE,QAAQ,CAAC,KAClB,EAAE,YAAY,MAAM;AAExB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityTypeUtils.js","names":[],"sources":["../../../src/utils/functions/EntityTypeUtils.ts"],"sourcesContent":["import { isTypeViaConcreteTypeFactory } from '@/utils/types/IsType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n Dataset,\n DATASET_COLLECTION_CONCRETE_TYPE_VALUE,\n DATASET_CONCRETE_TYPE_VALUE,\n DatasetCollection,\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n Entity,\n Entity as Entity_OpenAPI,\n ENTITY_CONCRETE_TYPE,\n ENTITY_VIEW_CONCRETE_TYPE_VALUE,\n ENTITY_VIEW_TYPE_MASK_FILE,\n EntityHeader,\n EntityView,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FOLDER_CONCRETE_TYPE_VALUE,\n Hit,\n LINK_CONCRETE_TYPE_VALUE,\n MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE,\n MaterializedView,\n PROJECT_CONCRETE_TYPE_VALUE,\n ProjectHeader,\n SUBMISSION_VIEW_CONCRETE_TYPE_VALUE,\n SubmissionView,\n Table,\n TABLE_CONCRETE_TYPE_VALUES,\n TABLE_ENTITY_CONCRETE_TYPE_VALUE,\n TableEntity,\n VersionableEntity,\n View,\n VIEW_CONCRETE_TYPE_VALUES,\n VIRTUAL_TABLE_CONCRETE_TYPE_VALUE,\n} from '@sage-bionetworks/synapse-types'\n\nexport function getEntityTypeFromHeader(\n header:\n | Pick<EntityHeader, 'name' | 'id' | 'type'>\n | EntityHeader\n | ProjectHeader\n | Hit,\n): EntityType {\n // Hit has the `node_type` field which is what we already want.\n if ((header as Hit).node_type) {\n return (header as Hit).node_type\n }\n // ProjectHeader doesn't have the `type` field, so we can just check that to determine if it's a ProjectHeader\n return (header as EntityHeader).type === undefined\n ? EntityType.project\n : convertToEntityType((header as EntityHeader).type)\n}\n\nexport function isContainerType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n return true\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.table:\n case EntityType.submissionview:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n case EntityType.searchindex:\n return false\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport function isTableType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.searchindex:\n return false\n case EntityType.table:\n case EntityType.submissionview:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n return true\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport function entityTypeToFriendlyName(entityType: EntityType): string {\n switch (entityType) {\n case EntityType.project:\n return 'Project'\n case EntityType.folder:\n return 'Folder'\n case EntityType.file:\n return 'File'\n case EntityType.table:\n return 'Table'\n case EntityType.link:\n return 'Link'\n case EntityType.entityview:\n return 'View'\n case EntityType.dockerrepo:\n return 'Docker Repository'\n case EntityType.submissionview:\n return 'Submission View'\n case EntityType.dataset:\n return 'Dataset'\n case EntityType.datasetcollection:\n return 'Dataset Collection'\n case EntityType.materializedview:\n return 'Materialized View'\n case EntityType.virtualtable:\n return 'Virtual Table'\n case EntityType.recordset:\n return 'Record Set'\n case EntityType.searchindex:\n return 'Search Index'\n default:\n console.warn('Entity type could not be mapped to name:', entityType)\n return ''\n }\n}\n\nexport function convertToEntityType(\n typeString: string | ENTITY_CONCRETE_TYPE | EntityType,\n): EntityType {\n if (Object.values(EntityType).includes(typeString as EntityType)) {\n return typeString as EntityType\n }\n switch (typeString) {\n case 'org.sagebionetworks.repo.model.Project':\n return EntityType.project\n case 'org.sagebionetworks.repo.model.Folder':\n return EntityType.folder\n case FILE_ENTITY_CONCRETE_TYPE_VALUE:\n return EntityType.file\n case 'org.sagebionetworks.repo.model.Link':\n return EntityType.link\n case 'org.sagebionetworks.repo.model.docker.DockerRepository':\n return EntityType.dockerrepo\n case TABLE_ENTITY_CONCRETE_TYPE_VALUE:\n return EntityType.table\n case 'org.sagebionetworks.repo.model.table.SubmissionView':\n return EntityType.submissionview\n case ENTITY_VIEW_CONCRETE_TYPE_VALUE:\n return EntityType.entityview\n case DATASET_CONCRETE_TYPE_VALUE:\n return EntityType.dataset\n case DATASET_COLLECTION_CONCRETE_TYPE_VALUE:\n return EntityType.datasetcollection\n case MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE:\n return EntityType.materializedview\n case VIRTUAL_TABLE_CONCRETE_TYPE_VALUE:\n return EntityType.virtualtable\n case 'org.sagebionetworks.repo.model.RecordSet':\n return EntityType.recordset\n case 'org.sagebionetworks.repo.model.search.table.SearchIndex':\n return EntityType.searchindex\n default:\n throw new Error(`Unknown entity type: ${typeString}`)\n }\n}\n\nexport function convertToConcreteEntityType(\n type: EntityType,\n): Entity_OpenAPI['concreteType'] {\n switch (type) {\n case EntityType.project:\n return 'org.sagebionetworks.repo.model.Project'\n case EntityType.folder:\n return 'org.sagebionetworks.repo.model.Folder'\n case EntityType.file:\n return 'org.sagebionetworks.repo.model.FileEntity'\n case EntityType.link:\n return 'org.sagebionetworks.repo.model.Link'\n case EntityType.dockerrepo:\n return 'org.sagebionetworks.repo.model.docker.DockerRepository'\n case EntityType.table:\n return 'org.sagebionetworks.repo.model.table.TableEntity'\n case EntityType.submissionview:\n return 'org.sagebionetworks.repo.model.table.SubmissionView'\n case EntityType.entityview:\n return 'org.sagebionetworks.repo.model.table.EntityView'\n case EntityType.dataset:\n return 'org.sagebionetworks.repo.model.table.Dataset'\n case EntityType.datasetcollection:\n return 'org.sagebionetworks.repo.model.table.DatasetCollection'\n case EntityType.materializedview:\n return 'org.sagebionetworks.repo.model.table.MaterializedView'\n case EntityType.virtualtable:\n return 'org.sagebionetworks.repo.model.table.VirtualTable'\n case EntityType.recordset:\n return 'org.sagebionetworks.repo.model.RecordSet'\n case EntityType.searchindex:\n return 'org.sagebionetworks.repo.model.search.table.SearchIndex'\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\n/**\n * https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/VersionableEntity.html\n * @param type\n * @returns\n */\nexport function isVersionableEntityType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.submissionview: // SubmissionView implements VersionableEntity, but versions aren't supported\n case EntityType.materializedview: // MaterializedView implements VersionableEntity, but versions aren't supported.\n case EntityType.virtualtable: // VirtualTable implements VersionableEntity, but versions aren't supported.\n case EntityType.searchindex:\n return false\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.table:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n return true\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport const isTable = isTypeViaConcreteTypeFactory<Table, Entity>(\n ...TABLE_CONCRETE_TYPE_VALUES,\n)\n\nexport const isView = isTypeViaConcreteTypeFactory<View, Entity>(\n ...VIEW_CONCRETE_TYPE_VALUES,\n)\n\nexport const isTableEntity = isTypeViaConcreteTypeFactory<TableEntity, Entity>(\n TABLE_ENTITY_CONCRETE_TYPE_VALUE,\n)\n\nexport const isSubmissionView = isTypeViaConcreteTypeFactory<\n SubmissionView,\n Entity\n>(SUBMISSION_VIEW_CONCRETE_TYPE_VALUE)\n\nexport const isMaterializedView = isTypeViaConcreteTypeFactory<\n MaterializedView,\n Entity\n>(MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE)\n\nexport const isDataset = isTypeViaConcreteTypeFactory<Dataset, Entity>(\n DATASET_CONCRETE_TYPE_VALUE,\n)\nexport const isDatasetCollection = isTypeViaConcreteTypeFactory<\n DatasetCollection,\n Entity\n>(DATASET_COLLECTION_CONCRETE_TYPE_VALUE)\n\nexport const isEntityRefCollectionView = (\n entity: Entity,\n): entity is Dataset | DatasetCollection =>\n isDataset(entity) || isDatasetCollection(entity)\n\nexport const isEntityView = isTypeViaConcreteTypeFactory<EntityView, Entity>(\n ENTITY_VIEW_CONCRETE_TYPE_VALUE,\n)\n\n/**\n * @param entityView\n * @returns true iff the viewTypeMask allows files to appear in the view\n */\nexport function hasFilesInView(entityView: EntityView) {\n return (entityView.viewTypeMask & ENTITY_VIEW_TYPE_MASK_FILE) != 0\n}\n\n/**\n * @param entityView\n * @returns true iff the viewTypeMask allows only files to appear in the view\n */\nexport function isFileView(entityView: EntityView) {\n return entityView.viewTypeMask === ENTITY_VIEW_TYPE_MASK_FILE\n}\n\nexport function isVersionableEntity(\n entity: Entity,\n): entity is VersionableEntity {\n return isVersionableEntityType(convertToEntityType(entity.concreteType))\n}\n\nexport function getVersionDisplay(entity: Entity): string {\n if (!isVersionableEntity(entity)) {\n console.warn(\"Entity isn't versionable:\", entity)\n return ''\n }\n\n if (entity.isLatestVersion) {\n if (!isTable(entity)) {\n // e.g. Files. Always show the version number\n return `${entity.versionNumber!.toString()} (Current)`\n } else if (isDataset(entity)) {\n return 'Draft'\n } else {\n return 'Current'\n }\n } else {\n return entity.versionNumber!.toString()\n }\n}\n\n/**\n * Given an entityId, returns the entity ID with the `syn` prefix.\n * If the entity already has the `syn` prefix, the entityId will not be changed\n * @param entityId\n */\nexport function normalizeSynPrefix(entityId: string) {\n if (entityId.toLowerCase().startsWith('syn')) {\n return entityId.toLowerCase()\n }\n return `syn${entityId}`\n}\n\n// implemented by https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/Entity.html\nconst allEntityKeys: string[] = [\n 'name',\n 'description',\n 'id',\n 'etag',\n 'createdOn',\n 'modifiedOn',\n 'createdBy',\n 'modifiedBy',\n 'parentId',\n 'concreteType',\n]\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/VersionableEntity.html\nconst versionableKeys: string[] = [\n ...allEntityKeys,\n 'versionNumber',\n 'versionLabel',\n 'versionComment',\n 'isLatestVersion',\n]\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Table.html\nconst tableKeys: string[] = [...versionableKeys, 'columnIds', 'isSearchEnabled']\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/View.html\nconst viewKeys: string[] = [...tableKeys]\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/EntityRefCollectionView.html\nconst entityRefCollectionViewKeys: string[] = [...viewKeys, 'items']\n\n/**\n * A string array of all possible keys used by Synapse in Entity objects (objects that inherit this interface: https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/Entity.html).\n * This object is used to determine which fields are standard and which are annotations,\n * so it's important that this object contains all keys in the objects that implement the linked interface above.\n */\nexport const entityJsonKeys: Record<ENTITY_CONCRETE_TYPE, string[]> = {\n [LINK_CONCRETE_TYPE_VALUE]: [...allEntityKeys, 'linksTo', 'linksToClassName'],\n [DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE]: [\n ...allEntityKeys,\n 'repositoryName',\n 'isManaged',\n ],\n [FILE_ENTITY_CONCRETE_TYPE_VALUE]: [\n ...versionableKeys,\n 'dataFileHandleId',\n 'fileNameOverride',\n ],\n [SUBMISSION_VIEW_CONCRETE_TYPE_VALUE]: [...viewKeys, 'scopeIds'],\n [DATASET_CONCRETE_TYPE_VALUE]: [\n ...entityRefCollectionViewKeys,\n 'size',\n 'checksum',\n 'count',\n ],\n [DATASET_COLLECTION_CONCRETE_TYPE_VALUE]: [...entityRefCollectionViewKeys],\n [ENTITY_VIEW_CONCRETE_TYPE_VALUE]: [\n ...viewKeys,\n 'scopeIds',\n 'viewTypeMask',\n 'type',\n ],\n [TABLE_ENTITY_CONCRETE_TYPE_VALUE]: tableKeys,\n [MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE]: [...tableKeys, 'definingSQL'],\n [VIRTUAL_TABLE_CONCRETE_TYPE_VALUE]: [...tableKeys, 'definingSQL'],\n [FOLDER_CONCRETE_TYPE_VALUE]: allEntityKeys,\n [PROJECT_CONCRETE_TYPE_VALUE]: [...allEntityKeys, 'alias'],\n ['org.sagebionetworks.repo.model.RecordSet']: [\n ...versionableKeys,\n 'upsertKey',\n 'csvDescriptor',\n ],\n 'org.sagebionetworks.repo.model.Preview': [\n /* unused */\n ],\n 'org.sagebionetworks.repo.model.ExampleEntity': [\n /* unused */\n ],\n 'org.sagebionetworks.repo.model.search.table.SearchIndex': [\n ...allEntityKeys,\n 'definingSQL',\n 'searchConfigurationId',\n ],\n}\n\ntype EntityTypeGroupKey = 'ALL_TABLES' | 'CONTAINER'\n\nexport const EntityTypeGroup: Record<EntityTypeGroupKey, EntityType[]> = {\n ['ALL_TABLES']: [\n EntityType.table,\n EntityType.entityview,\n EntityType.submissionview,\n EntityType.dataset,\n EntityType.datasetcollection,\n EntityType.materializedview,\n EntityType.virtualtable,\n ],\n ['CONTAINER']: [EntityType.project, EntityType.folder],\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityTypeUtils.js","names":[],"sources":["../../../src/utils/functions/EntityTypeUtils.ts"],"sourcesContent":["import { isTypeViaConcreteTypeFactory } from '@/utils/types/IsType'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport {\n Dataset,\n DATASET_COLLECTION_CONCRETE_TYPE_VALUE,\n DATASET_CONCRETE_TYPE_VALUE,\n DatasetCollection,\n DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE,\n Entity,\n Entity as Entity_OpenAPI,\n ENTITY_CONCRETE_TYPE,\n ENTITY_VIEW_CONCRETE_TYPE_VALUE,\n ENTITY_VIEW_TYPE_MASK_FILE,\n EntityHeader,\n EntityView,\n FILE_ENTITY_CONCRETE_TYPE_VALUE,\n FOLDER_CONCRETE_TYPE_VALUE,\n Hit,\n LINK_CONCRETE_TYPE_VALUE,\n MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE,\n MaterializedView,\n PROJECT_CONCRETE_TYPE_VALUE,\n ProjectHeader,\n SUBMISSION_VIEW_CONCRETE_TYPE_VALUE,\n SubmissionView,\n Table,\n TABLE_CONCRETE_TYPE_VALUES,\n TABLE_ENTITY_CONCRETE_TYPE_VALUE,\n TableEntity,\n VersionableEntity,\n View,\n VIEW_CONCRETE_TYPE_VALUES,\n VIRTUAL_TABLE_CONCRETE_TYPE_VALUE,\n} from '@sage-bionetworks/synapse-types'\n\nexport function getEntityTypeFromHeader(\n header:\n | Pick<EntityHeader, 'name' | 'id' | 'type'>\n | EntityHeader\n | ProjectHeader\n | Hit,\n): EntityType {\n // Hit has the `node_type` field which is what we already want.\n if ((header as Hit).node_type) {\n return (header as Hit).node_type\n }\n // ProjectHeader doesn't have the `type` field, so we can just check that to determine if it's a ProjectHeader\n return (header as EntityHeader).type === undefined\n ? EntityType.project\n : convertToEntityType((header as EntityHeader).type)\n}\n\nexport function isContainerType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n return true\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.table:\n case EntityType.submissionview:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n case EntityType.searchindex:\n return false\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport function isTableType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.searchindex:\n return false\n case EntityType.table:\n case EntityType.submissionview:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n case EntityType.materializedview:\n case EntityType.virtualtable:\n return true\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport function entityTypeToFriendlyName(entityType: EntityType): string {\n switch (entityType) {\n case EntityType.project:\n return 'Project'\n case EntityType.folder:\n return 'Folder'\n case EntityType.file:\n return 'File'\n case EntityType.table:\n return 'Table'\n case EntityType.link:\n return 'Link'\n case EntityType.entityview:\n return 'View'\n case EntityType.dockerrepo:\n return 'Docker Repository'\n case EntityType.submissionview:\n return 'Submission View'\n case EntityType.dataset:\n return 'Dataset'\n case EntityType.datasetcollection:\n return 'Dataset Collection'\n case EntityType.materializedview:\n return 'Materialized View'\n case EntityType.virtualtable:\n return 'Virtual Table'\n case EntityType.recordset:\n return 'Record Set'\n case EntityType.searchindex:\n return 'Search Index'\n default:\n console.warn('Entity type could not be mapped to name:', entityType)\n return ''\n }\n}\n\nexport function convertToEntityType(\n typeString: string | ENTITY_CONCRETE_TYPE | EntityType,\n): EntityType {\n if (Object.values(EntityType).includes(typeString as EntityType)) {\n return typeString as EntityType\n }\n switch (typeString) {\n case 'org.sagebionetworks.repo.model.Project':\n return EntityType.project\n case 'org.sagebionetworks.repo.model.Folder':\n return EntityType.folder\n case FILE_ENTITY_CONCRETE_TYPE_VALUE:\n return EntityType.file\n case 'org.sagebionetworks.repo.model.Link':\n return EntityType.link\n case 'org.sagebionetworks.repo.model.docker.DockerRepository':\n return EntityType.dockerrepo\n case TABLE_ENTITY_CONCRETE_TYPE_VALUE:\n return EntityType.table\n case 'org.sagebionetworks.repo.model.table.SubmissionView':\n return EntityType.submissionview\n case ENTITY_VIEW_CONCRETE_TYPE_VALUE:\n return EntityType.entityview\n case DATASET_CONCRETE_TYPE_VALUE:\n return EntityType.dataset\n case DATASET_COLLECTION_CONCRETE_TYPE_VALUE:\n return EntityType.datasetcollection\n case MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE:\n return EntityType.materializedview\n case VIRTUAL_TABLE_CONCRETE_TYPE_VALUE:\n return EntityType.virtualtable\n case 'org.sagebionetworks.repo.model.RecordSet':\n return EntityType.recordset\n case 'org.sagebionetworks.repo.model.search.table.SearchIndex':\n return EntityType.searchindex\n default:\n throw new Error(`Unknown entity type: ${typeString}`)\n }\n}\n\nexport function convertToConcreteEntityType(\n type: EntityType,\n): Entity_OpenAPI['concreteType'] {\n switch (type) {\n case EntityType.project:\n return 'org.sagebionetworks.repo.model.Project'\n case EntityType.folder:\n return 'org.sagebionetworks.repo.model.Folder'\n case EntityType.file:\n return 'org.sagebionetworks.repo.model.FileEntity'\n case EntityType.link:\n return 'org.sagebionetworks.repo.model.Link'\n case EntityType.dockerrepo:\n return 'org.sagebionetworks.repo.model.docker.DockerRepository'\n case EntityType.table:\n return 'org.sagebionetworks.repo.model.table.TableEntity'\n case EntityType.submissionview:\n return 'org.sagebionetworks.repo.model.table.SubmissionView'\n case EntityType.entityview:\n return 'org.sagebionetworks.repo.model.table.EntityView'\n case EntityType.dataset:\n return 'org.sagebionetworks.repo.model.table.Dataset'\n case EntityType.datasetcollection:\n return 'org.sagebionetworks.repo.model.table.DatasetCollection'\n case EntityType.materializedview:\n return 'org.sagebionetworks.repo.model.table.MaterializedView'\n case EntityType.virtualtable:\n return 'org.sagebionetworks.repo.model.table.VirtualTable'\n case EntityType.recordset:\n return 'org.sagebionetworks.repo.model.RecordSet'\n case EntityType.searchindex:\n return 'org.sagebionetworks.repo.model.search.table.SearchIndex'\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\n/**\n * https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/VersionableEntity.html\n * @param type\n * @returns\n */\nexport function isVersionableEntityType(type: EntityType): boolean {\n switch (type) {\n case EntityType.project:\n case EntityType.folder:\n case EntityType.link:\n case EntityType.dockerrepo:\n case EntityType.submissionview: // SubmissionView implements VersionableEntity, but versions aren't supported\n case EntityType.materializedview: // MaterializedView implements VersionableEntity, but versions aren't supported.\n case EntityType.virtualtable: // VirtualTable implements VersionableEntity, but versions aren't supported.\n case EntityType.searchindex:\n return false\n case EntityType.file:\n case EntityType.recordset:\n case EntityType.table:\n case EntityType.entityview:\n case EntityType.dataset:\n case EntityType.datasetcollection:\n return true\n default:\n throw new Error(`Unknown entity type: ${type}`)\n }\n}\n\nexport const isTable = isTypeViaConcreteTypeFactory<Table, Entity>(\n ...TABLE_CONCRETE_TYPE_VALUES,\n)\n\nexport const isView = isTypeViaConcreteTypeFactory<View, Entity>(\n ...VIEW_CONCRETE_TYPE_VALUES,\n)\n\nexport const isTableEntity = isTypeViaConcreteTypeFactory<TableEntity, Entity>(\n TABLE_ENTITY_CONCRETE_TYPE_VALUE,\n)\n\nexport const isSubmissionView = isTypeViaConcreteTypeFactory<\n SubmissionView,\n Entity\n>(SUBMISSION_VIEW_CONCRETE_TYPE_VALUE)\n\nexport const isMaterializedView = isTypeViaConcreteTypeFactory<\n MaterializedView,\n Entity\n>(MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE)\n\nexport const isDataset = isTypeViaConcreteTypeFactory<Dataset, Entity>(\n DATASET_CONCRETE_TYPE_VALUE,\n)\nexport const isDatasetCollection = isTypeViaConcreteTypeFactory<\n DatasetCollection,\n Entity\n>(DATASET_COLLECTION_CONCRETE_TYPE_VALUE)\n\nexport const isEntityRefCollectionView = (\n entity: Entity,\n): entity is Dataset | DatasetCollection =>\n isDataset(entity) || isDatasetCollection(entity)\n\nexport const isEntityView = isTypeViaConcreteTypeFactory<EntityView, Entity>(\n ENTITY_VIEW_CONCRETE_TYPE_VALUE,\n)\n\n/**\n * @param entityView\n * @returns true iff the viewTypeMask allows files to appear in the view\n */\nexport function hasFilesInView(entityView: EntityView) {\n return (entityView.viewTypeMask & ENTITY_VIEW_TYPE_MASK_FILE) != 0\n}\n\n/**\n * @param entityView\n * @returns true iff the viewTypeMask allows only files to appear in the view\n */\nexport function isFileView(entityView: EntityView) {\n return entityView.viewTypeMask === ENTITY_VIEW_TYPE_MASK_FILE\n}\n\nexport function isVersionableEntity(\n entity: Entity,\n): entity is VersionableEntity {\n return isVersionableEntityType(convertToEntityType(entity.concreteType))\n}\n\nexport function getVersionDisplay(entity: Entity): string {\n if (!isVersionableEntity(entity)) {\n console.warn(\"Entity isn't versionable:\", entity)\n return ''\n }\n\n if (entity.isLatestVersion) {\n if (!isTable(entity)) {\n // e.g. Files. Always show the version number\n return `${entity.versionNumber!.toString()} (Current)`\n } else if (isDataset(entity)) {\n return 'Draft'\n } else {\n return 'Current'\n }\n } else {\n return entity.versionNumber!.toString()\n }\n}\n\n/**\n * Given an entityId, returns the entity ID with the `syn` prefix.\n * If the entity already has the `syn` prefix, the entityId will not be changed\n * @param entityId\n */\nexport function normalizeSynPrefix(entityId: string) {\n if (entityId.toLowerCase().startsWith('syn')) {\n return entityId.toLowerCase()\n }\n return `syn${entityId}`\n}\n\n// implemented by https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/Entity.html\nconst allEntityKeys: string[] = [\n 'name',\n 'description',\n 'id',\n 'etag',\n 'createdOn',\n 'modifiedOn',\n 'createdBy',\n 'modifiedBy',\n 'parentId',\n 'concreteType',\n]\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/VersionableEntity.html\nconst versionableKeys: string[] = [\n ...allEntityKeys,\n 'versionNumber',\n 'versionLabel',\n 'versionComment',\n 'isLatestVersion',\n]\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Table.html\nconst tableKeys: string[] = [...versionableKeys, 'columnIds', 'isSearchEnabled']\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/View.html\nconst viewKeys: string[] = [...tableKeys]\n\n// https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/EntityRefCollectionView.html\nconst entityRefCollectionViewKeys: string[] = [...viewKeys, 'items']\n\n/**\n * A string array of all possible keys used by Synapse in Entity objects (objects that inherit this interface: https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/Entity.html).\n * This object is used to determine which fields are standard and which are annotations,\n * so it's important that this object contains all keys in the objects that implement the linked interface above.\n */\nexport const entityJsonKeys: Record<ENTITY_CONCRETE_TYPE, string[]> = {\n [LINK_CONCRETE_TYPE_VALUE]: [...allEntityKeys, 'linksTo', 'linksToClassName'],\n [DOCKER_REPOSITORY_CONCRETE_TYPE_VALUE]: [\n ...allEntityKeys,\n 'repositoryName',\n 'isManaged',\n ],\n [FILE_ENTITY_CONCRETE_TYPE_VALUE]: [\n ...versionableKeys,\n 'dataFileHandleId',\n 'fileNameOverride',\n ],\n [SUBMISSION_VIEW_CONCRETE_TYPE_VALUE]: [...viewKeys, 'scopeIds'],\n [DATASET_CONCRETE_TYPE_VALUE]: [\n ...entityRefCollectionViewKeys,\n 'size',\n 'checksum',\n 'count',\n ],\n [DATASET_COLLECTION_CONCRETE_TYPE_VALUE]: [...entityRefCollectionViewKeys],\n [ENTITY_VIEW_CONCRETE_TYPE_VALUE]: [\n ...viewKeys,\n 'scopeIds',\n 'viewTypeMask',\n 'type',\n ],\n [TABLE_ENTITY_CONCRETE_TYPE_VALUE]: tableKeys,\n [MATERIALIZED_VIEW_CONCRETE_TYPE_VALUE]: [...tableKeys, 'definingSQL'],\n [VIRTUAL_TABLE_CONCRETE_TYPE_VALUE]: [...tableKeys, 'definingSQL'],\n [FOLDER_CONCRETE_TYPE_VALUE]: allEntityKeys,\n [PROJECT_CONCRETE_TYPE_VALUE]: [...allEntityKeys, 'alias'],\n ['org.sagebionetworks.repo.model.RecordSet']: [\n ...versionableKeys,\n 'upsertKey',\n 'csvDescriptor',\n ],\n 'org.sagebionetworks.repo.model.Preview': [\n /* unused */\n ],\n 'org.sagebionetworks.repo.model.ExampleEntity': [\n /* unused */\n ],\n 'org.sagebionetworks.repo.model.search.table.SearchIndex': [\n ...allEntityKeys,\n 'definingSQL',\n 'searchConfigurationId',\n ],\n}\n\ntype EntityTypeGroupKey = 'ALL_TABLES' | 'CONTAINER'\n\nexport const EntityTypeGroup: Record<EntityTypeGroupKey, EntityType[]> = {\n ['ALL_TABLES']: [\n EntityType.table,\n EntityType.entityview,\n EntityType.submissionview,\n EntityType.dataset,\n EntityType.datasetcollection,\n EntityType.materializedview,\n EntityType.virtualtable,\n ],\n ['CONTAINER']: [EntityType.project, EntityType.folder],\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHandleUtils.js","names":[],"sources":["../../../src/utils/functions/FileHandleUtils.ts"],"sourcesContent":["import { EntityType, UploadDestination } from '@sage-bionetworks/synapse-client'\nimport {\n CloudProviderFileHandleInterface,\n EntityBundle,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ExternalFileHandle,\n ExternalGoogleCloudUploadDestination,\n ExternalObjectStoreFileHandle,\n ExternalObjectStoreUploadDestination,\n ExternalS3UploadDestination,\n ExternalUploadDestination,\n FileEntity,\n FileHandle,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ProxyFileHandle,\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n UploadType,\n} from '@sage-bionetworks/synapse-types'\n\nconst SYNAPSE_STORAGE = 'Synapse Storage'\n\ntype FileHandleStorageInfo =\n | {\n endpoint: string\n bucket: string\n fileKey: string\n }\n | { url: string }\n | { location: string }\n\n/**\n * Returns storage location information for a particular file handle, where the format of the information depends on the type of file handle.\n * @param fileHandle\n */\nexport function getFileHandleStorageInfo(\n fileHandle: FileHandle,\n storageLocationUploadDestination: UploadDestination | undefined,\n): FileHandleStorageInfo {\n switch (fileHandle.concreteType) {\n case EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n endpoint: (fileHandle as ExternalObjectStoreFileHandle).endpointUrl,\n bucket: (fileHandle as ExternalObjectStoreFileHandle).bucket,\n fileKey: (fileHandle as ExternalObjectStoreFileHandle).fileKey,\n }\n case PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n url: getStorageLocationName(\n fileHandle,\n storageLocationUploadDestination,\n ),\n }\n case S3_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n location: getStorageLocationName(\n fileHandle,\n storageLocationUploadDestination,\n ),\n }\n default:\n throw new Error(\n `Couldn't determine location name for file handle: ${JSON.stringify(\n fileHandle,\n )}`,\n )\n }\n}\n\n/**\n * Gets the friendly name of a bucket/storage location using the file handle.\n *\n * @param fileHandle\n * @returns\n */\nexport function getStorageLocationName(\n fileHandle: FileHandle,\n storageLocationUploadDestination: UploadDestination | undefined,\n) {\n switch (fileHandle.concreteType) {\n case PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return (fileHandle as ProxyFileHandle).filePath\n case EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case S3_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n if (storageLocationUploadDestination) {\n return getUploadDestinationString(storageLocationUploadDestination)\n }\n return fileHandle.concreteType ===\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE\n ? (fileHandle as ExternalObjectStoreFileHandle).bucket\n : (fileHandle as CloudProviderFileHandleInterface).bucketName\n case EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return (fileHandle as ExternalFileHandle).externalURL\n default:\n throw new Error(\n `Couldn't determine location name for file handle: ${JSON.stringify(\n fileHandle,\n )}`,\n )\n }\n}\n\n/**\n * Gets the data file handle from an entity bundle.\n * Returns undefined if the entity does not have a data file handle that is visible to the caller.\n * @param entityBundle\n */\nexport function getDataFileHandle(\n entityBundle: EntityBundle,\n): FileHandle | undefined {\n let dataFileHandle: FileHandle | undefined = undefined\n if (entityBundle.entityType === EntityType.file) {\n dataFileHandle = entityBundle.fileHandles.filter(\n fh => fh.id === (entityBundle.entity as FileEntity).dataFileHandleId,\n )[0]\n }\n return dataFileHandle\n}\n\nexport function getUploadDestinationString(\n uploadDestination: UploadDestination,\n) {\n let uploadDestinationString = ''\n if (uploadDestination) {\n switch (uploadDestination.concreteType) {\n case 'org.sagebionetworks.repo.model.file.S3UploadDestination':\n uploadDestinationString = SYNAPSE_STORAGE\n break\n case 'org.sagebionetworks.repo.model.file.ExternalUploadDestination':\n uploadDestinationString = (\n uploadDestination as ExternalUploadDestination\n ).url\n if (uploadDestination.uploadType === UploadType.SFTP) {\n const indexOfLastSlash = uploadDestinationString.lastIndexOf('/')\n if (indexOfLastSlash) {\n uploadDestinationString = uploadDestinationString.substring(\n 0,\n indexOfLastSlash,\n )\n }\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalS3UploadDestination':\n uploadDestinationString =\n 's3://' +\n (uploadDestination as ExternalS3UploadDestination).bucket +\n '/'\n if (\n (uploadDestination as ExternalS3UploadDestination).baseKey != null\n ) {\n uploadDestinationString += (\n uploadDestination as ExternalS3UploadDestination\n ).baseKey\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalGoogleCloudUploadDestination':\n uploadDestinationString =\n 'gs://' +\n (uploadDestination as ExternalGoogleCloudUploadDestination).bucket +\n '/'\n if (\n (uploadDestination as ExternalGoogleCloudUploadDestination).baseKey !=\n null\n ) {\n uploadDestinationString += (\n uploadDestination as ExternalGoogleCloudUploadDestination\n ).baseKey\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalObjectStoreUploadDestination':\n uploadDestinationString =\n (uploadDestination as ExternalObjectStoreUploadDestination)\n .endpointUrl +\n '/' +\n (uploadDestination as ExternalObjectStoreUploadDestination).bucket\n break\n }\n }\n return uploadDestinationString\n}\n"],"mappings":";;;AAqBA,IAAM,IAAkB;AAexB,SAAgB,EACd,GACA,GACuB;
|
|
1
|
+
{"version":3,"file":"FileHandleUtils.js","names":[],"sources":["../../../src/utils/functions/FileHandleUtils.ts"],"sourcesContent":["import { EntityType, UploadDestination } from '@sage-bionetworks/synapse-client'\nimport {\n CloudProviderFileHandleInterface,\n EntityBundle,\n EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ExternalFileHandle,\n ExternalGoogleCloudUploadDestination,\n ExternalObjectStoreFileHandle,\n ExternalObjectStoreUploadDestination,\n ExternalS3UploadDestination,\n ExternalUploadDestination,\n FileEntity,\n FileHandle,\n GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n ProxyFileHandle,\n S3_FILE_HANDLE_CONCRETE_TYPE_VALUE,\n UploadType,\n} from '@sage-bionetworks/synapse-types'\n\nconst SYNAPSE_STORAGE = 'Synapse Storage'\n\ntype FileHandleStorageInfo =\n | {\n endpoint: string\n bucket: string\n fileKey: string\n }\n | { url: string }\n | { location: string }\n\n/**\n * Returns storage location information for a particular file handle, where the format of the information depends on the type of file handle.\n * @param fileHandle\n */\nexport function getFileHandleStorageInfo(\n fileHandle: FileHandle,\n storageLocationUploadDestination: UploadDestination | undefined,\n): FileHandleStorageInfo {\n switch (fileHandle.concreteType) {\n case EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n endpoint: (fileHandle as ExternalObjectStoreFileHandle).endpointUrl,\n bucket: (fileHandle as ExternalObjectStoreFileHandle).bucket,\n fileKey: (fileHandle as ExternalObjectStoreFileHandle).fileKey,\n }\n case PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n url: getStorageLocationName(\n fileHandle,\n storageLocationUploadDestination,\n ),\n }\n case S3_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return {\n location: getStorageLocationName(\n fileHandle,\n storageLocationUploadDestination,\n ),\n }\n default:\n throw new Error(\n `Couldn't determine location name for file handle: ${JSON.stringify(\n fileHandle,\n )}`,\n )\n }\n}\n\n/**\n * Gets the friendly name of a bucket/storage location using the file handle.\n *\n * @param fileHandle\n * @returns\n */\nexport function getStorageLocationName(\n fileHandle: FileHandle,\n storageLocationUploadDestination: UploadDestination | undefined,\n) {\n switch (fileHandle.concreteType) {\n case PROXY_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return (fileHandle as ProxyFileHandle).filePath\n case EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case S3_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n case GOOGLE_CLOUD_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n if (storageLocationUploadDestination) {\n return getUploadDestinationString(storageLocationUploadDestination)\n }\n return fileHandle.concreteType ===\n EXTERNAL_OBJECT_STORE_FILE_HANDLE_CONCRETE_TYPE_VALUE\n ? (fileHandle as ExternalObjectStoreFileHandle).bucket\n : (fileHandle as CloudProviderFileHandleInterface).bucketName\n case EXTERNAL_FILE_HANDLE_CONCRETE_TYPE_VALUE:\n return (fileHandle as ExternalFileHandle).externalURL\n default:\n throw new Error(\n `Couldn't determine location name for file handle: ${JSON.stringify(\n fileHandle,\n )}`,\n )\n }\n}\n\n/**\n * Gets the data file handle from an entity bundle.\n * Returns undefined if the entity does not have a data file handle that is visible to the caller.\n * @param entityBundle\n */\nexport function getDataFileHandle(\n entityBundle: EntityBundle,\n): FileHandle | undefined {\n let dataFileHandle: FileHandle | undefined = undefined\n if (entityBundle.entityType === EntityType.file) {\n dataFileHandle = entityBundle.fileHandles.filter(\n fh => fh.id === (entityBundle.entity as FileEntity).dataFileHandleId,\n )[0]\n }\n return dataFileHandle\n}\n\nexport function getUploadDestinationString(\n uploadDestination: UploadDestination,\n) {\n let uploadDestinationString = ''\n if (uploadDestination) {\n switch (uploadDestination.concreteType) {\n case 'org.sagebionetworks.repo.model.file.S3UploadDestination':\n uploadDestinationString = SYNAPSE_STORAGE\n break\n case 'org.sagebionetworks.repo.model.file.ExternalUploadDestination':\n uploadDestinationString = (\n uploadDestination as ExternalUploadDestination\n ).url\n if (uploadDestination.uploadType === UploadType.SFTP) {\n const indexOfLastSlash = uploadDestinationString.lastIndexOf('/')\n if (indexOfLastSlash) {\n uploadDestinationString = uploadDestinationString.substring(\n 0,\n indexOfLastSlash,\n )\n }\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalS3UploadDestination':\n uploadDestinationString =\n 's3://' +\n (uploadDestination as ExternalS3UploadDestination).bucket +\n '/'\n if (\n (uploadDestination as ExternalS3UploadDestination).baseKey != null\n ) {\n uploadDestinationString += (\n uploadDestination as ExternalS3UploadDestination\n ).baseKey\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalGoogleCloudUploadDestination':\n uploadDestinationString =\n 'gs://' +\n (uploadDestination as ExternalGoogleCloudUploadDestination).bucket +\n '/'\n if (\n (uploadDestination as ExternalGoogleCloudUploadDestination).baseKey !=\n null\n ) {\n uploadDestinationString += (\n uploadDestination as ExternalGoogleCloudUploadDestination\n ).baseKey\n }\n break\n case 'org.sagebionetworks.repo.model.file.ExternalObjectStoreUploadDestination':\n uploadDestinationString =\n (uploadDestination as ExternalObjectStoreUploadDestination)\n .endpointUrl +\n '/' +\n (uploadDestination as ExternalObjectStoreUploadDestination).bucket\n break\n }\n }\n return uploadDestinationString\n}\n"],"mappings":";;;AAqBA,IAAM,IAAkB;AAexB,SAAgB,EACd,GACA,GACuB;CACvB,QAAQ,EAAW,cAAnB;EACE,KAAK,GACH,OAAO;GACL,UAAW,EAA6C;GACxD,QAAS,EAA6C;GACtD,SAAU,EAA6C;EACzD;EACF,KAAK;EACL,KAAK,GACH,OAAO,EACL,KAAK,EACH,GACA,CACF,EACF;EACF,KAAK;EACL,KAAK,GACH,OAAO,EACL,UAAU,EACR,GACA,CACF,EACF;EACF,SACE,MAAU,MACR,qDAAqD,KAAK,UACxD,CACF,GACF;CACJ;AACF;AAQA,SAAgB,EACd,GACA,GACA;CACA,QAAQ,EAAW,cAAnB;EACE,KAAK,GACH,OAAQ,EAA+B;EACzC,KAAK;EACL,KAAK;EACL,KAAK,GAIH,OAHI,IACK,EAA2B,CAAgC,IAE7D,EAAW,iBAChB,IACG,EAA6C,SAC7C,EAAgD;EACvD,KAAK,GACH,OAAQ,EAAkC;EAC5C,SACE,MAAU,MACR,qDAAqD,KAAK,UACxD,CACF,GACF;CACJ;AACF;AAOA,SAAgB,EACd,GACwB;CACxB,IAAI;CAMJ,OALI,EAAa,eAAe,EAAW,SACzC,IAAiB,EAAa,YAAY,QACxC,MAAM,EAAG,OAAQ,EAAa,OAAsB,gBACtD,EAAE,KAEG;AACT;AAEA,SAAgB,EACd,GACA;CACA,IAAI,IAA0B;CAC9B,IAAI,GACF,QAAQ,EAAkB,cAA1B;EACE,KAAK;GACH,IAA0B;GAC1B;EACF,KAAK;GAIH,IAHA,IACE,EACA,KACE,EAAkB,eAAe,EAAW,MAAM;IACpD,IAAM,IAAmB,EAAwB,YAAY,GAAG;IAChE,AAAI,MACF,IAA0B,EAAwB,UAChD,GACA,CACF;GAEJ;GACA;EACF,KAAK;GAKH,AAJA,IACE,UACC,EAAkD,SACnD,KAEC,EAAkD,WAAW,SAE9D,KACE,EACA;GAEJ;EACF,KAAK;GAKH,AAJA,IACE,UACC,EAA2D,SAC5D,KAEC,EAA2D,WAC5D,SAEA,KACE,EACA;GAEJ;EACF,KAAK;GACH,IACG,EACE,cACH,MACC,EAA2D;GAC9D;CACJ;CAEF,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GridApiUtils.js","names":[],"sources":["../../../src/utils/functions/GridApiUtils.ts"],"sourcesContent":["import { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport {\n waitForAsyncResult,\n CreateGridRequest,\n CreateGridResponse,\n} from '@sage-bionetworks/synapse-client'\n\nexport default async function startGridSession(\n synapseClient: SynapseClient,\n request: CreateGridRequest,\n) {\n const asyncJobId =\n await synapseClient.gridServicesClient.postRepoV1GridSessionAsyncStart({\n createGridRequest: request,\n })\n if (!asyncJobId.token) {\n throw new Error('No async job token returned from startGridSession')\n }\n // getRepoV1GridSessionAsyncStart does not return 202 processing jobs as expected\n // so use the getAsynchronousJobJobId endpoint instead\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId({\n jobId: asyncJobId.token!,\n }),\n )\n return asyncJobResponse.responseBody as CreateGridResponse\n}\n"],"mappings":";;AAOA,eAA8B,EAC5B,GACA,GACA;CACA,IAAM,IACJ,MAAM,EAAc,mBAAmB,gCAAgC,EACrE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GridApiUtils.js","names":[],"sources":["../../../src/utils/functions/GridApiUtils.ts"],"sourcesContent":["import { SynapseClient } from '@sage-bionetworks/synapse-client/SynapseClient'\nimport {\n waitForAsyncResult,\n CreateGridRequest,\n CreateGridResponse,\n} from '@sage-bionetworks/synapse-client'\n\nexport default async function startGridSession(\n synapseClient: SynapseClient,\n request: CreateGridRequest,\n) {\n const asyncJobId =\n await synapseClient.gridServicesClient.postRepoV1GridSessionAsyncStart({\n createGridRequest: request,\n })\n if (!asyncJobId.token) {\n throw new Error('No async job token returned from startGridSession')\n }\n // getRepoV1GridSessionAsyncStart does not return 202 processing jobs as expected\n // so use the getAsynchronousJobJobId endpoint instead\n const asyncJobResponse = await waitForAsyncResult(() =>\n synapseClient.asynchronousJobServicesClient.getRepoV1AsynchronousJobJobId({\n jobId: asyncJobId.token!,\n }),\n )\n return asyncJobResponse.responseBody as CreateGridResponse\n}\n"],"mappings":";;AAOA,eAA8B,EAC5B,GACA,GACA;CACA,IAAM,IACJ,MAAM,EAAc,mBAAmB,gCAAgC,EACrE,mBAAmB,EACrB,CAAC;CACH,IAAI,CAAC,EAAW,OACd,MAAU,MAAM,mDAAmD;CASrE,QAAO,MALwB,QAC7B,EAAc,8BAA8B,8BAA8B,EACxE,OAAO,EAAW,MACpB,CAAC,CACH,GACwB;AAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IsEqualTreatUndefinedAsMissing.js","names":[],"sources":["../../../src/utils/functions/IsEqualTreatUndefinedAsMissing.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// `any` is safe for these comparison functions\nimport { isArray, isObject, includes, isEqualWith, omitBy } from 'lodash-es'\n\nconst comparisonFunc = (a: any, b: any): boolean | undefined => {\n if (isArray(a) || isArray(b)) return\n if (!isObject(a) || !isObject(b)) return\n\n if (!includes<any>(a, undefined) && !includes<any>(b, undefined)) return\n\n // Call recursively, after filtering all undefined properties\n return isEqualWith(\n omitBy(a, value => value === undefined),\n omitBy(b, value => value === undefined),\n comparisonFunc,\n )\n}\n\n/**\n * A version of lodash's isEqual that treats undefined and missing as equal.\n *\n * Note: `null` and missing/undefined are not considered equal in this implementation\n */\nexport function isEqualTreatUndefinedAsMissing(a: any, b: any): boolean {\n /* implementation lifted from https://stackoverflow.com/a/57894104 */\n return isEqualWith(a, b, comparisonFunc)\n}\n"],"mappings":";;AAIA,IAAM,KAAkB,GAAQ,MAAgC;
|
|
1
|
+
{"version":3,"file":"IsEqualTreatUndefinedAsMissing.js","names":[],"sources":["../../../src/utils/functions/IsEqualTreatUndefinedAsMissing.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n// `any` is safe for these comparison functions\nimport { isArray, isObject, includes, isEqualWith, omitBy } from 'lodash-es'\n\nconst comparisonFunc = (a: any, b: any): boolean | undefined => {\n if (isArray(a) || isArray(b)) return\n if (!isObject(a) || !isObject(b)) return\n\n if (!includes<any>(a, undefined) && !includes<any>(b, undefined)) return\n\n // Call recursively, after filtering all undefined properties\n return isEqualWith(\n omitBy(a, value => value === undefined),\n omitBy(b, value => value === undefined),\n comparisonFunc,\n )\n}\n\n/**\n * A version of lodash's isEqual that treats undefined and missing as equal.\n *\n * Note: `null` and missing/undefined are not considered equal in this implementation\n */\nexport function isEqualTreatUndefinedAsMissing(a: any, b: any): boolean {\n /* implementation lifted from https://stackoverflow.com/a/57894104 */\n return isEqualWith(a, b, comparisonFunc)\n}\n"],"mappings":";;AAIA,IAAM,KAAkB,GAAQ,MAAgC;CAC1D,QAAQ,CAAC,KAAK,EAAQ,CAAC,MACvB,GAAC,EAAS,CAAC,KAAK,CAAC,EAAS,CAAC,MAE3B,GAAC,EAAc,GAAG,KAAA,CAAS,KAAK,CAAC,EAAc,GAAG,KAAA,CAAS,IAG/D,OAAO,EACL,EAAO,IAAG,MAAS,MAAU,KAAA,CAAS,GACtC,EAAO,IAAG,MAAS,MAAU,KAAA,CAAS,GACtC,CACF;AACF;AAOA,SAAgB,EAA+B,GAAQ,GAAiB;CAEtE,OAAO,EAAY,GAAG,GAAG,CAAc;AACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IsExternalLink.js","names":[],"sources":["../../../src/utils/functions/IsExternalLink.ts"],"sourcesContent":["/**\n * Determines whether a given URL is external relative to the current page.\n *\n * @param url - The URL to check. Can be relative or absolute.\n * @returns true if the link points to a different origin (external), false otherwise.\n */\nexport function isExternalLink(url: string): boolean {\n try {\n // First, try parsing as an absolute URL (no base needed).\n // This works for URLs like \"https://example.com/path\".\n const absoluteUrl = new URL(url)\n // If window is available, compare origins precisely.\n if (typeof window !== 'undefined') {\n return absoluteUrl.origin !== window.location.origin\n }\n // During SSR, we can't compare origins, but the URL is absolute and\n // parseable, so it's almost certainly external (relative URLs would fail\n // the no-base parse above). Return true to be safe.\n return true\n } catch {\n // URL parsing without a base failed, so `url` is relative (e.g. \"/about\",\n // \"#section\", \"page\"). Relative URLs are always internal.\n // If window is available, we could also try with window.location.href as\n // base, but relative URLs are by definition same-origin.\n return false\n }\n}\n"],"mappings":";AAMA,SAAgB,EAAe,GAAsB;
|
|
1
|
+
{"version":3,"file":"IsExternalLink.js","names":[],"sources":["../../../src/utils/functions/IsExternalLink.ts"],"sourcesContent":["/**\n * Determines whether a given URL is external relative to the current page.\n *\n * @param url - The URL to check. Can be relative or absolute.\n * @returns true if the link points to a different origin (external), false otherwise.\n */\nexport function isExternalLink(url: string): boolean {\n try {\n // First, try parsing as an absolute URL (no base needed).\n // This works for URLs like \"https://example.com/path\".\n const absoluteUrl = new URL(url)\n // If window is available, compare origins precisely.\n if (typeof window !== 'undefined') {\n return absoluteUrl.origin !== window.location.origin\n }\n // During SSR, we can't compare origins, but the URL is absolute and\n // parseable, so it's almost certainly external (relative URLs would fail\n // the no-base parse above). Return true to be safe.\n return true\n } catch {\n // URL parsing without a base failed, so `url` is relative (e.g. \"/about\",\n // \"#section\", \"page\"). Relative URLs are always internal.\n // If window is available, we could also try with window.location.href as\n // base, but relative URLs are by definition same-origin.\n return false\n }\n}\n"],"mappings":";AAMA,SAAgB,EAAe,GAAsB;CACnD,IAAI;EAGF,IAAM,IAAc,IAAI,IAAI,CAAG;EAQ/B,OANI,OAAO,SAAW,MACb,EAAY,WAAW,OAAO,SAAS,SAKzC;CACT,QAAQ;EAKN,OAAO;CACT;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectUtils.js","names":[],"sources":["../../../src/utils/functions/ObjectUtils.ts"],"sourcesContent":["/**\n * Removes fields with value 'undefined' from an object (not recursive).\n *\n * Use the `inPlace` parameter to modify the object (using `delete`), rather than creating a new object.\n *\n * See https://stackoverflow.com/questions/25421233\n */\nexport function removeUndefined(obj: Record<string, unknown>, inPlace = false) {\n if (inPlace) {\n Object.keys(obj).forEach(key =>\n obj[key] === undefined ? delete obj[key] : {},\n )\n return obj\n } else {\n return Object.keys(obj).reduce((acc: Record<string, unknown>, key) => {\n const _acc = acc\n if (obj[key] !== undefined) _acc[key] = obj[key]\n return _acc\n }, {})\n }\n}\n"],"mappings":";AAOA,SAAgB,EAAgB,GAA8B,IAAU,IAAO;
|
|
1
|
+
{"version":3,"file":"ObjectUtils.js","names":[],"sources":["../../../src/utils/functions/ObjectUtils.ts"],"sourcesContent":["/**\n * Removes fields with value 'undefined' from an object (not recursive).\n *\n * Use the `inPlace` parameter to modify the object (using `delete`), rather than creating a new object.\n *\n * See https://stackoverflow.com/questions/25421233\n */\nexport function removeUndefined(obj: Record<string, unknown>, inPlace = false) {\n if (inPlace) {\n Object.keys(obj).forEach(key =>\n obj[key] === undefined ? delete obj[key] : {},\n )\n return obj\n } else {\n return Object.keys(obj).reduce((acc: Record<string, unknown>, key) => {\n const _acc = acc\n if (obj[key] !== undefined) _acc[key] = obj[key]\n return _acc\n }, {})\n }\n}\n"],"mappings":";AAOA,SAAgB,EAAgB,GAA8B,IAAU,IAAO;CAO3E,OANE,KACF,OAAO,KAAK,CAAG,EAAE,SAAQ,MACvB,EAAI,OAAS,KAAA,IAAY,OAAO,EAAI,KAAO,CAAC,CAC9C,GACO,KAEA,OAAO,KAAK,CAAG,EAAE,QAAQ,GAA8B,MAAQ;EACpE,IAAM,IAAO;EAEb,OADI,EAAI,OAAS,KAAA,MAAW,EAAK,KAAO,EAAI,KACrC;CACT,GAAG,CAAC,CAAC;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryFilterUtils.js","names":[],"sources":["../../../src/utils/functions/QueryFilterUtils.ts"],"sourcesContent":["import {\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n QueryFilter,\n Row,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\n\n/**\n * Given a list of selected rows, return a QueryFilter that will only return those rows\n * @param primaryKeyColumnNames\n * @param selectedRows\n * @param selectColumns\n */\nexport function getPrimaryKeyINFilter(\n primaryKeyColumnNames: string[],\n selectedRows: Row[],\n selectColumns: SelectColumn[],\n): QueryFilter {\n if (!primaryKeyColumnNames || primaryKeyColumnNames.length !== 1) {\n // If the key is undefined, then the user should have never been able to apply a filter\n // TODO: Handling a composite key would be tricky since the QueryFilter API currently only allows you to specify one column\n throw new Error('rowSelectionPrimaryKey must be defined and have length 1')\n }\n // Apply a filter that should only return the selected rows\n const primaryKeyColumnIndex = selectColumns.findIndex(\n sc => sc.name === primaryKeyColumnNames[0],\n )\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: primaryKeyColumnNames[0],\n operator: ColumnSingleValueFilterOperator.IN,\n values: selectedRows.map(row => row.values[primaryKeyColumnIndex]!),\n }\n return filter\n}\n"],"mappings":";;AAcA,SAAgB,EACd,GACA,GACA,GACa;
|
|
1
|
+
{"version":3,"file":"QueryFilterUtils.js","names":[],"sources":["../../../src/utils/functions/QueryFilterUtils.ts"],"sourcesContent":["import {\n ColumnSingleValueFilterOperator,\n ColumnSingleValueQueryFilter,\n QueryFilter,\n Row,\n SelectColumn,\n} from '@sage-bionetworks/synapse-types'\n\n/**\n * Given a list of selected rows, return a QueryFilter that will only return those rows\n * @param primaryKeyColumnNames\n * @param selectedRows\n * @param selectColumns\n */\nexport function getPrimaryKeyINFilter(\n primaryKeyColumnNames: string[],\n selectedRows: Row[],\n selectColumns: SelectColumn[],\n): QueryFilter {\n if (!primaryKeyColumnNames || primaryKeyColumnNames.length !== 1) {\n // If the key is undefined, then the user should have never been able to apply a filter\n // TODO: Handling a composite key would be tricky since the QueryFilter API currently only allows you to specify one column\n throw new Error('rowSelectionPrimaryKey must be defined and have length 1')\n }\n // Apply a filter that should only return the selected rows\n const primaryKeyColumnIndex = selectColumns.findIndex(\n sc => sc.name === primaryKeyColumnNames[0],\n )\n const filter: ColumnSingleValueQueryFilter = {\n concreteType:\n 'org.sagebionetworks.repo.model.table.ColumnSingleValueQueryFilter',\n columnName: primaryKeyColumnNames[0],\n operator: ColumnSingleValueFilterOperator.IN,\n values: selectedRows.map(row => row.values[primaryKeyColumnIndex]!),\n }\n return filter\n}\n"],"mappings":";;AAcA,SAAgB,EACd,GACA,GACA,GACa;CACb,IAAI,CAAC,KAAyB,EAAsB,WAAW,GAG7D,MAAU,MAAM,0DAA0D;CAG5E,IAAM,IAAwB,EAAc,WAC1C,MAAM,EAAG,SAAS,EAAsB,EAC1C;CAQA,OAAO;EANL,cACE;EACF,YAAY,EAAsB;EAClC,UAAU,EAAgC;EAC1C,QAAQ,EAAa,KAAI,MAAO,EAAI,OAAO,EAAuB;CAE7D;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealmUtils.js","names":[],"sources":["../../../src/utils/functions/RealmUtils.ts"],"sourcesContent":["import {\n instanceOfOAuthIdentityProvider,\n OAuthIdentityProviderProviderEnum,\n Realm,\n} from '@sage-bionetworks/synapse-client'\n\n/**\n * Check if a realm has the ARCUS_BIOSCIENCES identity provider\n */\nexport function hasArcusProvider(realm?: Realm): boolean {\n return hasProvider(realm, OAuthIdentityProviderProviderEnum.ARCUS_BIOSCIENCES)\n}\n\n/**\n * Check if a realm has the SAGE_BIONETWORKS identity provider\n */\nexport function hasSageBionetworksProvider(realm?: Realm): boolean {\n return hasProvider(realm, OAuthIdentityProviderProviderEnum.SAGE_BIONETWORKS)\n}\n\nfunction hasProvider(\n realm?: Realm,\n providerEnum?: OAuthIdentityProviderProviderEnum,\n): boolean {\n if (!realm?.identityProvider) return false\n return realm.identityProvider.some(\n (provider: any) =>\n instanceOfOAuthIdentityProvider(provider) &&\n provider.provider === providerEnum,\n )\n}\n"],"mappings":";;AASA,SAAgB,EAAiB,GAAwB;
|
|
1
|
+
{"version":3,"file":"RealmUtils.js","names":[],"sources":["../../../src/utils/functions/RealmUtils.ts"],"sourcesContent":["import {\n instanceOfOAuthIdentityProvider,\n OAuthIdentityProviderProviderEnum,\n Realm,\n} from '@sage-bionetworks/synapse-client'\n\n/**\n * Check if a realm has the ARCUS_BIOSCIENCES identity provider\n */\nexport function hasArcusProvider(realm?: Realm): boolean {\n return hasProvider(realm, OAuthIdentityProviderProviderEnum.ARCUS_BIOSCIENCES)\n}\n\n/**\n * Check if a realm has the SAGE_BIONETWORKS identity provider\n */\nexport function hasSageBionetworksProvider(realm?: Realm): boolean {\n return hasProvider(realm, OAuthIdentityProviderProviderEnum.SAGE_BIONETWORKS)\n}\n\nfunction hasProvider(\n realm?: Realm,\n providerEnum?: OAuthIdentityProviderProviderEnum,\n): boolean {\n if (!realm?.identityProvider) return false\n return realm.identityProvider.some(\n (provider: any) =>\n instanceOfOAuthIdentityProvider(provider) &&\n provider.provider === providerEnum,\n )\n}\n"],"mappings":";;AASA,SAAgB,EAAiB,GAAwB;CACvD,OAAO,EAAY,GAAO,EAAkC,iBAAiB;AAC/E;AAKA,SAAgB,EAA2B,GAAwB;CACjE,OAAO,EAAY,GAAO,EAAkC,gBAAgB;AAC9E;AAEA,SAAS,EACP,GACA,GACS;CAET,OADK,GAAO,mBACL,EAAM,iBAAiB,MAC3B,MACC,EAAgC,CAAQ,KACxC,EAAS,aAAa,CAC1B,IALqC;AAMvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegularExpressions.js","names":[],"sources":["../../../src/utils/functions/RegularExpressions.ts"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport { normalizeSynPrefix } from './EntityTypeUtils'\n\n// doi regex here - https://www.crossref.org/blog/dois-and-matching-regular-expressions/\n// note - had to add an escape character for the second and third forward slash in the regex above\nexport const DOI_REGEX = /^10.\\d{4,9}\\/[-._;()/:a-z0-9]+$/i\n\nexport function convertDoiToLink(doi: string) {\n doi = doi.trim()\n if (DOI_REGEX.test(doi)) {\n return `https://dx.doi.org/${doi}`\n }\n return ''\n}\n\n/**\n * Checks for a Synapse ID, with or without a version number.\n * Captures the synId and version number into capture groups.\n *\n * Usage examples:\n * > const result = 'syn123.9'.match(SYNAPSE_ENTITY_ID_REGEX)\n * > result[0]\n * 'syn123.9'\n * > result[1]\n * 'syn123'\n * > result[2]\n * '9'\n */\nexport const SYNAPSE_ENTITY_ID_REGEX = /^(syn\\d+)(?:\\.(\\d+))?$/i\n\n/**\n * Given a Synapse Entity ID of the form `syn123` or `syn123.4`, returns the\n * Reference object containing the entity ID and optional version number.\n * If the ID is not a valid Synapse Entity ID, returns null.\n * @param synId\n */\nexport function parseSynId(synId: string): Reference | null {\n const synIdMatch = SYNAPSE_ENTITY_ID_REGEX.exec(synId)\n if (synIdMatch) {\n return {\n targetId: normalizeSynPrefix(synIdMatch[1]),\n targetVersionNumber: synIdMatch[2] ? parseInt(synIdMatch[2]) : undefined,\n }\n } else {\n return synIdMatch\n }\n}\n"],"mappings":";;;;;;;;IAKa,IAAY;AAEzB,SAAgB,EAAiB,GAAa;
|
|
1
|
+
{"version":3,"file":"RegularExpressions.js","names":[],"sources":["../../../src/utils/functions/RegularExpressions.ts"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport { normalizeSynPrefix } from './EntityTypeUtils'\n\n// doi regex here - https://www.crossref.org/blog/dois-and-matching-regular-expressions/\n// note - had to add an escape character for the second and third forward slash in the regex above\nexport const DOI_REGEX = /^10.\\d{4,9}\\/[-._;()/:a-z0-9]+$/i\n\nexport function convertDoiToLink(doi: string) {\n doi = doi.trim()\n if (DOI_REGEX.test(doi)) {\n return `https://dx.doi.org/${doi}`\n }\n return ''\n}\n\n/**\n * Checks for a Synapse ID, with or without a version number.\n * Captures the synId and version number into capture groups.\n *\n * Usage examples:\n * > const result = 'syn123.9'.match(SYNAPSE_ENTITY_ID_REGEX)\n * > result[0]\n * 'syn123.9'\n * > result[1]\n * 'syn123'\n * > result[2]\n * '9'\n */\nexport const SYNAPSE_ENTITY_ID_REGEX = /^(syn\\d+)(?:\\.(\\d+))?$/i\n\n/**\n * Given a Synapse Entity ID of the form `syn123` or `syn123.4`, returns the\n * Reference object containing the entity ID and optional version number.\n * If the ID is not a valid Synapse Entity ID, returns null.\n * @param synId\n */\nexport function parseSynId(synId: string): Reference | null {\n const synIdMatch = SYNAPSE_ENTITY_ID_REGEX.exec(synId)\n if (synIdMatch) {\n return {\n targetId: normalizeSynPrefix(synIdMatch[1]),\n targetVersionNumber: synIdMatch[2] ? parseInt(synIdMatch[2]) : undefined,\n }\n } else {\n return synIdMatch\n }\n}\n"],"mappings":";;;;;;;;IAKa,IAAY;AAEzB,SAAgB,EAAiB,GAAa;CAK5C,OAJA,IAAM,EAAI,KAAK,GACX,EAAU,KAAK,CAAG,IACb,sBAAsB,MAExB;AACT;AAeA,IAAa,IAA0B;AAQvC,SAAgB,EAAW,GAAiC;CAC1D,IAAM,IAAa,EAAwB,KAAK,CAAK;CAOnD,OANE,KACK;EACL,UAAU,EAAmB,EAAW,EAAE;EAC1C,qBAAqB,EAAW,KAAK,SAAS,EAAW,EAAE,IAAI,KAAA;CACjE;AAIJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResolveLinkEntity.js","names":[],"sources":["../../../src/utils/functions/ResolveLinkEntity.ts"],"sourcesContent":["import { getEntity } from '@/synapse-client/SynapseClient'\nimport { isLink } from '@/utils/types/IsType'\nimport { Entity } from '@sage-bionetworks/synapse-types'\nimport { QueryOptions, useQuery } from '@tanstack/react-query'\nimport { useSynapseContext } from '../context/SynapseContext'\n\n/**\n * Follows a Synapse entity ID to the end of the chain of links\n * @param synId the ID of a Synapse entity that may be a link\n * @returns the ID of the entity at the end of the chain of links\n * @throws an error if a link is found that does not resolve, or if a cycle is found\n */\nexport async function resolveLinkEntity(\n synId: string,\n versionNumber?: number,\n accessToken?: string,\n): Promise<Entity> {\n // Track visited entities to prevent infinitely fetching a cycle of Links\n const seen: Set<string> = new Set()\n try {\n let currentEntity = await getEntity(accessToken, synId, versionNumber)\n while (isLink(currentEntity)) {\n if (seen.has(currentEntity.id!)) {\n throw new Error('Link forms a cycle.')\n }\n seen.add(currentEntity.id!)\n currentEntity = await getEntity(\n accessToken,\n currentEntity.linksTo.targetId,\n currentEntity.linksTo.targetVersionNumber,\n )\n }\n return currentEntity\n } catch (e) {\n throw new Error(`${synId} could not be resolved.\\n${(e as Error).message}`)\n }\n}\n\nexport function useResolveLinkEntity(\n synId: string,\n versionNumber?: number,\n options?: QueryOptions<Entity>,\n) {\n const { accessToken } = useSynapseContext()\n return useQuery({\n queryKey: ['resolveLinkEntity', synId, versionNumber],\n queryFn: () => resolveLinkEntity(synId, versionNumber, accessToken),\n ...options,\n })\n}\n"],"mappings":";;;;;AAYA,eAAsB,EACpB,GACA,GACA,GACiB;CAEjB,IAAM,oBAAoB,IAAI,
|
|
1
|
+
{"version":3,"file":"ResolveLinkEntity.js","names":[],"sources":["../../../src/utils/functions/ResolveLinkEntity.ts"],"sourcesContent":["import { getEntity } from '@/synapse-client/SynapseClient'\nimport { isLink } from '@/utils/types/IsType'\nimport { Entity } from '@sage-bionetworks/synapse-types'\nimport { QueryOptions, useQuery } from '@tanstack/react-query'\nimport { useSynapseContext } from '../context/SynapseContext'\n\n/**\n * Follows a Synapse entity ID to the end of the chain of links\n * @param synId the ID of a Synapse entity that may be a link\n * @returns the ID of the entity at the end of the chain of links\n * @throws an error if a link is found that does not resolve, or if a cycle is found\n */\nexport async function resolveLinkEntity(\n synId: string,\n versionNumber?: number,\n accessToken?: string,\n): Promise<Entity> {\n // Track visited entities to prevent infinitely fetching a cycle of Links\n const seen: Set<string> = new Set()\n try {\n let currentEntity = await getEntity(accessToken, synId, versionNumber)\n while (isLink(currentEntity)) {\n if (seen.has(currentEntity.id!)) {\n throw new Error('Link forms a cycle.')\n }\n seen.add(currentEntity.id!)\n currentEntity = await getEntity(\n accessToken,\n currentEntity.linksTo.targetId,\n currentEntity.linksTo.targetVersionNumber,\n )\n }\n return currentEntity\n } catch (e) {\n throw new Error(`${synId} could not be resolved.\\n${(e as Error).message}`)\n }\n}\n\nexport function useResolveLinkEntity(\n synId: string,\n versionNumber?: number,\n options?: QueryOptions<Entity>,\n) {\n const { accessToken } = useSynapseContext()\n return useQuery({\n queryKey: ['resolveLinkEntity', synId, versionNumber],\n queryFn: () => resolveLinkEntity(synId, versionNumber, accessToken),\n ...options,\n })\n}\n"],"mappings":";;;;;AAYA,eAAsB,EACpB,GACA,GACA,GACiB;CAEjB,IAAM,oBAAoB,IAAI,IAAI;CAClC,IAAI;EACF,IAAI,IAAgB,MAAM,EAAU,GAAa,GAAO,CAAa;EACrE,OAAO,EAAO,CAAa,IAAG;GAC5B,IAAI,EAAK,IAAI,EAAc,EAAG,GAC5B,MAAU,MAAM,qBAAqB;GAGvC,AADA,EAAK,IAAI,EAAc,EAAG,GAC1B,IAAgB,MAAM,EACpB,GACA,EAAc,QAAQ,UACtB,EAAc,QAAQ,mBACxB;EACF;EACA,OAAO;CACT,SAAS,GAAG;EACV,MAAU,MAAM,GAAG,EAAM,2BAA4B,EAAY,SAAS;CAC5E;AACF;AAEA,SAAgB,EACd,GACA,GACA,GACA;CACA,IAAM,EAAE,mBAAgB,EAAkB;CAC1C,OAAO,EAAS;EACd,UAAU;GAAC;GAAqB;GAAO;EAAa;EACpD,eAAe,EAAkB,GAAO,GAAe,CAAW;EAClE,GAAG;CACL,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SanitizeHtmlUtils.js","names":[],"sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"sourcesContent":["import DOMPurify, { clearWindow, removeAllHooks } from 'isomorphic-dompurify'\nimport xssLib from 'xss'\nimport type { IFilterXSSOptions } from 'xss'\n\n// xss is a CJS-only module; pull runtime values from the default import to\n// avoid \"named export not found\" errors in Vite dev mode (native ESM).\nconst { safeAttrValue, escapeAttrValue } = xssLib as unknown as {\n safeAttrValue: (typeof import('xss'))['safeAttrValue']\n escapeAttrValue: (typeof import('xss'))['escapeAttrValue']\n}\n\n// allow list used by both the xss config and DOMPurify config\nconst xssWhiteList: XSS.IWhiteList = {\n a: ['target', 'href', 'title', 'rel'],\n abbr: ['title'],\n address: [],\n area: ['shape', 'coords', 'href', 'alt'],\n article: [],\n aside: [],\n audio: ['autoplay', 'controls', 'loop', 'preload', 'src'],\n b: [],\n bdi: ['dir'],\n bdo: ['dir'],\n big: [],\n blockquote: ['cite'],\n body: [],\n br: [],\n button: ['class'],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: ['align', 'valign', 'span', 'width'],\n colgroup: ['align', 'valign', 'span', 'width'],\n dd: [],\n del: ['datetime'],\n details: ['open'],\n div: ['class'],\n dl: [],\n dt: [],\n em: [],\n font: ['color', 'size', 'face'],\n footer: [],\n g: [],\n h1: ['toc'],\n h2: ['toc'],\n h3: ['toc'],\n h4: ['toc'],\n h5: ['toc'],\n h6: ['toc'],\n head: [],\n header: [],\n hr: [],\n html: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n ins: ['datetime'],\n li: ['class'],\n mark: [],\n nav: [],\n noscript: [],\n ol: ['class'],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: ['data-widgetparams', 'data-widget-type', 'class', 'id'],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n svg: [],\n table: ['width', 'border', 'align', 'valign', 'class'],\n tbody: ['align', 'valign'],\n td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'style'],\n tfoot: ['align', 'valign'],\n th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n thead: ['class', 'align', 'valign'],\n tr: ['rowspan', 'align', 'valign'],\n tt: [],\n u: [],\n ul: ['class'],\n video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'],\n}\n\n// PORTALS-1450: including 'style' in the allow-list will cause string values to come through, which crashes the app when used (because it uses jsx).\nexport const xssOptions: IFilterXSSOptions = {\n whiteList: xssWhiteList,\n stripIgnoreTagBody: true, // filter out all tags not in the whitelist\n allowCommentTag: false,\n css: {\n whiteList: {\n // SWC-7015 - Allow text-align property in style attr to support GFM table syntax\n // The 'style' attribute is used to set text alignment for table cells, so explicitly allow it here\n 'text-align': true,\n },\n },\n onIgnoreTag: function (tag, html, options) {\n if (tag === '!doctype') {\n // do not filter doctype\n return html\n }\n return undefined\n },\n safeAttrValue: function (tag, name, value, cssFilter) {\n // Apply default safeAttrValue filtering:\n value = safeAttrValue(tag, name, value, cssFilter)\n // If the tag is an image and the attribute is 'src', only allow data:image URIs or http(s) URLs\n if (tag === 'img' && name === 'src') {\n if (\n !(\n value &&\n (value.startsWith('data:image/') || value.startsWith('http'))\n )\n ) {\n return ''\n }\n }\n value = escapeAttrValue(value)\n return value\n },\n}\n\nconst ALLOWED_TAGS: string[] = Object.keys(xssWhiteList as object)\nconst ALLOWED_ATTR: string[] = [\n ...new Set(\n Object.values(xssWhiteList as object).flat() as string[], // Flatten all attributes into a single array\n ),\n]\n\nconst ALLOWED_STYLES: Record<string, boolean> = {\n 'text-align': true,\n}\n// Regex to allow only secure image sources\nconst ALLOWED_URI_REGEXP: RegExp = /^(https?:|data:image\\/)/\n\nconst domPurifyConfig = {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n KEEP_CONTENT: true,\n RETURN_DOM_FRAGMENT: false,\n RETURN_TRUSTED_TYPE: false,\n}\n\nfunction configureDomPurify() {\n // Configure DOMPurify with TypeScript support\n DOMPurify.setConfig(domPurifyConfig)\n\n // Hook: Sanitize attributes (equivalent to safeAttrValue)\n DOMPurify.addHook('uponSanitizeAttribute', (node, data) => {\n const { attrName, attrValue } = data\n\n // Ensure only safe src values for images\n if (node.nodeName.toLowerCase() === 'img' && attrName === 'src') {\n if (!ALLOWED_URI_REGEXP.test(attrValue)) {\n data.keepAttr = false // Remove unsafe src values\n }\n }\n\n if (attrName === 'data-widgetparams' || attrName === 'data-widget-type') {\n data.attrValue = attrValue\n } else if (attrName === 'style') {\n const safeStyles = attrValue\n .split(';')\n .map(style => style.trim())\n .filter(style => {\n const [property] = style.split(':').map(s => s.trim())\n return ALLOWED_STYLES[property] || false // Only allow explicitly listed styles\n })\n .join('; ')\n data.attrValue = safeStyles\n } else {\n data.attrValue = DOMPurify.sanitize(attrValue, domPurifyConfig)\n }\n })\n\n // Hook: Prevent removal of `!doctype` (equivalent to onIgnoreTag)\n DOMPurify.addHook('uponSanitizeElement', (node, data) => {\n if (data.tagName === '!doctype') {\n // Reinsert the doctype manually after sanitization\n if (node.parentNode) {\n node.parentNode.insertBefore(\n document.implementation.createDocumentType('html', '', ''),\n node,\n )\n }\n }\n })\n}\n\nexport function sanitize(input: string): string {\n configureDomPurify()\n const result = DOMPurify.sanitize(input, domPurifyConfig)\n // clearWindow clears memory usage in Node.js, noop in browser:\n clearWindow()\n removeAllHooks()\n return result\n}\n"],"mappings":";;;AAMA,IAAM,EAAE,kBAAe,uBAAoB,GAMrC,IAA+B;CACnC,GAAG;EAAC;EAAU;EAAQ;EAAS;
|
|
1
|
+
{"version":3,"file":"SanitizeHtmlUtils.js","names":[],"sources":["../../../src/utils/functions/SanitizeHtmlUtils.ts"],"sourcesContent":["import DOMPurify, { clearWindow, removeAllHooks } from 'isomorphic-dompurify'\nimport xssLib from 'xss'\nimport type { IFilterXSSOptions } from 'xss'\n\n// xss is a CJS-only module; pull runtime values from the default import to\n// avoid \"named export not found\" errors in Vite dev mode (native ESM).\nconst { safeAttrValue, escapeAttrValue } = xssLib as unknown as {\n safeAttrValue: (typeof import('xss'))['safeAttrValue']\n escapeAttrValue: (typeof import('xss'))['escapeAttrValue']\n}\n\n// allow list used by both the xss config and DOMPurify config\nconst xssWhiteList: XSS.IWhiteList = {\n a: ['target', 'href', 'title', 'rel'],\n abbr: ['title'],\n address: [],\n area: ['shape', 'coords', 'href', 'alt'],\n article: [],\n aside: [],\n audio: ['autoplay', 'controls', 'loop', 'preload', 'src'],\n b: [],\n bdi: ['dir'],\n bdo: ['dir'],\n big: [],\n blockquote: ['cite'],\n body: [],\n br: [],\n button: ['class'],\n caption: [],\n center: [],\n cite: [],\n code: [],\n col: ['align', 'valign', 'span', 'width'],\n colgroup: ['align', 'valign', 'span', 'width'],\n dd: [],\n del: ['datetime'],\n details: ['open'],\n div: ['class'],\n dl: [],\n dt: [],\n em: [],\n font: ['color', 'size', 'face'],\n footer: [],\n g: [],\n h1: ['toc'],\n h2: ['toc'],\n h3: ['toc'],\n h4: ['toc'],\n h5: ['toc'],\n h6: ['toc'],\n head: [],\n header: [],\n hr: [],\n html: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n ins: ['datetime'],\n li: ['class'],\n mark: [],\n nav: [],\n noscript: [],\n ol: ['class'],\n p: [],\n pre: [],\n s: [],\n section: [],\n small: [],\n span: ['data-widgetparams', 'data-widget-type', 'class', 'id'],\n sub: [],\n summary: [],\n sup: [],\n strong: [],\n svg: [],\n table: ['width', 'border', 'align', 'valign', 'class'],\n tbody: ['align', 'valign'],\n td: ['width', 'rowspan', 'colspan', 'align', 'valign', 'style'],\n tfoot: ['align', 'valign'],\n th: ['width', 'rowspan', 'colspan', 'align', 'valign', 'class', 'style'],\n thead: ['class', 'align', 'valign'],\n tr: ['rowspan', 'align', 'valign'],\n tt: [],\n u: [],\n ul: ['class'],\n video: ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width'],\n}\n\n// PORTALS-1450: including 'style' in the allow-list will cause string values to come through, which crashes the app when used (because it uses jsx).\nexport const xssOptions: IFilterXSSOptions = {\n whiteList: xssWhiteList,\n stripIgnoreTagBody: true, // filter out all tags not in the whitelist\n allowCommentTag: false,\n css: {\n whiteList: {\n // SWC-7015 - Allow text-align property in style attr to support GFM table syntax\n // The 'style' attribute is used to set text alignment for table cells, so explicitly allow it here\n 'text-align': true,\n },\n },\n onIgnoreTag: function (tag, html, options) {\n if (tag === '!doctype') {\n // do not filter doctype\n return html\n }\n return undefined\n },\n safeAttrValue: function (tag, name, value, cssFilter) {\n // Apply default safeAttrValue filtering:\n value = safeAttrValue(tag, name, value, cssFilter)\n // If the tag is an image and the attribute is 'src', only allow data:image URIs or http(s) URLs\n if (tag === 'img' && name === 'src') {\n if (\n !(\n value &&\n (value.startsWith('data:image/') || value.startsWith('http'))\n )\n ) {\n return ''\n }\n }\n value = escapeAttrValue(value)\n return value\n },\n}\n\nconst ALLOWED_TAGS: string[] = Object.keys(xssWhiteList as object)\nconst ALLOWED_ATTR: string[] = [\n ...new Set(\n Object.values(xssWhiteList as object).flat() as string[], // Flatten all attributes into a single array\n ),\n]\n\nconst ALLOWED_STYLES: Record<string, boolean> = {\n 'text-align': true,\n}\n// Regex to allow only secure image sources\nconst ALLOWED_URI_REGEXP: RegExp = /^(https?:|data:image\\/)/\n\nconst domPurifyConfig = {\n ALLOWED_TAGS,\n ALLOWED_ATTR,\n KEEP_CONTENT: true,\n RETURN_DOM_FRAGMENT: false,\n RETURN_TRUSTED_TYPE: false,\n}\n\nfunction configureDomPurify() {\n // Configure DOMPurify with TypeScript support\n DOMPurify.setConfig(domPurifyConfig)\n\n // Hook: Sanitize attributes (equivalent to safeAttrValue)\n DOMPurify.addHook('uponSanitizeAttribute', (node, data) => {\n const { attrName, attrValue } = data\n\n // Ensure only safe src values for images\n if (node.nodeName.toLowerCase() === 'img' && attrName === 'src') {\n if (!ALLOWED_URI_REGEXP.test(attrValue)) {\n data.keepAttr = false // Remove unsafe src values\n }\n }\n\n if (attrName === 'data-widgetparams' || attrName === 'data-widget-type') {\n data.attrValue = attrValue\n } else if (attrName === 'style') {\n const safeStyles = attrValue\n .split(';')\n .map(style => style.trim())\n .filter(style => {\n const [property] = style.split(':').map(s => s.trim())\n return ALLOWED_STYLES[property] || false // Only allow explicitly listed styles\n })\n .join('; ')\n data.attrValue = safeStyles\n } else {\n data.attrValue = DOMPurify.sanitize(attrValue, domPurifyConfig)\n }\n })\n\n // Hook: Prevent removal of `!doctype` (equivalent to onIgnoreTag)\n DOMPurify.addHook('uponSanitizeElement', (node, data) => {\n if (data.tagName === '!doctype') {\n // Reinsert the doctype manually after sanitization\n if (node.parentNode) {\n node.parentNode.insertBefore(\n document.implementation.createDocumentType('html', '', ''),\n node,\n )\n }\n }\n })\n}\n\nexport function sanitize(input: string): string {\n configureDomPurify()\n const result = DOMPurify.sanitize(input, domPurifyConfig)\n // clearWindow clears memory usage in Node.js, noop in browser:\n clearWindow()\n removeAllHooks()\n return result\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SanitizeHtmlUtils.test-utils.js","names":[],"sources":["../../../src/utils/functions/SanitizeHtmlUtils.test-utils.ts"],"sourcesContent":["/**\n * Shared test factory for SanitizeHtmlUtils.\n * Imported by both the CSR (jsdom) and SSR (node) test files so test cases\n * are defined once and run in both environments.\n *\n * Uses explicit JSDOM for HTML parsing so the helpers work regardless of\n * whether a global `document` is available.\n */\nimport xss from 'xss'\nimport { JSDOM } from 'jsdom'\nimport { sanitize, xssOptions } from './SanitizeHtmlUtils'\n\nfunction parseHTML(html: string) {\n return new JSDOM(html).window.document.documentElement\n}\n\nexport function runDomPurifyTests() {\n describe('HTML Sanitization - DOMPurify', () => {\n test('Prevents XSS through onload', () => {\n const sanitized = sanitize(\"<span onload='alert('XSS')'>foo</span>\")\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onload')).toBeNull()\n })\n test('Prevents XSS through onclick', () => {\n const sanitized = sanitize(\"<span onclick='alert('XSS')'>foo</span>\")\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onclick')).toBeNull()\n })\n test('Prevents XSS through href', () => {\n const script = 'javascript:alert(1)'\n const sanitized = sanitize(`<a href=\"${script}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n // Verify script was removed\n expect(anchor.getAttribute('href')).toBeNull()\n })\n test('Allows valid link href', () => {\n const validHref = 'https://synapse.org'\n const sanitized = sanitize(`<a href=\"${validHref}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(validHref)\n })\n test('Allows link rel property', () => {\n const href = 'https://synapse.org'\n const rel = 'noopener noreferrer'\n const sanitized = sanitize(`<a href=\"${href}\" rel=\"${rel}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(href)\n expect(anchor.getAttribute('rel')).toEqual(rel)\n })\n\n describe.each(['td', 'th'])('%s cell text alignment', tag => {\n test(`Allows ${tag} with text-align style`, () => {\n const input = `<table><tbody><tr><${tag} style=\"text-align:center\">foo</${tag}></tr></tbody></table>`\n const expected = input\n const sanitized = sanitize(input)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n\n test(`Removes styles other than text-align from ${tag}`, () => {\n // Some other style is applied, which is not allowed (may be a click-jacking attempt!)\n const input = `<table><tbody><tr><${tag} style=\"text-align:center; position: absolute;\">foo</${tag}></tr></tbody></table>`\n // position is not an allowed CSS property\n const expected = `<table><tbody><tr><${tag} style=\"text-align:center\">foo</${tag}></tr></tbody></table>`\n const sanitized = sanitize(input)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n })\n })\n}\n\nexport function runXssTests() {\n describe('HTML Sanitization - xss (legacy)', () => {\n test('Prevents XSS through onload', () => {\n const sanitized = xss(\n \"<span onload='alert('XSS')'>foo</span>\",\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onload')).toBeNull()\n })\n test('Prevents XSS through onclick', () => {\n const sanitized = xss(\n \"<span onclick='alert('XSS')'>foo</span>\",\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onclick')).toBeNull()\n })\n test('Prevents XSS through href', () => {\n const script = 'javascript:alert(1)'\n const sanitized = xss(`<a href=\"${script}\">foo</a>`, xssOptions)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n // Verify script was removed\n expect(anchor.getAttribute('href')).toEqual('')\n })\n test('Allows valid link href', () => {\n const validHref = 'https://synapse.org'\n const sanitized = xss(`<a href=\"${validHref}\">foo</a>`, xssOptions)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(validHref)\n })\n test('Allows link rel property', () => {\n const href = 'https://synapse.org'\n const rel = 'noopener noreferrer'\n const sanitized = xss(\n `<a href=\"${href}\" rel=\"${rel}\">foo</a>`,\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(href)\n expect(anchor.getAttribute('rel')).toEqual(rel)\n })\n\n describe.each(['td', 'th'])('%s cell text alignment', tag => {\n test(`Allows ${tag} with text-align style`, () => {\n const input = `<table><tbody><tr><${tag} style=\"text-align:center;\">foo</${tag}></tr></tbody></table>`\n const expected = input\n const sanitized = xss(input, xssOptions)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n\n test(`Removes styles other than text-align from ${tag}`, () => {\n // Some other style is applied, which is not allowed (may be a click-jacking attempt!)\n const input = `<table><tbody><tr><${tag} style=\"text-align:center; position: absolute;\">foo</${tag}></tr></tbody></table>`\n // position is not an allowed CSS property\n const expected = `<table><tbody><tr><${tag} style=\"text-align:center;\">foo</${tag}></tr></tbody></table>`\n const sanitized = xss(input, xssOptions)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n })\n })\n}\n"],"mappings":";;;;AAYA,SAAS,EAAU,GAAc;
|
|
1
|
+
{"version":3,"file":"SanitizeHtmlUtils.test-utils.js","names":[],"sources":["../../../src/utils/functions/SanitizeHtmlUtils.test-utils.ts"],"sourcesContent":["/**\n * Shared test factory for SanitizeHtmlUtils.\n * Imported by both the CSR (jsdom) and SSR (node) test files so test cases\n * are defined once and run in both environments.\n *\n * Uses explicit JSDOM for HTML parsing so the helpers work regardless of\n * whether a global `document` is available.\n */\nimport xss from 'xss'\nimport { JSDOM } from 'jsdom'\nimport { sanitize, xssOptions } from './SanitizeHtmlUtils'\n\nfunction parseHTML(html: string) {\n return new JSDOM(html).window.document.documentElement\n}\n\nexport function runDomPurifyTests() {\n describe('HTML Sanitization - DOMPurify', () => {\n test('Prevents XSS through onload', () => {\n const sanitized = sanitize(\"<span onload='alert('XSS')'>foo</span>\")\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onload')).toBeNull()\n })\n test('Prevents XSS through onclick', () => {\n const sanitized = sanitize(\"<span onclick='alert('XSS')'>foo</span>\")\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onclick')).toBeNull()\n })\n test('Prevents XSS through href', () => {\n const script = 'javascript:alert(1)'\n const sanitized = sanitize(`<a href=\"${script}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n // Verify script was removed\n expect(anchor.getAttribute('href')).toBeNull()\n })\n test('Allows valid link href', () => {\n const validHref = 'https://synapse.org'\n const sanitized = sanitize(`<a href=\"${validHref}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(validHref)\n })\n test('Allows link rel property', () => {\n const href = 'https://synapse.org'\n const rel = 'noopener noreferrer'\n const sanitized = sanitize(`<a href=\"${href}\" rel=\"${rel}\">foo</a>`)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(href)\n expect(anchor.getAttribute('rel')).toEqual(rel)\n })\n\n describe.each(['td', 'th'])('%s cell text alignment', tag => {\n test(`Allows ${tag} with text-align style`, () => {\n const input = `<table><tbody><tr><${tag} style=\"text-align:center\">foo</${tag}></tr></tbody></table>`\n const expected = input\n const sanitized = sanitize(input)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n\n test(`Removes styles other than text-align from ${tag}`, () => {\n // Some other style is applied, which is not allowed (may be a click-jacking attempt!)\n const input = `<table><tbody><tr><${tag} style=\"text-align:center; position: absolute;\">foo</${tag}></tr></tbody></table>`\n // position is not an allowed CSS property\n const expected = `<table><tbody><tr><${tag} style=\"text-align:center\">foo</${tag}></tr></tbody></table>`\n const sanitized = sanitize(input)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n })\n })\n}\n\nexport function runXssTests() {\n describe('HTML Sanitization - xss (legacy)', () => {\n test('Prevents XSS through onload', () => {\n const sanitized = xss(\n \"<span onload='alert('XSS')'>foo</span>\",\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onload')).toBeNull()\n })\n test('Prevents XSS through onclick', () => {\n const sanitized = xss(\n \"<span onclick='alert('XSS')'>foo</span>\",\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const span = html.querySelector('span')!\n expect(span).not.toBeNull()\n expect(span.getAttribute('onclick')).toBeNull()\n })\n test('Prevents XSS through href', () => {\n const script = 'javascript:alert(1)'\n const sanitized = xss(`<a href=\"${script}\">foo</a>`, xssOptions)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n // Verify script was removed\n expect(anchor.getAttribute('href')).toEqual('')\n })\n test('Allows valid link href', () => {\n const validHref = 'https://synapse.org'\n const sanitized = xss(`<a href=\"${validHref}\">foo</a>`, xssOptions)\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(validHref)\n })\n test('Allows link rel property', () => {\n const href = 'https://synapse.org'\n const rel = 'noopener noreferrer'\n const sanitized = xss(\n `<a href=\"${href}\" rel=\"${rel}\">foo</a>`,\n xssOptions,\n )\n const html = parseHTML(sanitized)\n const anchor = html.querySelector('a')!\n expect(anchor).not.toBeNull()\n expect(anchor.getAttribute('href')).toEqual(href)\n expect(anchor.getAttribute('rel')).toEqual(rel)\n })\n\n describe.each(['td', 'th'])('%s cell text alignment', tag => {\n test(`Allows ${tag} with text-align style`, () => {\n const input = `<table><tbody><tr><${tag} style=\"text-align:center;\">foo</${tag}></tr></tbody></table>`\n const expected = input\n const sanitized = xss(input, xssOptions)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n\n test(`Removes styles other than text-align from ${tag}`, () => {\n // Some other style is applied, which is not allowed (may be a click-jacking attempt!)\n const input = `<table><tbody><tr><${tag} style=\"text-align:center; position: absolute;\">foo</${tag}></tr></tbody></table>`\n // position is not an allowed CSS property\n const expected = `<table><tbody><tr><${tag} style=\"text-align:center;\">foo</${tag}></tr></tbody></table>`\n const sanitized = xss(input, xssOptions)\n\n // style should be allowed in this case\n expect(sanitized).toEqual(expected)\n })\n })\n })\n}\n"],"mappings":"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"}
|