synapse-react-client 4.0.9 → 4.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. package/dist/SWC.index.d.ts +1 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +2 -1
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/aridhia-queries/aridhiaTokenExchange.js.map +1 -1
  6. package/dist/aridhia-queries/useGetAridhiaRequests.js.map +1 -1
  7. package/dist/assets/icons/CloudWarning.d.ts +5 -0
  8. package/dist/assets/icons/CloudWarning.d.ts.map +1 -0
  9. package/dist/assets/icons/CloudWarning.js +47 -0
  10. package/dist/assets/icons/CloudWarning.js.map +1 -0
  11. package/dist/assets/icons/TasksIcon.d.ts.map +1 -1
  12. package/dist/assets/icons/TasksIcon.js +6 -10
  13. package/dist/assets/icons/TasksIcon.js.map +1 -1
  14. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.d.ts.map +1 -1
  15. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js +69 -63
  16. package/dist/components/AccessRequirementAclEditor/AccessRequirementAclEditor.js.map +1 -1
  17. package/dist/components/AccessRequirementList/AccessApprovalCheckMark.js.map +1 -1
  18. package/dist/components/AccessRequirementList/AccessRequirementList.js.map +1 -1
  19. package/dist/components/AccessRequirementList/AccessRequirementListUtils.js.map +1 -1
  20. package/dist/components/AccessRequirementList/ManagedACTAccessRequirementRequestFlow/DataAccessRequestAccessorsEditor.js.map +1 -1
  21. package/dist/components/AccessRequirementList/RequirementItem/SelfSignAccessRequirementItem.js.map +1 -1
  22. package/dist/components/AccessRequirementRelatedProjectsList/AccessRequirementRelatedProjectsList.js.map +1 -1
  23. package/dist/components/AccessTokenPage/AccessTokenCard/AccessTokenCard.js.map +1 -1
  24. package/dist/components/AcknowledgementsPage/StudyAcknowledgements.js.map +1 -1
  25. package/dist/components/AclEditor/PermissionLevelMenu.js.map +1 -1
  26. package/dist/components/AclEditor/ResourceAccessAndUserGroupHeader.js.map +1 -1
  27. package/dist/components/AclEditor/useSortResourceAccessList.js.map +1 -1
  28. package/dist/components/AclEditor/useUpdateAcl.js.map +1 -1
  29. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  30. package/dist/components/Authentication/AuthenticationMethodSelection.d.ts.map +1 -1
  31. package/dist/components/Authentication/AuthenticationMethodSelection.js +38 -37
  32. package/dist/components/Authentication/AuthenticationMethodSelection.js.map +1 -1
  33. package/dist/components/Authentication/Constants.d.ts +1 -0
  34. package/dist/components/Authentication/Constants.d.ts.map +1 -1
  35. package/dist/components/Authentication/Constants.js +2 -2
  36. package/dist/components/Authentication/Constants.js.map +1 -1
  37. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  38. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  39. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  40. package/dist/components/Authentication/RegenerateBackupCodesWarning.js.map +1 -1
  41. package/dist/components/Authentication/Reset2FAWarning.js.map +1 -1
  42. package/dist/components/Authentication/StandaloneLoginForm.js +1 -1
  43. package/dist/components/Authentication/TwoFactorBackupCodes.js.map +1 -1
  44. package/dist/components/Authentication/TwoFactorEnrollmentForm.d.ts.map +1 -1
  45. package/dist/components/Authentication/TwoFactorEnrollmentForm.js +2 -1
  46. package/dist/components/Authentication/TwoFactorEnrollmentForm.js.map +1 -1
  47. package/dist/components/BasePortalCard/ColorfulPortalCardWithChips/ColorfulPortalCardWithChips.js.map +1 -1
  48. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  49. package/dist/components/CardDeck/CardDeck.Mobile.js.map +1 -1
  50. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  51. package/dist/components/CertificationQuiz/CertificationQuiz.js.map +1 -1
  52. package/dist/components/ChallengeDataDownload/ChallengeDataDownload.js.map +1 -1
  53. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  54. package/dist/components/ChallengeSubmission/ChallengeSubmissionStepper.js.map +1 -1
  55. package/dist/components/ChallengeSubmission/EvaluationQueueCurrentRoundInfo.js.map +1 -1
  56. package/dist/components/ChallengeSubmission/EvaluationQueueList.js.map +1 -1
  57. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.d.ts.map +1 -1
  58. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js +143 -140
  59. package/dist/components/ChallengeSubmission/SubmissionDirectoryList.js.map +1 -1
  60. package/dist/components/ChallengeTeamWizard/ChallengeTeamWizard.js.map +1 -1
  61. package/dist/components/ChallengeTeamWizard/CreateChallengeTeam.js.map +1 -1
  62. package/dist/components/ChangePassword/ChangePassword.js.map +1 -1
  63. package/dist/components/ChangePassword/ChangePasswordWithToken.js.map +1 -1
  64. package/dist/components/ChangePassword/useChangePasswordFormState.js +1 -1
  65. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  66. package/dist/components/CitationPopover/CitationPopoverContent.js.map +1 -1
  67. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  68. package/dist/components/ComponentCollapse.js.map +1 -1
  69. package/dist/components/CookiesNotification/CookiesNotification.js.map +1 -1
  70. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  71. package/dist/components/CreateTableViewWizard/CreateTableViewWizardUtils.js.map +1 -1
  72. package/dist/components/DataGrid/DataGrid.d.ts +0 -1
  73. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  74. package/dist/components/DataGrid/DataGrid.js +72 -72
  75. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  76. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  77. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  78. package/dist/components/DataGrid/DataGridWebSocket.js +9 -8
  79. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  80. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  81. package/dist/components/DataGrid/SynapseGrid.js +326 -268
  82. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  83. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +2 -0
  84. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  85. package/dist/components/DataGrid/columns/AutocompleteColumn.js +124 -67
  86. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  87. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts +2 -1
  88. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.d.ts.map +1 -1
  89. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js +126 -122
  90. package/dist/components/DataGrid/columns/AutocompleteMultipleEnumColumn.js.map +1 -1
  91. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts +58 -0
  92. package/dist/components/DataGrid/columns/useGridAutocompleteState.d.ts.map +1 -0
  93. package/dist/components/DataGrid/columns/useGridAutocompleteState.js +52 -0
  94. package/dist/components/DataGrid/columns/useGridAutocompleteState.js.map +1 -0
  95. package/dist/components/DataGrid/components/ValidationAlert.d.ts +5 -2
  96. package/dist/components/DataGrid/components/ValidationAlert.d.ts.map +1 -1
  97. package/dist/components/DataGrid/components/ValidationAlert.js +429 -24
  98. package/dist/components/DataGrid/components/ValidationAlert.js.map +1 -1
  99. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  100. package/dist/components/DataGrid/hooks/useGetSchemaForGrid.js.map +1 -1
  101. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  102. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  103. package/dist/components/DataGrid/useCRDTModelView.js.map +1 -1
  104. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +7 -0
  105. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  106. package/dist/components/DataGrid/useDataGridWebsocket.js +16 -2
  107. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  108. package/dist/components/DataGrid/useInitializeGridConnection.js.map +1 -1
  109. package/dist/components/DataGrid/useMergeGridWithRecordSet.js.map +1 -1
  110. package/dist/components/DataGrid/useMergeGridWithSource.js.map +1 -1
  111. package/dist/components/DataGrid/useMergeGridWithTable.js.map +1 -1
  112. package/dist/components/DataGrid/utils/DataGridUtils.js.map +1 -1
  113. package/dist/components/DataGrid/utils/applyModelChange.d.ts +1 -1
  114. package/dist/components/DataGrid/utils/applyModelChange.d.ts.map +1 -1
  115. package/dist/components/DataGrid/utils/applyModelChange.js +27 -24
  116. package/dist/components/DataGrid/utils/applyModelChange.js.map +1 -1
  117. package/dist/components/DataGrid/utils/columnFactory.d.ts +8 -0
  118. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  119. package/dist/components/DataGrid/utils/columnFactory.js +47 -44
  120. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  121. package/dist/components/DataGrid/utils/computeReplicaSelectionModel.js.map +1 -1
  122. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  123. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  124. package/dist/components/DataGrid/utils/getCellClassName.js +8 -8
  125. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  126. package/dist/components/DataGrid/utils/getEmptyValue.d.ts +2 -0
  127. package/dist/components/DataGrid/utils/getEmptyValue.d.ts.map +1 -0
  128. package/dist/components/DataGrid/utils/getEmptyValue.js +8 -0
  129. package/dist/components/DataGrid/utils/getEmptyValue.js.map +1 -0
  130. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  131. package/dist/components/DataGrid/utils/modelColsToGrid.d.ts.map +1 -1
  132. package/dist/components/DataGrid/utils/modelColsToGrid.js +2 -1
  133. package/dist/components/DataGrid/utils/modelColsToGrid.js.map +1 -1
  134. package/dist/components/DataGrid/utils/modelRowsToGrid.js.map +1 -1
  135. package/dist/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType.js.map +1 -1
  136. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts +32 -0
  137. package/dist/components/DataGrid/utils/schemaAwarePasteValue.d.ts.map +1 -0
  138. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js +22 -0
  139. package/dist/components/DataGrid/utils/schemaAwarePasteValue.js.map +1 -0
  140. package/dist/components/DataGrid/utils/splitPatch.js.map +1 -1
  141. package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
  142. package/dist/components/DirectDownload/DirectDownload.js.map +1 -1
  143. package/dist/components/DirectDownloadButton.js.map +1 -1
  144. package/dist/components/DownloadCart/CreatePackageV2.js.map +1 -1
  145. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.css +1 -0
  146. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.d.ts.map +1 -1
  147. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +199 -132
  148. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  149. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js +22 -0
  150. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.js.map +1 -0
  151. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.module.scss +170 -0
  152. package/dist/components/DownloadCart/DownloadListActionsRequired.js.map +1 -1
  153. package/dist/components/DownloadCart/DownloadListTable.js.map +1 -1
  154. package/dist/components/DownloadCart/fileNameUtils.js.map +1 -1
  155. package/dist/components/DraggableDialog/DraggableDialog.js.map +1 -1
  156. package/dist/components/DynamicForm/DynamicFormModal.js.map +1 -1
  157. package/dist/components/Ecosystem/TableQueryEcosystem.js.map +1 -1
  158. package/dist/components/EntityAclEditor/EntityAclEditor.d.ts.map +1 -1
  159. package/dist/components/EntityAclEditor/EntityAclEditor.js +103 -103
  160. package/dist/components/EntityAclEditor/EntityAclEditor.js.map +1 -1
  161. package/dist/components/EntityAclEditor/useNotifyNewACLUsers.js.map +1 -1
  162. package/dist/components/EntityBadgeIcons/EntityBadgeIcons.js.map +1 -1
  163. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  164. package/dist/components/EntityDownloadButton/EntityDownloadButton.d.ts.map +1 -1
  165. package/dist/components/EntityDownloadButton/EntityDownloadButton.js +1 -0
  166. package/dist/components/EntityDownloadButton/EntityDownloadButton.js.map +1 -1
  167. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.d.ts.map +1 -1
  168. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +36 -30
  169. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  170. package/dist/components/EntityFinder/EntityFinder.js.map +1 -1
  171. package/dist/components/EntityFinder/VersionSelectionType.js.map +1 -1
  172. package/dist/components/EntityFinder/details/configurations/EntityChildrenDetails.js.map +1 -1
  173. package/dist/components/EntityFinder/details/configurations/FavoritesDetails.js.map +1 -1
  174. package/dist/components/EntityFinder/details/configurations/ProjectListDetails.js.map +1 -1
  175. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  176. package/dist/components/EntityFinder/tree/EntityTree.js.map +1 -1
  177. package/dist/components/EntityFinder/tree/VirtualizedTree.js.map +1 -1
  178. package/dist/components/EntityFinder/useEntitySelection.js.map +1 -1
  179. package/dist/components/EntityForm/EntityForm.js.map +1 -1
  180. package/dist/components/EntityHeaderTable/EntityHeaderTable.js.map +1 -1
  181. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  182. package/dist/components/EntityHeaderTable/useEntityHeaderTableState.js.map +1 -1
  183. package/dist/components/EntitySubjectsSelector/EntitySubjectsSelector.js.map +1 -1
  184. package/dist/components/EntityTreeTable/components/IdColumnHeader.js.map +1 -1
  185. package/dist/components/EntityTreeTable/hooks/useEntityTreeState.js.map +1 -1
  186. package/dist/components/EntityTreeTable/hooks/useTableColumns.js.map +1 -1
  187. package/dist/components/EntityTreeTable/hooks/useTableData.js.map +1 -1
  188. package/dist/components/EntityTreeTable/hooks/useTreeOperationsWithDirectFetch.js.map +1 -1
  189. package/dist/components/EntityUpload/EntityUpload.js.map +1 -1
  190. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.d.ts.map +1 -1
  191. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js +15 -14
  192. package/dist/components/EntityViewScopeEditor/EntityViewMaskEditor.js.map +1 -1
  193. package/dist/components/ExperimentalMode/ExperimentalMode.js.map +1 -1
  194. package/dist/components/ExternalFileHandleLink/ExternalFileHandleLink.js.map +1 -1
  195. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  196. package/dist/components/FeaturedDataTabs/QueryPerFacetPlotsCard.js.map +1 -1
  197. package/dist/components/FeaturedDataTabs/SingleQueryFacetPlotsCards.js.map +1 -1
  198. package/dist/components/FeaturedResearch/FeaturedResearch.js.map +1 -1
  199. package/dist/components/FeaturedToolsList/FeaturedToolsList.js.map +1 -1
  200. package/dist/components/FilePreview/FileHandleContentRenderer.js.map +1 -1
  201. package/dist/components/FilePreview/HtmlPreview/HtmlPreview.js.map +1 -1
  202. package/dist/components/FilePreview/PreviewRendererType.js.map +1 -1
  203. package/dist/components/Forum/DiscussionReply.d.ts +1 -0
  204. package/dist/components/Forum/DiscussionReply.d.ts.map +1 -1
  205. package/dist/components/Forum/DiscussionReply.js +19 -19
  206. package/dist/components/Forum/DiscussionReply.js.map +1 -1
  207. package/dist/components/Forum/DiscussionSearchResult.js.map +1 -1
  208. package/dist/components/Forum/DiscussionThread.d.ts +1 -0
  209. package/dist/components/Forum/DiscussionThread.d.ts.map +1 -1
  210. package/dist/components/Forum/DiscussionThread.js +73 -72
  211. package/dist/components/Forum/DiscussionThread.js.map +1 -1
  212. package/dist/components/Forum/ForumTable.js.map +1 -1
  213. package/dist/components/Forum/ForumThreadEditor.js.map +1 -1
  214. package/dist/components/FullTextSearch/FullTextSearchUtils.js.map +1 -1
  215. package/dist/components/GenericCard/BioregistryRules.d.ts.map +1 -1
  216. package/dist/components/GenericCard/BioregistryRules.js +7 -3
  217. package/dist/components/GenericCard/BioregistryRules.js.map +1 -1
  218. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  219. package/dist/components/GenericCard/GenericCard.js +12 -7
  220. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  221. package/dist/components/GenericCard/Linkify.js.map +1 -1
  222. package/dist/components/GenericCard/SynapseCardLabel.js.map +1 -1
  223. package/dist/components/GenericCard/TableRowGenericCard.js +105 -105
  224. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  225. package/dist/components/Goals/Goals.Mobile.js.map +1 -1
  226. package/dist/components/Goals/Goals.js.map +1 -1
  227. package/dist/components/GoalsV2/GoalsV2.Mobile.js.map +1 -1
  228. package/dist/components/GoalsV2/GoalsV2.js.map +1 -1
  229. package/dist/components/GoalsV3/GoalsV3.Mobile.js.map +1 -1
  230. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  231. package/dist/components/GoogleMap/SynapseUserMarker.js.map +1 -1
  232. package/dist/components/HasAccess/AccessIcon.js.map +1 -1
  233. package/dist/components/HasAccess/useHasAccess.js.map +1 -1
  234. package/dist/components/HeaderCard/HeaderCardV2.js.map +1 -1
  235. package/dist/components/HeaderCard.d.ts +6 -1
  236. package/dist/components/HeaderCard.d.ts.map +1 -1
  237. package/dist/components/HeaderCard.js +107 -76
  238. package/dist/components/HeaderCard.js.map +1 -1
  239. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  240. package/dist/components/IconList.js.map +1 -1
  241. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  242. package/dist/components/IconSvg/IconSvg.js +2 -1
  243. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  244. package/dist/components/ImageCardGridWithLinks/ImageCardGridWithLinks.js.map +1 -1
  245. package/dist/components/ImageFromSynapseTable.js.map +1 -1
  246. package/dist/components/JSONArrayEditor/useParseCsv.js.map +1 -1
  247. package/dist/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.js.map +1 -1
  248. package/dist/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.js.map +1 -1
  249. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  250. package/dist/components/JsonSchemaForm/templates/FieldTemplate.js.map +1 -1
  251. package/dist/components/JsonSchemaForm/templates/RJSFInputLabel.js.map +1 -1
  252. package/dist/components/Markdown/MarkdownGithub.js.map +1 -1
  253. package/dist/components/Markdown/MarkdownSynapse.js.map +1 -1
  254. package/dist/components/Markdown/MarkdownUtils.js.map +1 -1
  255. package/dist/components/Markdown/SynapseWikiContext.js.map +1 -1
  256. package/dist/components/Markdown/UserMentionModal.js.map +1 -1
  257. package/dist/components/Markdown/widget/MarkdownProvenanceGraph.js.map +1 -1
  258. package/dist/components/MissingQueryResultsWarning/MissingQueryResultsWarning.js.map +1 -1
  259. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  260. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.d.ts.map +1 -1
  261. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js +45 -39
  262. package/dist/components/OAuthClientAclEditor/OAuthClientAclEditor.js.map +1 -1
  263. package/dist/components/OAuthClientManagement/OAuthManagement.js.map +1 -1
  264. package/dist/components/PageProgress/PageProgress.js.map +1 -1
  265. package/dist/components/Plot/DotPlot.js.map +1 -1
  266. package/dist/components/Plot/Plot.js.map +1 -1
  267. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  268. package/dist/components/Plot/ThemesPlot.js.map +1 -1
  269. package/dist/components/Plot/UpsetPlot.js.map +1 -1
  270. package/dist/components/PortalAclEditor/PortalAclEditor.d.ts.map +1 -1
  271. package/dist/components/PortalAclEditor/PortalAclEditor.js +43 -41
  272. package/dist/components/PortalAclEditor/PortalAclEditor.js.map +1 -1
  273. package/dist/components/PortalFeaturedPartners/PortalFeaturedPartners.js.map +1 -1
  274. package/dist/components/PortalList/CreatePortalModal.js.map +1 -1
  275. package/dist/components/ProgrammaticInstructionsModal/ProgrammaticInstructionsModal.js.map +1 -1
  276. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  277. package/dist/components/Programs/Programs.Mobile.js.map +1 -1
  278. package/dist/components/Programs/Programs.js.map +1 -1
  279. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  280. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  281. package/dist/components/ProvenanceGraph/ProvenanceGraphUtils.js.map +1 -1
  282. package/dist/components/ProvenanceGraph/ProvenanceUtils.js.map +1 -1
  283. package/dist/components/QueryCount/QueryCount.js.map +1 -1
  284. package/dist/components/QueryCountButton/QueryCountButton.js.map +1 -1
  285. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  286. package/dist/components/QueryWrapper/QueryWrapper.js.map +1 -1
  287. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  288. package/dist/components/QueryWrapper/TableRowSelectionState.js.map +1 -1
  289. package/dist/components/QueryWrapper/generateEncodedPathAndQueryForSelectedFacetURL.js.map +1 -1
  290. package/dist/components/QueryWrapper/useGetQueryMetadata.js.map +1 -1
  291. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  292. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  293. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  294. package/dist/components/RecentPublicationsGrid/RecentPublicationsGrid.js.map +1 -1
  295. package/dist/components/ReleaseCard/ReleaseCardUtils.js.map +1 -1
  296. package/dist/components/ResizableContainer/hooks/useResizable.js.map +1 -1
  297. package/dist/components/Resources/Resources.Mobile.js.map +1 -1
  298. package/dist/components/Resources/Resources.js.map +1 -1
  299. package/dist/components/RowDataTable/RowDataTableWithQuery.js.map +1 -1
  300. package/dist/components/SageResourcesPopover/SageResourcesPopover.js.map +1 -1
  301. package/dist/components/SchemaDrivenAnnotationEditor/AnnotationEditorUtils.js.map +1 -1
  302. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  303. package/dist/components/SetManagedAccessRequirementFields/SetManagedAccessRequirementFields.js.map +1 -1
  304. package/dist/components/SmartLink/SmartButton.js.map +1 -1
  305. package/dist/components/SmartLink/SmartLink.js.map +1 -1
  306. package/dist/components/SourceAppImage.js.map +1 -1
  307. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js.map +1 -1
  308. package/dist/components/StatisticsPlot.js.map +1 -1
  309. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  310. package/dist/components/SubsectionRowRenderer/SubsectionRowRenderer.js.map +1 -1
  311. package/dist/components/SustainabilityScorecard/SustainabilityScorecard.js.map +1 -1
  312. package/dist/components/SynapseChat/GridAgentChat.js.map +1 -1
  313. package/dist/components/SynapseChat/SynapseChatInteraction.js.map +1 -1
  314. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  315. package/dist/components/SynapseChat/extractMessageFromTraceEvent.js.map +1 -1
  316. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  317. package/dist/components/SynapseForm/SummaryTable.js.map +1 -1
  318. package/dist/components/SynapseForm/SynapseForm.js +4 -2
  319. package/dist/components/SynapseForm/SynapseForm.js.map +1 -1
  320. package/dist/components/SynapseForm/SynapseFormWrapper.js.map +1 -1
  321. package/dist/components/SynapseHomepageV2/SynapseByTheNumbersItem.js.map +1 -1
  322. package/dist/components/SynapseHomepageV2/SynapseFeatureItem.js.map +1 -1
  323. package/dist/components/SynapseHomepageV2/SynapseHomepageChatSearch.js.map +1 -1
  324. package/dist/components/SynapseHomepageV2/SynapseHomepageSearch.js.map +1 -1
  325. package/dist/components/SynapseHomepageV2/SynapseInActionItem.js.map +1 -1
  326. package/dist/components/SynapseHomepageV2/SynapsePlans.js.map +1 -1
  327. package/dist/components/SynapseHomepageV2/SynapseTrendingProjects.js.map +1 -1
  328. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts +8 -7
  329. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.d.ts.map +1 -1
  330. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js +173 -164
  331. package/dist/components/SynapseNavDrawer/SynapseNavDrawer.js.map +1 -1
  332. package/dist/components/SynapsePortalBanners/SynapsePortalBanners.js.map +1 -1
  333. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanel.js.map +1 -1
  334. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  335. package/dist/components/SynapseSearchPageResults/SynapseSearchPageResults.js.map +1 -1
  336. package/dist/components/SynapseTable/EntityIDColumnCopyIcon.js.map +1 -1
  337. package/dist/components/SynapseTable/NoContentPlaceholderType.js.map +1 -1
  338. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  339. package/dist/components/SynapseTable/SynapseTableCell/SynapseTableCell.js.map +1 -1
  340. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  341. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  342. package/dist/components/SynapseTable/table-top/ColumnSelection.js.map +1 -1
  343. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  344. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  345. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  346. package/dist/components/TableColumnSchemaEditor/ColumnModelFormFields/DefaultValueField.js.map +1 -1
  347. package/dist/components/TableColumnSchemaEditor/ImportTableColumnsButton.js.map +1 -1
  348. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +1 -1
  349. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  350. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  351. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  352. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.js.map +1 -1
  353. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  354. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  355. package/dist/components/TanStackTable/ColumnHeader.d.ts +1 -0
  356. package/dist/components/TanStackTable/ColumnHeader.d.ts.map +1 -1
  357. package/dist/components/TanStackTable/ColumnHeader.js +8 -8
  358. package/dist/components/TanStackTable/ColumnHeader.js.map +1 -1
  359. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  360. package/dist/components/TanStackTable/TableBody.js.map +1 -1
  361. package/dist/components/TeamSubjectsSelector/TeamSubjectsSelector.js.map +1 -1
  362. package/dist/components/TextField/TextField.js.map +1 -1
  363. package/dist/components/TimelinePlot/TimelinePhase.js.map +1 -1
  364. package/dist/components/TimelinePlot/TimelinePlot.js.map +1 -1
  365. package/dist/components/TimelinePlot/TimelinePlotSpeciesSelector.js.map +1 -1
  366. package/dist/components/UserCard/Avatar.js.map +1 -1
  367. package/dist/components/UserCardList/UserCardList.js.map +1 -1
  368. package/dist/components/UserCardList/UserCardListGroups/UserCardListGroups.Mobile.js.map +1 -1
  369. package/dist/components/UserCardList/UserCardListRotate.js.map +1 -1
  370. package/dist/components/UserOrTeamBadge/useUserOrTeam.js.map +1 -1
  371. package/dist/components/UserProfileLinks/UserProjects.js.map +1 -1
  372. package/dist/components/UserSearchBox/UserSearchBox.js.map +1 -1
  373. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  374. package/dist/components/WikiMarkdownEditor/WikiMarkdownEditor.js.map +1 -1
  375. package/dist/components/WikiMarkdownEditorButton/WikiMarkdownEditorButton.js.map +1 -1
  376. package/dist/components/dataaccess/AccessApprovalsTable.js.map +1 -1
  377. package/dist/components/dataaccess/AccessRequestSubmissionTable.js.map +1 -1
  378. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.d.ts.map +1 -1
  379. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js +157 -148
  380. package/dist/components/dataaccess/SubmissionPage/SubmissionPage.js.map +1 -1
  381. package/dist/components/dataaccess/UseAccessRequirementTable.js.map +1 -1
  382. package/dist/components/dataaccess/UserAccessRequestHistory/UserAccessRequestHistoryTable.js.map +1 -1
  383. package/dist/components/doi/CreateOrUpdateDoiModal.d.ts.map +1 -1
  384. package/dist/components/doi/CreateOrUpdateDoiModal.js +20 -19
  385. package/dist/components/doi/CreateOrUpdateDoiModal.js.map +1 -1
  386. package/dist/components/entity/page/CreatedByModifiedBy.js.map +1 -1
  387. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  388. package/dist/components/entity/page/title_bar/useDataCiteUsage.js.map +1 -1
  389. package/dist/components/entity/page/title_bar/useGetMentions.js.map +1 -1
  390. package/dist/components/error/ErrorPage.js.map +1 -1
  391. package/dist/components/favorites/FavoritesPage.js.map +1 -1
  392. package/dist/components/file/upload/BasicFileHandleUpload.js.map +1 -1
  393. package/dist/components/layout/SWCHeader.d.ts +9 -0
  394. package/dist/components/layout/SWCHeader.d.ts.map +1 -0
  395. package/dist/components/layout/SWCHeader.js +19 -0
  396. package/dist/components/layout/SWCHeader.js.map +1 -0
  397. package/dist/components/layout/SWCPageLayout.d.ts +9 -0
  398. package/dist/components/layout/SWCPageLayout.d.ts.map +1 -0
  399. package/dist/components/layout/SWCPageLayout.js +14 -0
  400. package/dist/components/layout/SWCPageLayout.js.map +1 -0
  401. package/dist/components/menu/ComplexMenu.js.map +1 -1
  402. package/dist/components/row_renderers/utils/ChipContainer.js.map +1 -1
  403. package/dist/components/styled/StyledPopover.js.map +1 -1
  404. package/dist/components/table/CsvPreview/CsvPreview.js +2 -1
  405. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  406. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  407. package/dist/components/trash/TrashCanList.js.map +1 -1
  408. package/dist/components/widgets/FileHandleLink.js.map +1 -1
  409. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  410. package/dist/components/widgets/SynapseVideo.js.map +1 -1
  411. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  412. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  413. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js.map +1 -1
  414. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  415. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js.map +1 -1
  416. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  417. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  418. package/dist/components/widgets/query-filter/RangeFacetFilter.js.map +1 -1
  419. package/dist/components/widgets/query-filter/RangeFacetFilterUI.js.map +1 -1
  420. package/dist/features/curator/GridPage/components/GridPageTitle.d.ts.map +1 -1
  421. package/dist/features/curator/GridPage/components/GridPageTitle.js +23 -30
  422. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  423. package/dist/features/curator/dashboard/CuratorDashboard.d.ts +2 -0
  424. package/dist/features/curator/dashboard/CuratorDashboard.d.ts.map +1 -0
  425. package/dist/features/curator/dashboard/CuratorDashboard.js +45 -0
  426. package/dist/features/curator/dashboard/CuratorDashboard.js.map +1 -0
  427. package/dist/features/curator/dashboard/components/CurationTaskCard.css +1 -0
  428. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts +9 -0
  429. package/dist/features/curator/dashboard/components/CurationTaskCard.d.ts.map +1 -0
  430. package/dist/features/curator/dashboard/components/CurationTaskCard.js +106 -0
  431. package/dist/features/curator/dashboard/components/CurationTaskCard.js.map +1 -0
  432. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js +12 -0
  433. package/dist/features/curator/dashboard/components/CurationTaskCard.module.js.map +1 -0
  434. package/dist/features/curator/dashboard/components/CurationTaskCard.module.scss +52 -0
  435. package/dist/features/curator/dashboard/components/NextStepButton.css +1 -0
  436. package/dist/features/curator/dashboard/components/NextStepButton.d.ts +14 -0
  437. package/dist/features/curator/dashboard/components/NextStepButton.d.ts.map +1 -0
  438. package/dist/features/curator/dashboard/components/NextStepButton.js +35 -0
  439. package/dist/features/curator/dashboard/components/NextStepButton.js.map +1 -0
  440. package/dist/features/curator/dashboard/components/NextStepButton.module.js +11 -0
  441. package/dist/features/curator/dashboard/components/NextStepButton.module.js.map +1 -0
  442. package/dist/features/curator/dashboard/components/NextStepButton.module.scss +57 -0
  443. package/dist/features/curator/dashboard/components/UserOrTeamChip.css +1 -1
  444. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js +1 -1
  445. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.js.map +1 -1
  446. package/dist/features/curator/dashboard/components/UserOrTeamChip.module.scss +5 -5
  447. package/dist/features/curator/dashboard/components/shared.css +1 -0
  448. package/dist/features/curator/dashboard/components/shared.module.js +5 -0
  449. package/dist/features/curator/dashboard/components/shared.module.js.map +1 -0
  450. package/dist/features/curator/dashboard/components/shared.module.scss +8 -0
  451. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +0 -2
  452. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  453. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +16 -34
  454. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  455. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -1
  456. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +1 -1
  457. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -1
  458. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  459. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  460. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -1
  461. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +1 -1
  462. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  463. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts +10 -0
  464. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.d.ts.map +1 -0
  465. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js +37 -0
  466. package/dist/features/entity/metadata-task/hooks/useOpenCuratorButton.js.map +1 -0
  467. package/dist/features/entity/metadata-task/utils/constants.d.ts +5 -0
  468. package/dist/features/entity/metadata-task/utils/constants.d.ts.map +1 -0
  469. package/dist/features/entity/metadata-task/utils/constants.js +6 -0
  470. package/dist/features/entity/metadata-task/utils/constants.js.map +1 -0
  471. package/dist/mocks/challenge/mockChallenge.js.map +1 -1
  472. package/dist/mocks/entity/mockDataset.js.map +1 -1
  473. package/dist/mocks/entity/mockDatasetCollection.js.map +1 -1
  474. package/dist/mocks/entity/mockFileEntity.js.map +1 -1
  475. package/dist/mocks/entity/mockFileView.js.map +1 -1
  476. package/dist/mocks/entity/mockGeneratedEntityData.js.map +1 -1
  477. package/dist/mocks/entity/mockProject.js.map +1 -1
  478. package/dist/mocks/entity/mockProjectView.js.map +1 -1
  479. package/dist/mocks/entity/mockRootEntity.js.map +1 -1
  480. package/dist/mocks/entity/mockTableEntity.js.map +1 -1
  481. package/dist/mocks/mockWiki.js.map +1 -1
  482. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  483. package/dist/mocks/msw/handlers/challengeHandlers.js.map +1 -1
  484. package/dist/mocks/msw/handlers/changePasswordHandlers.js.map +1 -1
  485. package/dist/mocks/msw/handlers/discussionHandlers.js.map +1 -1
  486. package/dist/mocks/msw/handlers/entityHandlers.js.map +1 -1
  487. package/dist/mocks/msw/handlers/fileHandlers.js.map +1 -1
  488. package/dist/mocks/msw/handlers/gridHandlers.js.map +1 -1
  489. package/dist/mocks/msw/handlers/personalAccessTokenHandlers.js.map +1 -1
  490. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  491. package/dist/mocks/msw/handlers/teamHandlers.js.map +1 -1
  492. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  493. package/dist/mocks/msw/handlers/wikiHandlers.js.map +1 -1
  494. package/dist/mocks/provenance/mockActivity.js.map +1 -1
  495. package/dist/mocks/query/mockReleaseCardsTableQueryResultBundle.js.map +1 -1
  496. package/dist/ror-client/index.js.map +1 -1
  497. package/dist/style/components/_cards.scss +4 -0
  498. package/dist/style/components/_data-grid-extra.css +1 -1
  499. package/dist/style/components/_data-grid-extra.scss +2 -0
  500. package/dist/style/main.css +1 -1
  501. package/dist/synapse-client/HttpClient.js.map +1 -1
  502. package/dist/synapse-client/SynapseClient.js.map +1 -1
  503. package/dist/synapse-queries/KeyFactory.d.ts +1 -0
  504. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  505. package/dist/synapse-queries/KeyFactory.js +3 -0
  506. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  507. package/dist/synapse-queries/QueryMatching.test-utils.js.map +1 -1
  508. package/dist/synapse-queries/auth/useTwoFactorEnrollment.js.map +1 -1
  509. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +1 -1
  510. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  511. package/dist/synapse-queries/curation/task/useCurationTask.js +1 -1
  512. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  513. package/dist/synapse-queries/dataaccess/useRestrictionInformation.js.map +1 -1
  514. package/dist/synapse-queries/doi/useDOI.js.map +1 -1
  515. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  516. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  517. package/dist/synapse-queries/entity/useEntityBundle.js.map +1 -1
  518. package/dist/synapse-queries/entity/useExportTableQueryToAnalysisPlatform.js.map +1 -1
  519. package/dist/synapse-queries/entity/useExportToTerra.js.map +1 -1
  520. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  521. package/dist/synapse-queries/entity/useSchema.js.map +1 -1
  522. package/dist/synapse-queries/file/UploadToS3.js.map +1 -1
  523. package/dist/synapse-queries/file/useDirectUploadToS3.js.map +1 -1
  524. package/dist/synapse-queries/file/useFiles.js.map +1 -1
  525. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  526. package/dist/synapse-queries/forum/useThread.d.ts +1 -0
  527. package/dist/synapse-queries/forum/useThread.d.ts.map +1 -1
  528. package/dist/synapse-queries/forum/useThread.js +19 -12
  529. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  530. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  531. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  532. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  533. package/dist/synapse-queries/grid/useExportGrid.js.map +1 -1
  534. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  535. package/dist/synapse-queries/grid/useImportCsvIntoGrid.js.map +1 -1
  536. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  537. package/dist/synapse-queries/table/useGetCsvPreview.js.map +1 -1
  538. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  539. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  540. package/dist/synapse-queries/user/useGetUserChallenges.js.map +1 -1
  541. package/dist/synapse-queries/user/useUserBundle.js.map +1 -1
  542. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  543. package/dist/testutils/ReactQueryMockUtils.js.map +1 -1
  544. package/dist/theme/ThemeProvider.js.map +1 -1
  545. package/dist/tsconfig.build.tsbuildinfo +1 -1
  546. package/dist/utils/APIConstants.d.ts +1 -0
  547. package/dist/utils/APIConstants.d.ts.map +1 -1
  548. package/dist/utils/APIConstants.js +2 -2
  549. package/dist/utils/APIConstants.js.map +1 -1
  550. package/dist/utils/AppUtils/session/ApplicationSessionManager.d.ts.map +1 -1
  551. package/dist/utils/AppUtils/session/ApplicationSessionManager.js +7 -4
  552. package/dist/utils/AppUtils/session/ApplicationSessionManager.js.map +1 -1
  553. package/dist/utils/AppUtils/session/SynapseSessionManager.js.map +1 -1
  554. package/dist/utils/AppUtils/session/useSessionManager.js.map +1 -1
  555. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  556. package/dist/utils/challenge/evaluation/EvaluationUtils.js.map +1 -1
  557. package/dist/utils/context/SynapseContext.js.map +1 -1
  558. package/dist/utils/functions/AccessControlListUtils.d.ts +4 -0
  559. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  560. package/dist/utils/functions/AccessControlListUtils.js +12 -1
  561. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  562. package/dist/utils/functions/EntityTypeUtils.d.ts.map +1 -1
  563. package/dist/utils/functions/EntityTypeUtils.js +15 -4
  564. package/dist/utils/functions/EntityTypeUtils.js.map +1 -1
  565. package/dist/utils/functions/GridApiUtils.js.map +1 -1
  566. package/dist/utils/functions/QueryFilterUtils.js.map +1 -1
  567. package/dist/utils/functions/RealmUtils.d.ts +4 -0
  568. package/dist/utils/functions/RealmUtils.d.ts.map +1 -1
  569. package/dist/utils/functions/RealmUtils.js +9 -3
  570. package/dist/utils/functions/RealmUtils.js.map +1 -1
  571. package/dist/utils/functions/SanitizeHtmlUtils.js.map +1 -1
  572. package/dist/utils/functions/SanitizeHtmlUtils.test-utils.js.map +1 -1
  573. package/dist/utils/functions/SqlFunctions.js.map +1 -1
  574. package/dist/utils/functions/StringUtils.js.map +1 -1
  575. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  576. package/dist/utils/functions/getDataFromFromStorage.js.map +1 -1
  577. package/dist/utils/functions/getEndpoint.js.map +1 -1
  578. package/dist/utils/functions/getUserData.js.map +1 -1
  579. package/dist/utils/functions/queryUtils.js.map +1 -1
  580. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  581. package/dist/utils/hooks/useConfirmItems.js.map +1 -1
  582. package/dist/utils/hooks/useCookiePreferences.js.map +1 -1
  583. package/dist/utils/hooks/useCreateShortUrl.js.map +1 -1
  584. package/dist/utils/hooks/useDetectSSOCode.js.map +1 -1
  585. package/dist/utils/hooks/useDirectDownloadHandler.js.map +1 -1
  586. package/dist/utils/hooks/useGetGoalData.js.map +1 -1
  587. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  588. package/dist/utils/hooks/useImageUrlUtils.js.map +1 -1
  589. package/dist/utils/hooks/useImmutableTableQuery/useImmutableTableQuery.js.map +1 -1
  590. package/dist/utils/hooks/useImmutableTableQuery/useTableQueryReducer.js.map +1 -1
  591. package/dist/utils/hooks/useIsBot.js.map +1 -1
  592. package/dist/utils/hooks/useListState.js.map +1 -1
  593. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  594. package/dist/utils/hooks/useLogin.js +53 -52
  595. package/dist/utils/hooks/useLogin.js.map +1 -1
  596. package/dist/utils/hooks/useMutuallyExclusiveState.js.map +1 -1
  597. package/dist/utils/hooks/useOverlay.js.map +1 -1
  598. package/dist/utils/hooks/usePreFetchResource.js.map +1 -1
  599. package/dist/utils/hooks/useQuerySearchParam.js.map +1 -1
  600. package/dist/utils/hooks/useScrollFadeTransition.js.map +1 -1
  601. package/dist/utils/hooks/useSet.js.map +1 -1
  602. package/dist/utils/hooks/useSourceAppConfigs.js.map +1 -1
  603. package/dist/utils/hooks/useTableImageUrl.js.map +1 -1
  604. package/dist/utils/hooks/useUploadFileEntity/useCreatePathsAndGetParentId.js.map +1 -1
  605. package/dist/utils/hooks/useUploadFileEntity/useLinkFileEntityToURL.js.map +1 -1
  606. package/dist/utils/hooks/useUploadFileEntity/usePrepareFileEntityUpload.js.map +1 -1
  607. package/dist/utils/hooks/useUploadFileEntity/useTrackFileUploads.js.map +1 -1
  608. package/dist/utils/hooks/useUploadFileEntity/useUploadFileEntities.js.map +1 -1
  609. package/dist/utils/hooks/useUploadFileEntity/useUploadFiles.js.map +1 -1
  610. package/dist/utils/hooks/useUploadFileEntity/willUploadsExceedStorageLimit.js.map +1 -1
  611. package/dist/utils/html/TargetEnum.js.map +1 -1
  612. package/dist/utils/jsonschema/SchemaAnnotationUtils.js.map +1 -1
  613. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"IconSvg.js","names":[],"sources":["../../../src/components/IconSvg/IconSvg.tsx"],"sourcesContent":["import { GoogleIcon24 } from '@/assets/GoogleIcon24'\nimport { ReactComponent as AccessPending } from '@/assets/icons/AccessPending.svg'\nimport { ReactComponent as AccessPendingCloud } from '@/assets/icons/AccessPendingCloud.svg'\nimport AwardScroll from '@/assets/icons/AwardScroll'\nimport Baseline from '@/assets/icons/Baseline'\nimport ClappingHands from '@/assets/icons/ClappingHands'\nimport CreateVersion from '@/assets/icons/CreateVersion'\nimport FileWithShield from '@/assets/icons/FileWithShield'\nimport MultiFile from '@/assets/icons/MultiFile'\nimport UnpackagableFile from '@/assets/icons/UnpackagableFile'\nimport HandWithMoney from '@/assets/icons/HandWithMoney'\nimport { ORCIDIcon } from '@/assets/icons/ORCIDIcon'\nimport OpenBook from '@/assets/icons/OpenBook'\nimport Podium from '@/assets/icons/Podium'\nimport RosetteRibbon from '@/assets/icons/RosetteRibbon'\nimport StarTrophy from '@/assets/icons/StarTrophy'\nimport { TasksIcon } from '@/assets/icons/TasksIcon'\nimport ThreeStars from '@/assets/icons/ThreeStars'\nimport AccessManagement from '@/assets/mui_components/AccessManagement'\nimport AccountCertified from '@/assets/mui_components/AccountCertified'\nimport AccountRegistered from '@/assets/mui_components/AccountRegistered'\nimport AccountValidated from '@/assets/mui_components/AccountValidated'\nimport ActionKey from '@/assets/mui_components/ActionKey'\nimport BioChemicalPhysical from '@/assets/mui_components/BioChemicalPhysical'\nimport Chromatin from '@/assets/mui_components/Chromatin'\nimport Clinical from '@/assets/mui_components/Clinical'\nimport ComputationalTool from '@/assets/mui_components/ComputationalTool'\nimport Data from '@/assets/mui_components/Data'\nimport DataLocked from '@/assets/mui_components/DataLocked'\nimport DataReuse from '@/assets/mui_components/DataReuse'\nimport Dataset from '@/assets/mui_components/Dataset'\nimport DatasetCollection from '@/assets/mui_components/DatasetCollection'\nimport Docker from '@/assets/mui_components/Docker'\nimport GeneExpression from '@/assets/mui_components/GeneExpression'\nimport GeneVariants from '@/assets/mui_components/GeneVariants'\nimport HelpChatBubble from '@/assets/mui_components/HelpChatBubble'\nimport Imaging from '@/assets/mui_components/Imaging'\nimport InSilicoModel from '@/assets/mui_components/InSilicoModel'\nimport Kinomics from '@/assets/mui_components/Kinomics'\nimport LineGraph from '@/assets/mui_components/LineGraph'\nimport ModelSystem from '@/assets/mui_components/ModelSystem'\nimport Other from '@/assets/mui_components/Other'\nimport PackagableFile from '@/assets/mui_components/PackagableFile'\nimport Proteomics from '@/assets/mui_components/Proteomics'\nimport Rat from '@/assets/mui_components/Rat'\nimport SpatialProfiling from '@/assets/mui_components/SpatialProfiling'\nimport {\n AccessTimeTwoTone,\n AddBoxOutlined,\n AddCircleOutline,\n AddCircleTwoTone,\n AddShoppingCart,\n AddTwoTone,\n AlternateEmail,\n ArrowBack,\n ArrowDropDownTwoTone,\n ArrowDropUpTwoTone,\n ArrowForward,\n ArticleTwoTone,\n AssessmentTwoTone,\n AssignmentOutlined,\n AssignmentTurnedInTwoTone,\n Block,\n Cached,\n ChatTwoTone,\n Check,\n CheckCircleTwoTone,\n ChevronLeft,\n ChevronRight,\n Clear,\n CloseTwoTone,\n Code,\n ContentCopyTwoTone,\n CreateNewFolderTwoTone,\n DashboardTwoTone,\n DeleteSweepTwoTone,\n DeleteTwoTone,\n EditTwoTone,\n ErrorOutlined,\n ExpandLess,\n ExpandMore,\n FactCheckTwoTone,\n FilterAltTwoTone,\n FlagTwoTone,\n FolderTwoTone,\n FormatBold,\n FormatItalic,\n GetAppTwoTone,\n GitHub,\n Group,\n HelpOutlined,\n HelpOutlineTwoTone,\n HistoryTwoTone,\n Image,\n IndeterminateCheckBoxOutlined,\n InfoOutlined,\n InsertDriveFileOutlined,\n InsertDriveFileTwoTone,\n LabelTwoTone,\n LanguageTwoTone,\n LayersTwoTone,\n LinkOffTwoTone,\n LinkTwoTone,\n ListTwoTone,\n LockOpenTwoTone,\n LockTwoTone,\n Login,\n MailOutlineTwoTone,\n MoreVertTwoTone,\n OpenInFull,\n OpenInNewTwoTone,\n PeopleTwoTone,\n PhoneTwoTone,\n PhotoCameraOutlined,\n PublicTwoTone,\n PushPinTwoTone,\n QuestionAnswerTwoTone,\n RadioButtonUncheckedTwoTone,\n RemoveCircleTwoTone,\n ReplyTwoTone,\n ReportProblemOutlined,\n RestoreFromTrashTwoTone,\n SearchOutlined,\n SearchTwoTone,\n ShareTwoTone,\n ShoppingCartOutlined,\n Sort,\n Star,\n StarOutline,\n StarTwoTone,\n StrikethroughS,\n Subscript,\n Superscript,\n SyncTwoTone,\n TableChartTwoTone,\n TableRows,\n TableViewTwoTone,\n Title,\n UploadTwoTone,\n ViewAgendaTwoTone,\n ViewColumnTwoTone,\n VisibilityOffTwoTone,\n VisibilityTwoTone,\n VpnKeyTwoTone,\n WarningTwoTone,\n WatchLater,\n} from '@mui/icons-material'\nimport { Tooltip } from '@mui/material'\nimport { SvgIconProps } from '@mui/material/SvgIcon'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { ReactNode } from 'react'\n\nexport const IconStrings = [\n 'accessOpen',\n 'accessPending',\n 'accessPendingCloud',\n 'accessClosed',\n 'actionKey',\n 'arrowBack',\n 'arrowForward',\n 'arrowDropUp',\n 'arrowDropDown',\n 'article',\n 'cards',\n 'check',\n 'clear',\n 'cart',\n 'clock',\n 'code',\n 'columns',\n 'openInNewWindow',\n 'dashboard',\n 'delete',\n 'deleteSweep',\n 'filter',\n 'addToCart',\n 'addCircleOutline',\n 'addCircleTwoTone',\n 'reload',\n 'team',\n 'photoCamera',\n 'info',\n 'favTwoTone',\n 'favOutline',\n 'fav',\n 'peopleTwoTone',\n 'challengesTwoTone',\n 'download',\n 'searchOutlined',\n 'search',\n 'history',\n 'time',\n 'login',\n 'helpChatBubble',\n 'helpOutlined',\n 'helpOutlineTwoTone',\n 'expandLess',\n 'expandMore',\n 'rat',\n 'chromatin',\n 'clinical',\n 'contentCopy',\n 'data',\n 'dataLocked',\n 'geneExpression',\n 'geneVariants',\n 'github',\n 'imaging',\n 'inSilicoModel',\n 'modelSystem',\n 'bioChemicalPhysical',\n 'computationalTool',\n 'spatialProfiling',\n 'dataReuse',\n 'lineGraph',\n 'kinomics',\n 'proteomics',\n 'packagableFile',\n 'unpackagableFile',\n 'other',\n 'wiki',\n 'file',\n 'fileOutlined',\n 'folder',\n 'link',\n 'linkOff',\n 'table',\n 'tableRows',\n 'share',\n 'public',\n 'people',\n 'entityview',\n 'submissionview',\n 'challenge',\n 'discussion',\n 'dataset',\n 'datasetcollection',\n 'docker',\n 'accountCertified',\n 'accountRegistered',\n 'accountValidated',\n 'warningOutlined',\n 'removeCircle',\n 'replyTwoTone',\n 'chatTwoTone',\n 'accessManagement',\n 'chevronRight',\n 'chevronLeft',\n 'database',\n 'close',\n 'cross',\n 'verticalEllipsis',\n 'sync',\n 'clipboard',\n 'clipboardCheck',\n 'add',\n 'warning',\n 'circle',\n 'block',\n 'checkCircle',\n 'errorOutlined',\n 'phone',\n 'pushpin',\n 'addBoxOutline',\n 'minusBoxOutline',\n 'italic',\n 'bold',\n 'title',\n 'visibility',\n 'visibilityOff',\n 'strikethrough',\n 'subscript',\n 'superscript',\n 'latex',\n 'image',\n 'edit',\n 'tag',\n 'restore',\n 'label',\n 'upload',\n 'flag',\n 'newFolder',\n 'createVersion',\n 'email',\n 'addConditions',\n 'sortUp',\n 'sortDown',\n 'orcid',\n 'tasks',\n 'google24',\n 'openInFull',\n 'tableview',\n 'fileWithShield',\n 'baseline',\n 'rosetteRibbon',\n 'starTrophy',\n 'awardScroll',\n 'clappingHands',\n 'podium',\n 'openBook',\n 'handWithMoney',\n 'threeStars',\n 'multiFile',\n 'publicVisibility',\n 'openVisibility',\n 'privateVisibility',\n] as const\n\nexport type IconName = (typeof IconStrings)[number]\n\nexport type IconSvgProps = {\n icon: IconName\n // If provided, will be shown in tooltip\n onClick?: () => void\n label?: string\n wrap?: boolean\n} & SvgIconProps\n\nfunction IconMapping(props: { icon: string } & SvgIconProps) {\n const { icon, ...otherProps } = props\n const color = undefined\n\n otherProps.sx = {\n verticalAlign: 'middle',\n ...otherProps.sx,\n }\n\n switch (icon) {\n case 'accessOpen':\n return <LockOpenTwoTone {...otherProps} />\n case 'accessClosed':\n return <VpnKeyTwoTone {...otherProps} />\n case 'accessPending':\n return <AccessPending {...otherProps} />\n case 'accessPendingCloud':\n return <AccessPendingCloud {...otherProps} />\n case 'add':\n return <AddTwoTone {...otherProps} />\n case 'addConditions':\n return <FactCheckTwoTone {...otherProps} />\n case 'actionKey':\n return <ActionKey {...otherProps} />\n case 'arrowBack':\n return <ArrowBack {...otherProps} />\n case 'arrowForward':\n return <ArrowForward {...otherProps} />\n case 'arrowDropUp':\n return <ArrowDropUpTwoTone {...otherProps} />\n case 'arrowDropDown':\n return <ArrowDropDownTwoTone {...otherProps} />\n case 'article':\n return <ArticleTwoTone {...otherProps} />\n case 'block':\n return <Block {...otherProps} />\n case 'check':\n return <Check {...otherProps} />\n case 'clear':\n return <Clear {...otherProps} />\n case 'cart':\n return <ShoppingCartOutlined {...otherProps} />\n case 'cards':\n return <ViewAgendaTwoTone {...otherProps} />\n case 'clock':\n return <AccessTimeTwoTone {...otherProps} />\n case 'code':\n return <Code {...otherProps} />\n case 'columns':\n return <ViewColumnTwoTone {...otherProps} />\n case 'circle':\n return <RadioButtonUncheckedTwoTone {...otherProps} />\n case 'checkCircle':\n return <CheckCircleTwoTone {...otherProps} />\n case 'createVersion':\n return <CreateVersion {...otherProps} />\n case 'dashboard':\n return <DashboardTwoTone {...otherProps} />\n case 'delete':\n return <DeleteTwoTone {...otherProps} />\n case 'deleteSweep':\n return <DeleteSweepTwoTone {...otherProps} />\n case 'openInNewWindow':\n return <OpenInNewTwoTone {...otherProps} />\n case 'phone':\n return <PhoneTwoTone {...otherProps} />\n case 'people':\n return <PeopleTwoTone {...otherProps} />\n case 'addToCart':\n return <AddShoppingCart {...otherProps} />\n case 'addCircleOutline':\n return <AddCircleOutline {...otherProps} />\n case 'addCircleTwoTone':\n return <AddCircleTwoTone {...otherProps} />\n case 'reload':\n return <Cached {...otherProps} />\n case 'team':\n return <Group {...otherProps} />\n case 'photoCamera':\n return <PhotoCameraOutlined {...otherProps} />\n case 'verticalEllipsis':\n return <MoreVertTwoTone {...otherProps} />\n case 'sync':\n return <SyncTwoTone {...otherProps} />\n case 'tableRows':\n return <TableRows {...otherProps} />\n case 'share':\n return <ShareTwoTone {...otherProps} />\n case 'public':\n case 'openVisibility':\n return <PublicTwoTone {...otherProps} />\n case 'privateVisibility':\n return <LockTwoTone {...otherProps} />\n case 'clipboard':\n return <AssignmentOutlined {...otherProps} />\n case 'clipboardCheck':\n return <AssignmentTurnedInTwoTone {...otherProps} />\n case 'info':\n return <InfoOutlined {...otherProps} />\n case 'favTwoTone':\n return <StarTwoTone {...otherProps} />\n case 'favOutline':\n return <StarOutline {...otherProps} />\n case 'fav':\n return <Star {...otherProps} />\n case 'github':\n return <GitHub {...otherProps} />\n case 'peopleTwoTone':\n return <PeopleTwoTone {...otherProps} />\n case 'challengesTwoTone':\n return <AssessmentTwoTone {...otherProps} />\n case 'download':\n return <GetAppTwoTone {...otherProps} />\n case 'errorOutlined':\n return <ErrorOutlined {...otherProps} />\n case 'searchOutlined':\n return <SearchOutlined {...otherProps} />\n case 'search':\n return <SearchTwoTone {...otherProps} />\n case 'history':\n return <HistoryTwoTone {...otherProps} />\n case 'time':\n return <WatchLater {...otherProps} />\n case 'login':\n return <Login {...otherProps} />\n case 'helpChatBubble':\n return <HelpChatBubble {...otherProps} />\n case 'helpOutlineTwoTone':\n return <HelpOutlineTwoTone {...otherProps} />\n case 'helpOutlined':\n return <HelpOutlined {...otherProps} />\n case 'close':\n case 'cross':\n return <CloseTwoTone {...otherProps} />\n case 'expandLess':\n return <ExpandLess {...otherProps} />\n case 'expandMore':\n return <ExpandMore {...otherProps} />\n case 'rat':\n return <Rat {...otherProps} />\n case 'chromatin':\n return <Chromatin {...otherProps} />\n case 'clinical':\n return <Clinical {...otherProps} />\n case 'contentCopy':\n return <ContentCopyTwoTone {...otherProps} />\n case 'data':\n return <Data {...otherProps} />\n case 'dataLocked':\n return <DataLocked {...otherProps} />\n case 'geneExpression':\n return <GeneExpression {...otherProps} />\n case 'geneVariants':\n return <GeneVariants {...otherProps} />\n case 'imaging':\n return <Imaging {...otherProps} />\n case 'inSilicoModel':\n return <InSilicoModel {...otherProps} />\n case 'modelSystem':\n return <ModelSystem {...otherProps} />\n case 'bioChemicalPhysical':\n return <BioChemicalPhysical {...otherProps} />\n case 'computationalTool':\n return <ComputationalTool {...otherProps} />\n case 'spatialProfiling':\n return <SpatialProfiling {...otherProps} />\n case 'dataReuse':\n return <DataReuse {...otherProps} />\n case 'lineGraph':\n return <LineGraph {...otherProps} />\n case 'kinomics':\n return <Kinomics {...otherProps} />\n case 'proteomics':\n return <Proteomics {...otherProps} />\n case 'packagableFile':\n return <PackagableFile {...otherProps} />\n case 'unpackagableFile':\n return <UnpackagableFile {...otherProps} />\n case 'other':\n return <Other fill={color} {...otherProps} />\n case 'wiki':\n case 'publicVisibility':\n return <LanguageTwoTone {...otherProps} />\n case 'file':\n return <InsertDriveFileTwoTone {...otherProps} />\n case 'fileOutlined':\n return <InsertDriveFileOutlined {...otherProps} />\n case 'folder':\n return <FolderTwoTone {...otherProps} />\n case 'newFolder':\n return <CreateNewFolderTwoTone {...otherProps} />\n case 'link':\n return <LinkTwoTone {...otherProps} />\n case 'linkOff':\n return <LinkOffTwoTone {...otherProps} />\n case 'table':\n return <TableChartTwoTone {...otherProps} />\n case 'tableview':\n return <TableViewTwoTone {...otherProps} />\n case 'entityview':\n return <ListTwoTone {...otherProps} />\n case 'submissionview':\n return <ArticleTwoTone {...otherProps} />\n case 'challenge':\n return <AssessmentTwoTone {...otherProps} />\n case 'discussion':\n return <QuestionAnswerTwoTone {...otherProps} />\n case 'dataset':\n return <Dataset {...otherProps} />\n case 'datasetcollection':\n return <DatasetCollection {...otherProps} />\n case 'database':\n return <LayersTwoTone {...otherProps} />\n case 'docker':\n return <Docker {...otherProps} />\n case 'accountCertified':\n return <AccountCertified {...otherProps} />\n case 'accountRegistered':\n return <AccountRegistered {...otherProps} />\n case 'accountValidated':\n return <AccountValidated {...otherProps} />\n case 'warningOutlined':\n return <ReportProblemOutlined {...otherProps} />\n case 'warning':\n return <WarningTwoTone {...otherProps} />\n case 'removeCircle':\n return <RemoveCircleTwoTone {...otherProps} />\n case 'replyTwoTone':\n return <ReplyTwoTone {...otherProps} />\n case 'chatTwoTone':\n return <ChatTwoTone {...otherProps} />\n case 'accessManagement':\n return <AccessManagement {...otherProps} />\n case 'chevronRight':\n return <ChevronRight {...otherProps} />\n case 'chevronLeft':\n return <ChevronLeft {...otherProps} />\n case 'pushpin':\n return <PushPinTwoTone {...otherProps} />\n case 'addBoxOutline':\n return <AddBoxOutlined {...otherProps} />\n case 'minusBoxOutline':\n return <IndeterminateCheckBoxOutlined {...otherProps} />\n case 'italic':\n return <FormatItalic {...otherProps} />\n case 'bold':\n return <FormatBold {...otherProps} />\n case 'title':\n return <Title {...otherProps} />\n case 'visibility':\n return <VisibilityTwoTone {...otherProps} />\n case 'visibilityOff':\n return <VisibilityOffTwoTone {...otherProps} />\n case 'strikethrough':\n return <StrikethroughS {...otherProps} />\n case 'latex':\n return <span>TeX</span>\n case 'image':\n return <Image {...otherProps} />\n case 'superscript':\n return <Superscript {...otherProps} />\n case 'subscript':\n return <Subscript {...otherProps} />\n case 'edit':\n return <EditTwoTone {...otherProps} />\n case 'tag':\n return <AlternateEmail {...otherProps} />\n case 'restore':\n return <RestoreFromTrashTwoTone {...otherProps} />\n case 'label':\n return <LabelTwoTone {...otherProps} />\n case 'upload':\n return <UploadTwoTone {...otherProps} />\n case 'flag':\n return <FlagTwoTone {...otherProps} />\n case 'email':\n return <MailOutlineTwoTone {...otherProps} />\n case 'sortUp':\n return (\n <Sort\n {...otherProps}\n sx={{\n transform: 'scale(1, -1)',\n ...otherProps.sx,\n }}\n />\n )\n case 'sortDown':\n return <Sort {...otherProps} />\n case 'google24':\n return <GoogleIcon24 {...otherProps} />\n case 'orcid':\n return <ORCIDIcon {...otherProps} />\n case 'tasks':\n return <TasksIcon {...otherProps} />\n case 'filter':\n return <FilterAltTwoTone {...otherProps} />\n case 'openInFull':\n return <OpenInFull {...otherProps} />\n case 'fileWithShield':\n return <FileWithShield {...otherProps} />\n case 'baseline':\n return <Baseline {...otherProps} />\n case 'rosetteRibbon':\n return <RosetteRibbon {...otherProps} />\n case 'starTrophy':\n return <StarTrophy {...otherProps} />\n case 'awardScroll':\n return <AwardScroll {...otherProps} />\n case 'clappingHands':\n return <ClappingHands {...otherProps} />\n case 'podium':\n return <Podium {...otherProps} />\n case 'openBook':\n return <OpenBook {...otherProps} />\n case 'handWithMoney':\n return <HandWithMoney {...otherProps} />\n case 'threeStars':\n return <ThreeStars {...otherProps} />\n case 'multiFile':\n return <MultiFile {...otherProps} />\n\n default:\n return <></>\n }\n}\n\nfunction IconSvg(props: IconSvgProps) {\n const { icon, label = '', onClick, wrap = true, ...svgIconProps } = props\n\n const id = `icon-${icon}`\n const role = onClick ? 'button' : 'img'\n const style = onClick ? { cursor: 'pointer' } : {}\n\n const wrapperProps = wrap\n ? {\n 'data-svg': icon,\n className: 'styled-svg-wrapper',\n id,\n role,\n onClick,\n style,\n }\n : {}\n\n let iconNode: ReactNode\n if (wrap) {\n iconNode = (\n <span {...wrapperProps}>\n <IconMapping icon={icon} {...svgIconProps} />\n </span>\n )\n } else {\n iconNode = (\n <IconMapping\n icon={icon}\n id={id}\n role={role}\n onClick={onClick}\n style={style}\n {...svgIconProps}\n />\n )\n }\n\n return (\n <Tooltip placement=\"top\" title={label}>\n {iconNode}\n </Tooltip>\n )\n}\n\n/**\n * Map entity type values to appropriate icon values supported by IconSvg.\n */\nexport const type2SvgIconName: Record<EntityType, IconName> = {\n file: 'file',\n project: 'dashboard',\n folder: 'folder',\n table: 'table',\n link: 'link',\n entityview: 'actionKey',\n materializedview: 'tableview',\n virtualtable: 'columns',\n dockerrepo: 'docker',\n submissionview: 'submissionview',\n dataset: 'dataset',\n datasetcollection: 'datasetcollection',\n recordset: 'fileWithShield',\n}\n\nexport default IconSvg\n"],"mappings":"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"}
1
+ {"version":3,"file":"IconSvg.js","names":[],"sources":["../../../src/components/IconSvg/IconSvg.tsx"],"sourcesContent":["import { GoogleIcon24 } from '@/assets/GoogleIcon24'\nimport { ReactComponent as AccessPending } from '@/assets/icons/AccessPending.svg'\nimport { ReactComponent as AccessPendingCloud } from '@/assets/icons/AccessPendingCloud.svg'\nimport AwardScroll from '@/assets/icons/AwardScroll'\nimport Baseline from '@/assets/icons/Baseline'\nimport ClappingHands from '@/assets/icons/ClappingHands'\nimport CreateVersion from '@/assets/icons/CreateVersion'\nimport FileWithShield from '@/assets/icons/FileWithShield'\nimport MultiFile from '@/assets/icons/MultiFile'\nimport UnpackagableFile from '@/assets/icons/UnpackagableFile'\nimport HandWithMoney from '@/assets/icons/HandWithMoney'\nimport { ORCIDIcon } from '@/assets/icons/ORCIDIcon'\nimport OpenBook from '@/assets/icons/OpenBook'\nimport Podium from '@/assets/icons/Podium'\nimport RosetteRibbon from '@/assets/icons/RosetteRibbon'\nimport StarTrophy from '@/assets/icons/StarTrophy'\nimport { TasksIcon } from '@/assets/icons/TasksIcon'\nimport ThreeStars from '@/assets/icons/ThreeStars'\nimport AccessManagement from '@/assets/mui_components/AccessManagement'\nimport AccountCertified from '@/assets/mui_components/AccountCertified'\nimport AccountRegistered from '@/assets/mui_components/AccountRegistered'\nimport AccountValidated from '@/assets/mui_components/AccountValidated'\nimport ActionKey from '@/assets/mui_components/ActionKey'\nimport BioChemicalPhysical from '@/assets/mui_components/BioChemicalPhysical'\nimport Chromatin from '@/assets/mui_components/Chromatin'\nimport Clinical from '@/assets/mui_components/Clinical'\nimport ComputationalTool from '@/assets/mui_components/ComputationalTool'\nimport Data from '@/assets/mui_components/Data'\nimport DataLocked from '@/assets/mui_components/DataLocked'\nimport DataReuse from '@/assets/mui_components/DataReuse'\nimport Dataset from '@/assets/mui_components/Dataset'\nimport DatasetCollection from '@/assets/mui_components/DatasetCollection'\nimport Docker from '@/assets/mui_components/Docker'\nimport GeneExpression from '@/assets/mui_components/GeneExpression'\nimport GeneVariants from '@/assets/mui_components/GeneVariants'\nimport HelpChatBubble from '@/assets/mui_components/HelpChatBubble'\nimport Imaging from '@/assets/mui_components/Imaging'\nimport InSilicoModel from '@/assets/mui_components/InSilicoModel'\nimport Kinomics from '@/assets/mui_components/Kinomics'\nimport LineGraph from '@/assets/mui_components/LineGraph'\nimport ModelSystem from '@/assets/mui_components/ModelSystem'\nimport Other from '@/assets/mui_components/Other'\nimport PackagableFile from '@/assets/mui_components/PackagableFile'\nimport Proteomics from '@/assets/mui_components/Proteomics'\nimport Rat from '@/assets/mui_components/Rat'\nimport SpatialProfiling from '@/assets/mui_components/SpatialProfiling'\nimport {\n AccessTimeTwoTone,\n AddBoxOutlined,\n AddCircleOutline,\n AddCircleTwoTone,\n AddShoppingCart,\n AddTwoTone,\n AlternateEmail,\n ArrowBack,\n ArrowDropDownTwoTone,\n ArrowDropUpTwoTone,\n ArrowForward,\n ArticleTwoTone,\n AssessmentTwoTone,\n AssignmentOutlined,\n AssignmentTurnedInTwoTone,\n Block,\n Cached,\n ChatTwoTone,\n Check,\n CheckCircleTwoTone,\n ChevronLeft,\n ChevronRight,\n Clear,\n CloseTwoTone,\n Code,\n ContentCopyTwoTone,\n CreateNewFolderTwoTone,\n DashboardTwoTone,\n DeleteSweepTwoTone,\n DeleteTwoTone,\n EditTwoTone,\n ErrorOutlined,\n ExpandLess,\n ExpandMore,\n FactCheckTwoTone,\n FilterAltTwoTone,\n FlagTwoTone,\n FolderTwoTone,\n FormatBold,\n FormatItalic,\n GetAppTwoTone,\n GitHub,\n Group,\n HelpOutlined,\n HelpOutlineTwoTone,\n HistoryTwoTone,\n Image,\n IndeterminateCheckBoxOutlined,\n InfoOutlined,\n InsertDriveFileOutlined,\n InsertDriveFileTwoTone,\n LabelTwoTone,\n LanguageTwoTone,\n LayersTwoTone,\n LinkOffTwoTone,\n LinkTwoTone,\n ListTwoTone,\n LockOpenTwoTone,\n LockTwoTone,\n Login,\n MailOutlineTwoTone,\n MoreVertTwoTone,\n OpenInFull,\n OpenInNewTwoTone,\n PeopleTwoTone,\n PhoneTwoTone,\n PhotoCameraOutlined,\n PublicTwoTone,\n PushPinTwoTone,\n QuestionAnswerTwoTone,\n RadioButtonUncheckedTwoTone,\n RemoveCircleTwoTone,\n ReplyTwoTone,\n ReportProblemOutlined,\n RestoreFromTrashTwoTone,\n SearchOutlined,\n SearchTwoTone,\n ShareTwoTone,\n ShoppingCartOutlined,\n Sort,\n Star,\n StarOutline,\n StarTwoTone,\n StrikethroughS,\n Subscript,\n Superscript,\n SyncTwoTone,\n TableChartTwoTone,\n TableRows,\n TableViewTwoTone,\n Title,\n UploadTwoTone,\n ViewAgendaTwoTone,\n ViewColumnTwoTone,\n VisibilityOffTwoTone,\n VisibilityTwoTone,\n VpnKeyTwoTone,\n WarningTwoTone,\n WatchLater,\n} from '@mui/icons-material'\nimport { Tooltip } from '@mui/material'\nimport { SvgIconProps } from '@mui/material/SvgIcon'\nimport { EntityType } from '@sage-bionetworks/synapse-client'\nimport { ReactNode } from 'react'\n\nexport const IconStrings = [\n 'accessOpen',\n 'accessPending',\n 'accessPendingCloud',\n 'accessClosed',\n 'actionKey',\n 'arrowBack',\n 'arrowForward',\n 'arrowDropUp',\n 'arrowDropDown',\n 'article',\n 'cards',\n 'check',\n 'clear',\n 'cart',\n 'clock',\n 'code',\n 'columns',\n 'openInNewWindow',\n 'dashboard',\n 'delete',\n 'deleteSweep',\n 'filter',\n 'addToCart',\n 'addCircleOutline',\n 'addCircleTwoTone',\n 'reload',\n 'team',\n 'photoCamera',\n 'info',\n 'favTwoTone',\n 'favOutline',\n 'fav',\n 'peopleTwoTone',\n 'challengesTwoTone',\n 'download',\n 'searchOutlined',\n 'search',\n 'history',\n 'time',\n 'login',\n 'helpChatBubble',\n 'helpOutlined',\n 'helpOutlineTwoTone',\n 'expandLess',\n 'expandMore',\n 'rat',\n 'chromatin',\n 'clinical',\n 'contentCopy',\n 'data',\n 'dataLocked',\n 'geneExpression',\n 'geneVariants',\n 'github',\n 'imaging',\n 'inSilicoModel',\n 'modelSystem',\n 'bioChemicalPhysical',\n 'computationalTool',\n 'spatialProfiling',\n 'dataReuse',\n 'lineGraph',\n 'kinomics',\n 'proteomics',\n 'packagableFile',\n 'unpackagableFile',\n 'other',\n 'wiki',\n 'file',\n 'fileOutlined',\n 'folder',\n 'link',\n 'linkOff',\n 'table',\n 'tableRows',\n 'share',\n 'public',\n 'people',\n 'entityview',\n 'submissionview',\n 'challenge',\n 'discussion',\n 'dataset',\n 'datasetcollection',\n 'docker',\n 'accountCertified',\n 'accountRegistered',\n 'accountValidated',\n 'warningOutlined',\n 'removeCircle',\n 'replyTwoTone',\n 'chatTwoTone',\n 'accessManagement',\n 'chevronRight',\n 'chevronLeft',\n 'database',\n 'close',\n 'cross',\n 'verticalEllipsis',\n 'sync',\n 'clipboard',\n 'clipboardCheck',\n 'add',\n 'warning',\n 'circle',\n 'block',\n 'checkCircle',\n 'errorOutlined',\n 'phone',\n 'pushpin',\n 'addBoxOutline',\n 'minusBoxOutline',\n 'italic',\n 'bold',\n 'title',\n 'visibility',\n 'visibilityOff',\n 'strikethrough',\n 'subscript',\n 'superscript',\n 'latex',\n 'image',\n 'edit',\n 'tag',\n 'restore',\n 'label',\n 'upload',\n 'flag',\n 'newFolder',\n 'createVersion',\n 'email',\n 'addConditions',\n 'sortUp',\n 'sortDown',\n 'orcid',\n 'tasks',\n 'google24',\n 'openInFull',\n 'tableview',\n 'fileWithShield',\n 'baseline',\n 'rosetteRibbon',\n 'starTrophy',\n 'awardScroll',\n 'clappingHands',\n 'podium',\n 'openBook',\n 'handWithMoney',\n 'threeStars',\n 'multiFile',\n 'publicVisibility',\n 'openVisibility',\n 'privateVisibility',\n] as const\n\nexport type IconName = (typeof IconStrings)[number]\n\nexport type IconSvgProps = {\n icon: IconName\n // If provided, will be shown in tooltip\n onClick?: () => void\n label?: string\n wrap?: boolean\n} & SvgIconProps\n\nfunction IconMapping(props: { icon: string } & SvgIconProps) {\n const { icon, ...otherProps } = props\n const color = undefined\n\n otherProps.sx = {\n verticalAlign: 'middle',\n ...otherProps.sx,\n }\n\n switch (icon) {\n case 'accessOpen':\n return <LockOpenTwoTone {...otherProps} />\n case 'accessClosed':\n return <VpnKeyTwoTone {...otherProps} />\n case 'accessPending':\n return <AccessPending {...otherProps} />\n case 'accessPendingCloud':\n return <AccessPendingCloud {...otherProps} />\n case 'add':\n return <AddTwoTone {...otherProps} />\n case 'addConditions':\n return <FactCheckTwoTone {...otherProps} />\n case 'actionKey':\n return <ActionKey {...otherProps} />\n case 'arrowBack':\n return <ArrowBack {...otherProps} />\n case 'arrowForward':\n return <ArrowForward {...otherProps} />\n case 'arrowDropUp':\n return <ArrowDropUpTwoTone {...otherProps} />\n case 'arrowDropDown':\n return <ArrowDropDownTwoTone {...otherProps} />\n case 'article':\n return <ArticleTwoTone {...otherProps} />\n case 'block':\n return <Block {...otherProps} />\n case 'check':\n return <Check {...otherProps} />\n case 'clear':\n return <Clear {...otherProps} />\n case 'cart':\n return <ShoppingCartOutlined {...otherProps} />\n case 'cards':\n return <ViewAgendaTwoTone {...otherProps} />\n case 'clock':\n return <AccessTimeTwoTone {...otherProps} />\n case 'code':\n return <Code {...otherProps} />\n case 'columns':\n return <ViewColumnTwoTone {...otherProps} />\n case 'circle':\n return <RadioButtonUncheckedTwoTone {...otherProps} />\n case 'checkCircle':\n return <CheckCircleTwoTone {...otherProps} />\n case 'createVersion':\n return <CreateVersion {...otherProps} />\n case 'dashboard':\n return <DashboardTwoTone {...otherProps} />\n case 'delete':\n return <DeleteTwoTone {...otherProps} />\n case 'deleteSweep':\n return <DeleteSweepTwoTone {...otherProps} />\n case 'openInNewWindow':\n return <OpenInNewTwoTone {...otherProps} />\n case 'phone':\n return <PhoneTwoTone {...otherProps} />\n case 'people':\n return <PeopleTwoTone {...otherProps} />\n case 'addToCart':\n return <AddShoppingCart {...otherProps} />\n case 'addCircleOutline':\n return <AddCircleOutline {...otherProps} />\n case 'addCircleTwoTone':\n return <AddCircleTwoTone {...otherProps} />\n case 'reload':\n return <Cached {...otherProps} />\n case 'team':\n return <Group {...otherProps} />\n case 'photoCamera':\n return <PhotoCameraOutlined {...otherProps} />\n case 'verticalEllipsis':\n return <MoreVertTwoTone {...otherProps} />\n case 'sync':\n return <SyncTwoTone {...otherProps} />\n case 'tableRows':\n return <TableRows {...otherProps} />\n case 'share':\n return <ShareTwoTone {...otherProps} />\n case 'public':\n case 'openVisibility':\n return <PublicTwoTone {...otherProps} />\n case 'privateVisibility':\n return <LockTwoTone {...otherProps} />\n case 'clipboard':\n return <AssignmentOutlined {...otherProps} />\n case 'clipboardCheck':\n return <AssignmentTurnedInTwoTone {...otherProps} />\n case 'info':\n return <InfoOutlined {...otherProps} />\n case 'favTwoTone':\n return <StarTwoTone {...otherProps} />\n case 'favOutline':\n return <StarOutline {...otherProps} />\n case 'fav':\n return <Star {...otherProps} />\n case 'github':\n return <GitHub {...otherProps} />\n case 'peopleTwoTone':\n return <PeopleTwoTone {...otherProps} />\n case 'challengesTwoTone':\n return <AssessmentTwoTone {...otherProps} />\n case 'download':\n return <GetAppTwoTone {...otherProps} />\n case 'errorOutlined':\n return <ErrorOutlined {...otherProps} />\n case 'searchOutlined':\n return <SearchOutlined {...otherProps} />\n case 'search':\n return <SearchTwoTone {...otherProps} />\n case 'history':\n return <HistoryTwoTone {...otherProps} />\n case 'time':\n return <WatchLater {...otherProps} />\n case 'login':\n return <Login {...otherProps} />\n case 'helpChatBubble':\n return <HelpChatBubble {...otherProps} />\n case 'helpOutlineTwoTone':\n return <HelpOutlineTwoTone {...otherProps} />\n case 'helpOutlined':\n return <HelpOutlined {...otherProps} />\n case 'close':\n case 'cross':\n return <CloseTwoTone {...otherProps} />\n case 'expandLess':\n return <ExpandLess {...otherProps} />\n case 'expandMore':\n return <ExpandMore {...otherProps} />\n case 'rat':\n return <Rat {...otherProps} />\n case 'chromatin':\n return <Chromatin {...otherProps} />\n case 'clinical':\n return <Clinical {...otherProps} />\n case 'contentCopy':\n return <ContentCopyTwoTone {...otherProps} />\n case 'data':\n return <Data {...otherProps} />\n case 'dataLocked':\n return <DataLocked {...otherProps} />\n case 'geneExpression':\n return <GeneExpression {...otherProps} />\n case 'geneVariants':\n return <GeneVariants {...otherProps} />\n case 'imaging':\n return <Imaging {...otherProps} />\n case 'inSilicoModel':\n return <InSilicoModel {...otherProps} />\n case 'modelSystem':\n return <ModelSystem {...otherProps} />\n case 'bioChemicalPhysical':\n return <BioChemicalPhysical {...otherProps} />\n case 'computationalTool':\n return <ComputationalTool {...otherProps} />\n case 'spatialProfiling':\n return <SpatialProfiling {...otherProps} />\n case 'dataReuse':\n return <DataReuse {...otherProps} />\n case 'lineGraph':\n return <LineGraph {...otherProps} />\n case 'kinomics':\n return <Kinomics {...otherProps} />\n case 'proteomics':\n return <Proteomics {...otherProps} />\n case 'packagableFile':\n return <PackagableFile {...otherProps} />\n case 'unpackagableFile':\n return <UnpackagableFile {...otherProps} />\n case 'other':\n return <Other fill={color} {...otherProps} />\n case 'wiki':\n case 'publicVisibility':\n return <LanguageTwoTone {...otherProps} />\n case 'file':\n return <InsertDriveFileTwoTone {...otherProps} />\n case 'fileOutlined':\n return <InsertDriveFileOutlined {...otherProps} />\n case 'folder':\n return <FolderTwoTone {...otherProps} />\n case 'newFolder':\n return <CreateNewFolderTwoTone {...otherProps} />\n case 'link':\n return <LinkTwoTone {...otherProps} />\n case 'linkOff':\n return <LinkOffTwoTone {...otherProps} />\n case 'table':\n return <TableChartTwoTone {...otherProps} />\n case 'tableview':\n return <TableViewTwoTone {...otherProps} />\n case 'entityview':\n return <ListTwoTone {...otherProps} />\n case 'submissionview':\n return <ArticleTwoTone {...otherProps} />\n case 'challenge':\n return <AssessmentTwoTone {...otherProps} />\n case 'discussion':\n return <QuestionAnswerTwoTone {...otherProps} />\n case 'dataset':\n return <Dataset {...otherProps} />\n case 'datasetcollection':\n return <DatasetCollection {...otherProps} />\n case 'database':\n return <LayersTwoTone {...otherProps} />\n case 'docker':\n return <Docker {...otherProps} />\n case 'accountCertified':\n return <AccountCertified {...otherProps} />\n case 'accountRegistered':\n return <AccountRegistered {...otherProps} />\n case 'accountValidated':\n return <AccountValidated {...otherProps} />\n case 'warningOutlined':\n return <ReportProblemOutlined {...otherProps} />\n case 'warning':\n return <WarningTwoTone {...otherProps} />\n case 'removeCircle':\n return <RemoveCircleTwoTone {...otherProps} />\n case 'replyTwoTone':\n return <ReplyTwoTone {...otherProps} />\n case 'chatTwoTone':\n return <ChatTwoTone {...otherProps} />\n case 'accessManagement':\n return <AccessManagement {...otherProps} />\n case 'chevronRight':\n return <ChevronRight {...otherProps} />\n case 'chevronLeft':\n return <ChevronLeft {...otherProps} />\n case 'pushpin':\n return <PushPinTwoTone {...otherProps} />\n case 'addBoxOutline':\n return <AddBoxOutlined {...otherProps} />\n case 'minusBoxOutline':\n return <IndeterminateCheckBoxOutlined {...otherProps} />\n case 'italic':\n return <FormatItalic {...otherProps} />\n case 'bold':\n return <FormatBold {...otherProps} />\n case 'title':\n return <Title {...otherProps} />\n case 'visibility':\n return <VisibilityTwoTone {...otherProps} />\n case 'visibilityOff':\n return <VisibilityOffTwoTone {...otherProps} />\n case 'strikethrough':\n return <StrikethroughS {...otherProps} />\n case 'latex':\n return <span>TeX</span>\n case 'image':\n return <Image {...otherProps} />\n case 'superscript':\n return <Superscript {...otherProps} />\n case 'subscript':\n return <Subscript {...otherProps} />\n case 'edit':\n return <EditTwoTone {...otherProps} />\n case 'tag':\n return <AlternateEmail {...otherProps} />\n case 'restore':\n return <RestoreFromTrashTwoTone {...otherProps} />\n case 'label':\n return <LabelTwoTone {...otherProps} />\n case 'upload':\n return <UploadTwoTone {...otherProps} />\n case 'flag':\n return <FlagTwoTone {...otherProps} />\n case 'email':\n return <MailOutlineTwoTone {...otherProps} />\n case 'sortUp':\n return (\n <Sort\n {...otherProps}\n sx={{\n transform: 'scale(1, -1)',\n ...otherProps.sx,\n }}\n />\n )\n case 'sortDown':\n return <Sort {...otherProps} />\n case 'google24':\n return <GoogleIcon24 {...otherProps} />\n case 'orcid':\n return <ORCIDIcon {...otherProps} />\n case 'tasks':\n return <TasksIcon {...otherProps} />\n case 'filter':\n return <FilterAltTwoTone {...otherProps} />\n case 'openInFull':\n return <OpenInFull {...otherProps} />\n case 'fileWithShield':\n return <FileWithShield {...otherProps} />\n case 'baseline':\n return <Baseline {...otherProps} />\n case 'rosetteRibbon':\n return <RosetteRibbon {...otherProps} />\n case 'starTrophy':\n return <StarTrophy {...otherProps} />\n case 'awardScroll':\n return <AwardScroll {...otherProps} />\n case 'clappingHands':\n return <ClappingHands {...otherProps} />\n case 'podium':\n return <Podium {...otherProps} />\n case 'openBook':\n return <OpenBook {...otherProps} />\n case 'handWithMoney':\n return <HandWithMoney {...otherProps} />\n case 'threeStars':\n return <ThreeStars {...otherProps} />\n case 'multiFile':\n return <MultiFile {...otherProps} />\n\n default:\n return <></>\n }\n}\n\nfunction IconSvg(props: IconSvgProps) {\n const { icon, label = '', onClick, wrap = true, ...svgIconProps } = props\n\n const id = `icon-${icon}`\n const role = onClick ? 'button' : 'img'\n const style = onClick ? { cursor: 'pointer' } : {}\n\n const wrapperProps = wrap\n ? {\n 'data-svg': icon,\n className: 'styled-svg-wrapper',\n id,\n role,\n onClick,\n style,\n }\n : {}\n\n let iconNode: ReactNode\n if (wrap) {\n iconNode = (\n <span {...wrapperProps}>\n <IconMapping icon={icon} {...svgIconProps} />\n </span>\n )\n } else {\n iconNode = (\n <IconMapping\n icon={icon}\n id={id}\n role={role}\n onClick={onClick}\n style={style}\n {...svgIconProps}\n />\n )\n }\n\n return (\n <Tooltip placement=\"top\" title={label}>\n {iconNode}\n </Tooltip>\n )\n}\n\n/**\n * Map entity type values to appropriate icon values supported by IconSvg.\n */\nexport const type2SvgIconName: Record<EntityType, IconName> = {\n file: 'file',\n project: 'dashboard',\n folder: 'folder',\n table: 'table',\n link: 'link',\n entityview: 'actionKey',\n materializedview: 'tableview',\n virtualtable: 'columns',\n dockerrepo: 'docker',\n submissionview: 'submissionview',\n dataset: 'dataset',\n datasetcollection: 'datasetcollection',\n recordset: 'fileWithShield',\n searchindex: 'search',\n}\n\nexport default IconSvg\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageCardGridWithLinks.js","names":[],"sources":["../../../src/components/ImageCardGridWithLinks/ImageCardGridWithLinks.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetStablePresignedUrl } from '@/synapse-queries'\nimport useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'\nimport {\n Box,\n Card,\n CardMedia,\n GridLegacy as Grid,\n Link,\n Skeleton,\n Typography,\n} from '@mui/material'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n QueryBundleRequest,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport { Link as RouterLink } from 'react-router'\nimport PortalSectionHeader from '../PortalSectionHeader'\nimport { RegularBreakpoints } from '@mui/material/GridLegacy'\n\nconst BORDER_RADIUS = '6px'\n\nexport type ImageCardGridWithLinksProps = {\n sql: string\n title: string\n summaryText: string\n columnCount?: 1 | 2 | 3\n heightPx?: number\n}\n\ntype ImageCardProps = {\n card: Row\n isLoading: boolean\n linkColumnIndex: number\n linkTextColumnIndex: number\n entityId: string\n fileId: string | null\n columnCount?: 1 | 2 | 3\n heightPx?: number\n}\n\nenum ExpectedColumns {\n LINKTEXT = 'LinkText',\n LINK = 'Link',\n IMAGE = 'Image',\n}\n\nconst ImageCard = ({\n card,\n isLoading,\n linkColumnIndex,\n linkTextColumnIndex,\n entityId,\n fileId,\n columnCount = 3,\n heightPx = 245,\n}: ImageCardProps): React.ReactNode => {\n const fha: FileHandleAssociation = {\n associateObjectId: entityId,\n associateObjectType: FileHandleAssociateType.TableEntity,\n fileHandleId: fileId ?? '',\n }\n const stablePresignedUrl = useGetStablePresignedUrl(fha, false, {\n enabled: !!fileId,\n })\n const dataUrl = stablePresignedUrl?.dataUrl\n const breakpoints: RegularBreakpoints = {\n xs: 12,\n sm: columnCount === 1 ? 12 : 6,\n md: 12 / columnCount,\n }\n return (\n <Grid\n item\n {...breakpoints}\n key={card.rowId}\n sx={{\n height: `${heightPx}px`,\n paddingTop: '24px',\n paddingLeft: '24px',\n }}\n >\n {isLoading ? (\n <Skeleton variant=\"rectangular\" height={heightPx - 20} width=\"100%\" />\n ) : (\n <Card\n raised={false}\n sx={{\n height: '100%',\n position: 'relative',\n borderRadius: BORDER_RADIUS,\n border: 'none',\n transform: 'scale(1)',\n transition: '.3s ease-in-out',\n '&:hover': {\n transform: 'scale(1.05)',\n boxShadow: '0px 4px 15px rgba(0, 0, 0, 0.2)',\n },\n }}\n >\n <Link component={RouterLink} to={card.values[linkColumnIndex] || ''}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n position: 'absolute',\n backgroundColor: '#FFFF',\n borderRadius: `0px 0px ${BORDER_RADIUS} 0px`,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'none',\n },\n padding: '6px 10px',\n }}\n >\n <Typography\n variant=\"headline2\"\n sx={{\n color: 'grey.1000',\n fontSize: '16px',\n }}\n >\n {card.values[linkTextColumnIndex]}\n </Typography>\n <ArrowForwardIosIcon\n style={{\n color: 'unset',\n width: 16,\n height: 16,\n }}\n />\n </Box>\n <CardMedia\n component=\"img\"\n image={dataUrl}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'cover',\n }}\n />\n </Link>\n </Card>\n )}\n </Grid>\n )\n}\n\nfunction ImageCardGridWithLinks(props: ImageCardGridWithLinksProps) {\n const { sql, title, summaryText, columnCount, heightPx } = props\n const entityId = parseEntityIdFromSqlStatement(sql)\n const queryBundleRequest: QueryBundleRequest = {\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n },\n }\n\n const { data: queryResultBundle, isLoading } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const imageColumnIndex = getFieldIndex(\n ExpectedColumns.IMAGE,\n queryResultBundle,\n )\n\n const dataRows = queryResultBundle?.queryResult!.queryResults.rows ?? []\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n const linkTextColumnIndex = getFieldIndex(\n ExpectedColumns.LINKTEXT,\n queryResultBundle,\n )\n\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: { xs: '1fr', md: '1fr 3fr' },\n gap: { xs: '38px', md: '80px' },\n padding: { xs: '40px', lg: '80px' },\n }}\n >\n <PortalSectionHeader\n title={title}\n summaryText={summaryText}\n sx={{\n h2: { fontSize: '24px', paddingTop: '26px', width: '100%' },\n '& p': { fontSize: '16px', lineHeight: '24px' },\n }}\n />\n <Grid\n container\n spacing={2.5}\n sx={{\n order: { xs: 1, md: 0 },\n }}\n >\n {dataRows.map(card => {\n const fileId = card.values[imageColumnIndex]\n return (\n <ImageCard\n card={card}\n key={card.rowId}\n linkColumnIndex={linkColumnIndex}\n linkTextColumnIndex={linkTextColumnIndex}\n fileId={fileId}\n entityId={entityId}\n isLoading={isLoading}\n columnCount={columnCount}\n heightPx={heightPx}\n />\n )\n })}\n </Grid>\n </Box>\n )\n}\n\nexport default ImageCardGridWithLinks\n"],"mappings":"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"}
1
+ {"version":3,"file":"ImageCardGridWithLinks.js","names":[],"sources":["../../../src/components/ImageCardGridWithLinks/ImageCardGridWithLinks.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetStablePresignedUrl } from '@/synapse-queries'\nimport useGetQueryResultBundle from '@/synapse-queries/entity/useGetQueryResultBundle'\nimport { SynapseConstants } from '@/utils'\nimport { getFieldIndex } from '@/utils/functions/queryUtils'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos'\nimport {\n Box,\n Card,\n CardMedia,\n GridLegacy as Grid,\n Link,\n Skeleton,\n Typography,\n} from '@mui/material'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n QueryBundleRequest,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport { Link as RouterLink } from 'react-router'\nimport PortalSectionHeader from '../PortalSectionHeader'\nimport { RegularBreakpoints } from '@mui/material/GridLegacy'\n\nconst BORDER_RADIUS = '6px'\n\nexport type ImageCardGridWithLinksProps = {\n sql: string\n title: string\n summaryText: string\n columnCount?: 1 | 2 | 3\n heightPx?: number\n}\n\ntype ImageCardProps = {\n card: Row\n isLoading: boolean\n linkColumnIndex: number\n linkTextColumnIndex: number\n entityId: string\n fileId: string | null\n columnCount?: 1 | 2 | 3\n heightPx?: number\n}\n\nenum ExpectedColumns {\n LINKTEXT = 'LinkText',\n LINK = 'Link',\n IMAGE = 'Image',\n}\n\nconst ImageCard = ({\n card,\n isLoading,\n linkColumnIndex,\n linkTextColumnIndex,\n entityId,\n fileId,\n columnCount = 3,\n heightPx = 245,\n}: ImageCardProps): React.ReactNode => {\n const fha: FileHandleAssociation = {\n associateObjectId: entityId,\n associateObjectType: FileHandleAssociateType.TableEntity,\n fileHandleId: fileId ?? '',\n }\n const stablePresignedUrl = useGetStablePresignedUrl(fha, false, {\n enabled: !!fileId,\n })\n const dataUrl = stablePresignedUrl?.dataUrl\n const breakpoints: RegularBreakpoints = {\n xs: 12,\n sm: columnCount === 1 ? 12 : 6,\n md: 12 / columnCount,\n }\n return (\n <Grid\n item\n {...breakpoints}\n key={card.rowId}\n sx={{\n height: `${heightPx}px`,\n paddingTop: '24px',\n paddingLeft: '24px',\n }}\n >\n {isLoading ? (\n <Skeleton variant=\"rectangular\" height={heightPx - 20} width=\"100%\" />\n ) : (\n <Card\n raised={false}\n sx={{\n height: '100%',\n position: 'relative',\n borderRadius: BORDER_RADIUS,\n border: 'none',\n transform: 'scale(1)',\n transition: '.3s ease-in-out',\n '&:hover': {\n transform: 'scale(1.05)',\n boxShadow: '0px 4px 15px rgba(0, 0, 0, 0.2)',\n },\n }}\n >\n <Link component={RouterLink} to={card.values[linkColumnIndex] || ''}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n position: 'absolute',\n backgroundColor: '#FFFF',\n borderRadius: `0px 0px ${BORDER_RADIUS} 0px`,\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'none',\n },\n padding: '6px 10px',\n }}\n >\n <Typography\n variant=\"headline2\"\n sx={{\n color: 'grey.1000',\n fontSize: '16px',\n }}\n >\n {card.values[linkTextColumnIndex]}\n </Typography>\n <ArrowForwardIosIcon\n style={{\n color: 'unset',\n width: 16,\n height: 16,\n }}\n />\n </Box>\n <CardMedia\n component=\"img\"\n image={dataUrl}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'cover',\n }}\n />\n </Link>\n </Card>\n )}\n </Grid>\n )\n}\n\nfunction ImageCardGridWithLinks(props: ImageCardGridWithLinksProps) {\n const { sql, title, summaryText, columnCount, heightPx } = props\n const entityId = parseEntityIdFromSqlStatement(sql)\n const queryBundleRequest: QueryBundleRequest = {\n partMask:\n SynapseConstants.BUNDLE_MASK_QUERY_SELECT_COLUMNS |\n SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n entityId,\n query: {\n sql,\n },\n }\n\n const { data: queryResultBundle, isLoading } =\n useGetQueryResultBundle(queryBundleRequest)\n\n const imageColumnIndex = getFieldIndex(\n ExpectedColumns.IMAGE,\n queryResultBundle,\n )\n\n const dataRows = queryResultBundle?.queryResult!.queryResults.rows ?? []\n const linkColumnIndex = getFieldIndex(ExpectedColumns.LINK, queryResultBundle)\n const linkTextColumnIndex = getFieldIndex(\n ExpectedColumns.LINKTEXT,\n queryResultBundle,\n )\n\n return (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: { xs: '1fr', md: '1fr 3fr' },\n gap: { xs: '38px', md: '80px' },\n padding: { xs: '40px', lg: '80px' },\n }}\n >\n <PortalSectionHeader\n title={title}\n summaryText={summaryText}\n sx={{\n h2: { fontSize: '24px', paddingTop: '26px', width: '100%' },\n '& p': { fontSize: '16px', lineHeight: '24px' },\n }}\n />\n <Grid\n container\n spacing={2.5}\n sx={{\n order: { xs: 1, md: 0 },\n }}\n >\n {dataRows.map(card => {\n const fileId = card.values[imageColumnIndex]\n return (\n <ImageCard\n card={card}\n key={card.rowId}\n linkColumnIndex={linkColumnIndex}\n linkTextColumnIndex={linkTextColumnIndex}\n fileId={fileId}\n entityId={entityId}\n isLoading={isLoading}\n columnCount={columnCount}\n heightPx={heightPx}\n />\n )\n })}\n </Grid>\n </Box>\n )\n}\n\nexport default ImageCardGridWithLinks\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageFromSynapseTable.js","names":[],"sources":["../../src/components/ImageFromSynapseTable.tsx"],"sourcesContent":["import { useGetStablePresignedUrl } from '@/synapse-queries'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { CSSProperties } from 'react'\n\nexport type ImageFromSynapseTableProps = {\n tableId: string\n fileHandleId: string | null\n alt?: string\n style?: CSSProperties\n}\n\nfunction ImageFromSynapseTable(props: ImageFromSynapseTableProps) {\n const { tableId, fileHandleId, alt, style } = props\n const fha: FileHandleAssociation = {\n associateObjectId: tableId,\n associateObjectType: FileHandleAssociateType.TableEntity,\n fileHandleId: fileHandleId ?? '',\n }\n const stablePresignedUrl = useGetStablePresignedUrl(fha, false, {\n enabled: !!fileHandleId,\n })\n\n const dataUrl = stablePresignedUrl?.dataUrl\n const error = stablePresignedUrl?.queryResult?.error\n\n if (error || !dataUrl) {\n return <></>\n }\n return (\n <img\n style={style}\n alt={alt ? `${alt}` : 'Image from table'}\n src={dataUrl}\n />\n )\n}\n\nexport default ImageFromSynapseTable\n"],"mappings":";;;;;AAcA,SAAS,EAAsB,GAAmC;CAChE,IAAM,EAAE,YAAS,iBAAc,QAAK,aAAU,GAMxC,IAAqB,EALQ;EACjC,mBAAmB;EACnB,qBAAqB,EAAwB;EAC7C,cAAc,KAAgB;EAC/B,EACwD,IAAO,EAC9D,SAAS,CAAC,CAAC,GACZ,CAAC,EAEI,IAAU,GAAoB;AAMpC,QALc,GAAoB,aAAa,SAElC,CAAC,IACL,kBAAA,GAAA,EAAK,CAAA,GAGZ,kBAAC,OAAD;EACS;EACP,KAAK,IAAM,GAAG,MAAQ;EACtB,KAAK;EACL,CAAA"}
1
+ {"version":3,"file":"ImageFromSynapseTable.js","names":[],"sources":["../../src/components/ImageFromSynapseTable.tsx"],"sourcesContent":["import { useGetStablePresignedUrl } from '@/synapse-queries'\nimport {\n FileHandleAssociateType,\n FileHandleAssociation,\n} from '@sage-bionetworks/synapse-types'\nimport { CSSProperties } from 'react'\n\nexport type ImageFromSynapseTableProps = {\n tableId: string\n fileHandleId: string | null\n alt?: string\n style?: CSSProperties\n}\n\nfunction ImageFromSynapseTable(props: ImageFromSynapseTableProps) {\n const { tableId, fileHandleId, alt, style } = props\n const fha: FileHandleAssociation = {\n associateObjectId: tableId,\n associateObjectType: FileHandleAssociateType.TableEntity,\n fileHandleId: fileHandleId ?? '',\n }\n const stablePresignedUrl = useGetStablePresignedUrl(fha, false, {\n enabled: !!fileHandleId,\n })\n\n const dataUrl = stablePresignedUrl?.dataUrl\n const error = stablePresignedUrl?.queryResult?.error\n\n if (error || !dataUrl) {\n return <></>\n }\n return (\n <img\n style={style}\n alt={alt ? `${alt}` : 'Image from table'}\n src={dataUrl}\n />\n )\n}\n\nexport default ImageFromSynapseTable\n"],"mappings":";;;;;AAcA,SAAS,EAAsB,GAAmC;CAChE,IAAM,EAAE,YAAS,iBAAc,QAAK,aAAU,GAMxC,IAAqB,EAAyB;EAJlD,mBAAmB;EACnB,qBAAqB,EAAwB;EAC7C,cAAc,KAAgB;EAEoB,EAAK,IAAO,EAC9D,SAAS,CAAC,CAAC,GACZ,CAAC,EAEI,IAAU,GAAoB;AAMpC,QALc,GAAoB,aAAa,SAElC,CAAC,IACL,kBAAA,GAAA,EAAK,CAAA,GAGZ,kBAAC,OAAD;EACS;EACP,KAAK,IAAM,GAAG,MAAQ;EACtB,KAAK;EACL,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useParseCsv.js","names":[],"sources":["../../../src/components/JSONArrayEditor/useParseCsv.ts"],"sourcesContent":["import { JSONSchema7Definition } from 'json-schema'\nimport papaparseLib from 'papaparse'\nimport type { ParseError } from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse: papaparse } = papaparseLib\nimport { useCallback, useMemo } from 'react'\nimport { isObject } from 'lodash-es'\n\nexport type ParseCsvOptions = {\n /* If provided, items will be parsed based on the data type prescribed by the schema */\n jsonSchemaDefinition?: JSONSchema7Definition\n}\n\nexport type UseParseCsvReturn = {\n parse: (dataToParse: string) => Promise<unknown[]>\n}\n\nconst DEFAULT_OPTIONS: ParseCsvOptions = {\n jsonSchemaDefinition: { type: 'string' },\n}\n\nexport class UseParseCsvError extends Error {\n public parseErrors: ParseError[]\n constructor(parseErrors: ParseError[]) {\n super('Error parsing CSV')\n this.parseErrors = parseErrors\n }\n}\n\nexport default function useParseCsv(\n options: ParseCsvOptions = DEFAULT_OPTIONS,\n): UseParseCsvReturn {\n const { jsonSchemaDefinition } = options\n const itemsAreString = useMemo(\n () =>\n isObject(jsonSchemaDefinition) &&\n jsonSchemaDefinition.type &&\n jsonSchemaDefinition.type === 'string',\n [jsonSchemaDefinition],\n )\n\n const parse = useCallback(\n (dataToParse: string): Promise<unknown[]> => {\n return new Promise((resolve, reject) => {\n papaparse(dataToParse, {\n // If the items are not strings, let papaparse guess the type. Otherwise, always parse as strings.\n dynamicTyping: !itemsAreString,\n complete: result => {\n if (result.errors.length > 0) {\n reject(new UseParseCsvError(result.errors))\n } else {\n resolve(result.data.flat())\n }\n },\n })\n })\n },\n [itemsAreString],\n )\n\n return {\n parse,\n }\n}\n"],"mappings":";;;;AAIA,IAAM,EAAE,OAAO,MAAc,GAavB,IAAmC,EACvC,sBAAsB,EAAE,MAAM,UAAU,EACzC,EAEY,IAAb,cAAsC,MAAM;CAC1C;CACA,YAAY,GAA2B;AAErC,EADA,MAAM,oBAAoB,EAC1B,KAAK,cAAc;;;AAIvB,SAAwB,EACtB,IAA2B,GACR;CACnB,IAAM,EAAE,4BAAyB,GAC3B,IAAiB,QAEnB,EAAS,EAAqB,IAC9B,EAAqB,QACrB,EAAqB,SAAS,UAChC,CAAC,EAAqB,CACvB;AAqBD,QAAO,EACL,OApBY,GACX,MACQ,IAAI,SAAS,GAAS,MAAW;AACtC,IAAU,GAAa;GAErB,eAAe,CAAC;GAChB,WAAU,MAAU;AAClB,IAAI,EAAO,OAAO,SAAS,IACzB,EAAO,IAAI,EAAiB,EAAO,OAAO,CAAC,GAE3C,EAAQ,EAAO,KAAK,MAAM,CAAC;;GAGhC,CAAC;GACF,EAEJ,CAAC,EAAe,CACjB,EAIA"}
1
+ {"version":3,"file":"useParseCsv.js","names":[],"sources":["../../../src/components/JSONArrayEditor/useParseCsv.ts"],"sourcesContent":["import { JSONSchema7Definition } from 'json-schema'\nimport papaparseLib from 'papaparse'\nimport type { ParseError } from 'papaparse'\n// papaparse is CJS-only; pull named values from the default export.\nconst { parse: papaparse } = papaparseLib\nimport { useCallback, useMemo } from 'react'\nimport { isObject } from 'lodash-es'\n\nexport type ParseCsvOptions = {\n /* If provided, items will be parsed based on the data type prescribed by the schema */\n jsonSchemaDefinition?: JSONSchema7Definition\n}\n\nexport type UseParseCsvReturn = {\n parse: (dataToParse: string) => Promise<unknown[]>\n}\n\nconst DEFAULT_OPTIONS: ParseCsvOptions = {\n jsonSchemaDefinition: { type: 'string' },\n}\n\nexport class UseParseCsvError extends Error {\n public parseErrors: ParseError[]\n constructor(parseErrors: ParseError[]) {\n super('Error parsing CSV')\n this.parseErrors = parseErrors\n }\n}\n\nexport default function useParseCsv(\n options: ParseCsvOptions = DEFAULT_OPTIONS,\n): UseParseCsvReturn {\n const { jsonSchemaDefinition } = options\n const itemsAreString = useMemo(\n () =>\n isObject(jsonSchemaDefinition) &&\n jsonSchemaDefinition.type &&\n jsonSchemaDefinition.type === 'string',\n [jsonSchemaDefinition],\n )\n\n const parse = useCallback(\n (dataToParse: string): Promise<unknown[]> => {\n return new Promise((resolve, reject) => {\n papaparse(dataToParse, {\n // If the items are not strings, let papaparse guess the type. Otherwise, always parse as strings.\n dynamicTyping: !itemsAreString,\n complete: result => {\n if (result.errors.length > 0) {\n reject(new UseParseCsvError(result.errors))\n } else {\n resolve(result.data.flat())\n }\n },\n })\n })\n },\n [itemsAreString],\n )\n\n return {\n parse,\n }\n}\n"],"mappings":";;;;AAIA,IAAM,EAAE,OAAO,MAAc,GAavB,IAAmC,EACvC,sBAAsB,EAAE,MAAM,UAAU,EACzC,EAEY,IAAb,cAAsC,MAAM;CAC1C;CACA,YAAY,GAA2B;AAErC,EADA,MAAM,oBAAoB,EAC1B,KAAK,cAAc;;;AAIvB,SAAwB,EACtB,IAA2B,GACR;CACnB,IAAM,EAAE,4BAAyB,GAC3B,IAAiB,QAEnB,EAAS,EAAqB,IAC9B,EAAqB,QACrB,EAAqB,SAAS,UAChC,CAAC,EAAqB,CACvB;AAqBD,QAAO,EACL,OApBY,GACX,MACQ,IAAI,SAAS,GAAS,MAAW;AACtC,IAAU,GAAa;GAErB,eAAe,CAAC;GAChB,WAAU,MAAU;AAClB,IAAI,EAAO,OAAO,SAAS,IACzB,EAAO,IAAI,EAAiB,EAAO,OAAO,CAAC,GAE3C,EAAQ,EAAO,KAAK,MAAM,CAAC;;GAGhC,CAAC;GACF,EAEJ,CAAC,EAAe,CAIhB,EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayFieldDescriptionTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.tsx"],"sourcesContent":["import {\n getTemplate,\n getUiOptions,\n ArrayFieldDescriptionProps,\n FormContextType,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\n/** The `ArrayFieldDescriptionTemplate` component renders a `DescriptionFieldTemplate` with an `id` derived from\n * the `idSchema`.\n *\n * Identical to @rjsf/core ArrayFieldDescriptionTemplate except this renders something if there is no description.\n * Our description field also includes the type, so it should always be rendered.\n * @param props - The `ArrayFieldDescriptionProps` for the component\n */\nexport default function ArrayFieldDescriptionTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: ArrayFieldDescriptionProps<T, S, F>) {\n const { idSchema, description, registry, schema, uiSchema } = props\n const options = getUiOptions<T, S, F>(uiSchema, registry.globalUiOptions)\n const { label: displayLabel } = options\n if (displayLabel === false) {\n return null\n }\n\n const DescriptionFieldTemplate = getTemplate<\n 'DescriptionFieldTemplate',\n T,\n S,\n F\n >('DescriptionFieldTemplate', registry, options)\n const id = `${idSchema.$id}__description`\n return (\n <DescriptionFieldTemplate\n id={id}\n description={description ?? ''}\n schema={schema}\n uiSchema={uiSchema}\n registry={registry}\n />\n )\n}\n"],"mappings":";;;AAgBA,SAAwB,EAItB,GAA4C;CAC5C,IAAM,EAAE,aAAU,gBAAa,aAAU,WAAQ,gBAAa,GACxD,IAAU,EAAsB,GAAU,EAAS,gBAAgB,EACnE,EAAE,OAAO,MAAiB;AAYhC,QAXI,MAAiB,KACZ,OAWP,kBAR+B,EAK/B,4BAA4B,GAAU,EAAQ,EAG9C;EACM,IAHG,GAAG,EAAS,IAAI;EAIvB,aAAa,KAAe;EACpB;EACE;EACA;EACV,CAAA"}
1
+ {"version":3,"file":"ArrayFieldDescriptionTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/ArrayFieldDescriptionTemplate.tsx"],"sourcesContent":["import {\n getTemplate,\n getUiOptions,\n ArrayFieldDescriptionProps,\n FormContextType,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\n/** The `ArrayFieldDescriptionTemplate` component renders a `DescriptionFieldTemplate` with an `id` derived from\n * the `idSchema`.\n *\n * Identical to @rjsf/core ArrayFieldDescriptionTemplate except this renders something if there is no description.\n * Our description field also includes the type, so it should always be rendered.\n * @param props - The `ArrayFieldDescriptionProps` for the component\n */\nexport default function ArrayFieldDescriptionTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: ArrayFieldDescriptionProps<T, S, F>) {\n const { idSchema, description, registry, schema, uiSchema } = props\n const options = getUiOptions<T, S, F>(uiSchema, registry.globalUiOptions)\n const { label: displayLabel } = options\n if (displayLabel === false) {\n return null\n }\n\n const DescriptionFieldTemplate = getTemplate<\n 'DescriptionFieldTemplate',\n T,\n S,\n F\n >('DescriptionFieldTemplate', registry, options)\n const id = `${idSchema.$id}__description`\n return (\n <DescriptionFieldTemplate\n id={id}\n description={description ?? ''}\n schema={schema}\n uiSchema={uiSchema}\n registry={registry}\n />\n )\n}\n"],"mappings":";;;AAgBA,SAAwB,EAItB,GAA4C;CAC5C,IAAM,EAAE,aAAU,gBAAa,aAAU,WAAQ,gBAAa,GACxD,IAAU,EAAsB,GAAU,EAAS,gBAAgB,EACnE,EAAE,OAAO,MAAiB;AAYhC,QAXI,MAAiB,KACZ,OAWP,kBAR+B,EAK/B,4BAA4B,GAAU,EAGrC,EAAD;EACM,IAAA,GAHM,EAAS,IAAI;EAIvB,aAAa,KAAe;EACpB;EACE;EACA;EACV,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayFieldItemTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.tsx"],"sourcesContent":["import { Box, GridLegacy as Grid } from '@mui/material'\nimport {\n ArrayFieldItemTemplateType,\n FormContextType,\n getTemplate,\n getUiOptions,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\n/** The `ArrayFieldItemTemplate` component is the template used to render an items of an array.\n *\n * @param props - The `ArrayFieldTemplateItemType` props for the component\n */\nexport default function ArrayFieldItemTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: ArrayFieldItemTemplateType<T, S, F>) {\n const { children, hasToolbar, uiSchema, registry, buttonsProps } = props\n const uiOptions = getUiOptions<T, S, F>(uiSchema)\n const ArrayFieldItemButtonsTemplate = getTemplate<\n 'ArrayFieldItemButtonsTemplate',\n T,\n S,\n F\n >('ArrayFieldItemButtonsTemplate', registry, uiOptions)\n return (\n <Grid\n container\n className={`rjsf-array-item`}\n sx={{\n gap: 2,\n justifyContent: 'space-between',\n }}\n >\n <Grid item={true} xs>\n <Box\n sx={{\n mb: 2,\n }}\n >\n {children}\n </Box>\n </Grid>\n {hasToolbar && (\n <Grid\n item={true}\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 1,\n justifyContent: 'flex-start',\n alignSelf: 'start',\n my: 1,\n }}\n >\n <ArrayFieldItemButtonsTemplate {...buttonsProps} />\n </Grid>\n )}\n </Grid>\n )\n}\n"],"mappings":";;;;AAcA,SAAwB,EAItB,GAA4C;CAC5C,IAAM,EAAE,aAAU,eAAY,aAAU,aAAU,oBAAiB,GAE7D,IAAgC,EAKpC,iCAAiC,GANjB,EAAsB,EAAS,CAMM;AACvD,QACE,kBAAC,GAAD;EACE,WAAA;EACA,WAAW;EACX,IAAI;GACF,KAAK;GACL,gBAAgB;GACjB;YANH,CAQE,kBAAC,GAAD;GAAM,MAAM;GAAM,IAAA;aAChB,kBAAC,GAAD;IACE,IAAI,EACF,IAAI,GACL;IAEA;IACG,CAAA;GACD,CAAA,EACN,KACC,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,SAAS;IACT,eAAe;IACf,KAAK;IACL,gBAAgB;IAChB,WAAW;IACX,IAAI;IACL;aAED,kBAAC,GAAD,EAA+B,GAAI,GAAgB,CAAA;GAC9C,CAAA,CAEJ"}
1
+ {"version":3,"file":"ArrayFieldItemTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/ArrayFieldItemTemplate.tsx"],"sourcesContent":["import { Box, GridLegacy as Grid } from '@mui/material'\nimport {\n ArrayFieldItemTemplateType,\n FormContextType,\n getTemplate,\n getUiOptions,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\n/** The `ArrayFieldItemTemplate` component is the template used to render an items of an array.\n *\n * @param props - The `ArrayFieldTemplateItemType` props for the component\n */\nexport default function ArrayFieldItemTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: ArrayFieldItemTemplateType<T, S, F>) {\n const { children, hasToolbar, uiSchema, registry, buttonsProps } = props\n const uiOptions = getUiOptions<T, S, F>(uiSchema)\n const ArrayFieldItemButtonsTemplate = getTemplate<\n 'ArrayFieldItemButtonsTemplate',\n T,\n S,\n F\n >('ArrayFieldItemButtonsTemplate', registry, uiOptions)\n return (\n <Grid\n container\n className={`rjsf-array-item`}\n sx={{\n gap: 2,\n justifyContent: 'space-between',\n }}\n >\n <Grid item={true} xs>\n <Box\n sx={{\n mb: 2,\n }}\n >\n {children}\n </Box>\n </Grid>\n {hasToolbar && (\n <Grid\n item={true}\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 1,\n justifyContent: 'flex-start',\n alignSelf: 'start',\n my: 1,\n }}\n >\n <ArrayFieldItemButtonsTemplate {...buttonsProps} />\n </Grid>\n )}\n </Grid>\n )\n}\n"],"mappings":";;;;AAcA,SAAwB,EAItB,GAA4C;CAC5C,IAAM,EAAE,aAAU,eAAY,aAAU,aAAU,oBAAiB,GAE7D,IAAgC,EAKpC,iCAAiC,GANjB,EAAsB,EAMK,CAAU;AACvD,QACE,kBAAC,GAAD;EACE,WAAA;EACA,WAAW;EACX,IAAI;GACF,KAAK;GACL,gBAAgB;GACjB;YANH,CAQE,kBAAC,GAAD;GAAM,MAAM;GAAM,IAAA;aAChB,kBAAC,GAAD;IACE,IAAI,EACF,IAAI,GACL;IAEA;IACG,CAAA;GACD,CAAA,EACN,KACC,kBAAC,GAAD;GACE,MAAM;GACN,IAAI;IACF,SAAS;IACT,eAAe;IACf,KAAK;IACL,gBAAgB;IAChB,WAAW;IACX,IAAI;IACL;aAED,kBAAC,GAAD,EAA+B,GAAI,GAAgB,CAAA;GAC9C,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseInputTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/BaseInputTemplate.tsx"],"sourcesContent":["import { CustomFormContext } from '@/components/JsonSchemaForm/CustomFormContext'\nimport { ChangeEvent, FocusEvent } from 'react'\nimport TextField, { TextFieldProps } from '@mui/material/TextField'\nimport {\n ariaDescribedByIds,\n BaseInputTemplateProps,\n examplesId,\n getInputProps,\n labelValue,\n FormContextType,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\nconst TYPES_THAT_SHRINK_LABEL = ['date', 'datetime-local', 'file', 'time']\n\n/** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme.\n * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only.\n * It can be customized/overridden for other themes or individual implementations as needed.\n *\n * @param props - The `WidgetProps` for this template\n */\nexport default function BaseInputTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: BaseInputTemplateProps<T, S, F>) {\n const {\n id,\n name, // remove this from textFieldProps\n placeholder: placeholderFromProps,\n required,\n readonly,\n disabled,\n type,\n label,\n hideLabel: _hideLabel,\n hideError: _hideError,\n value,\n onChange,\n onChangeOverride,\n onBlur,\n onFocus,\n autofocus,\n options,\n schema,\n uiSchema,\n rawErrors = [],\n formContext,\n registry,\n InputLabelProps,\n ...textFieldProps\n } = props\n const hideLabel = true\n const inputProps = getInputProps<T, S, F>(schema, type, options)\n // Now we need to pull out the step, min, max into an inner `inputProps` for material-ui\n const { step, min, max, ...rest } = inputProps\n const otherProps = {\n inputProps: {\n step,\n min,\n max,\n ...(schema.examples ? { list: examplesId<T>(id) } : undefined),\n },\n ...rest,\n }\n const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) =>\n onChange(value === '' ? options.emptyValue : value)\n const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) =>\n onBlur(id, value)\n const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) =>\n onFocus(id, value)\n const DisplayInputLabelProps = TYPES_THAT_SHRINK_LABEL.includes(type)\n ? {\n ...InputLabelProps,\n shrink: true,\n }\n : InputLabelProps\n\n let derivedValuePlaceholder: string | undefined = undefined\n if (schema.default || schema.const) {\n derivedValuePlaceholder =\n JSON.stringify(schema.default || schema.const) + ' (derived)'\n }\n\n const placeholder = (registry.formContext as CustomFormContext)\n .showDerivedAnnotationPlaceholder\n ? derivedValuePlaceholder || placeholderFromProps\n : placeholderFromProps\n\n return (\n <>\n <TextField\n id={id}\n name={id}\n placeholder={placeholder}\n label={labelValue(label || undefined, hideLabel, false)}\n autoFocus={autofocus}\n required={false}\n disabled={disabled || readonly}\n {...otherProps}\n value={value || value === 0 ? value : ''}\n error={rawErrors.length > 0}\n onChange={onChangeOverride || _onChange}\n onBlur={_onBlur}\n onFocus={_onFocus}\n {...(textFieldProps as TextFieldProps)}\n aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)}\n slotProps={{\n htmlInput: {\n 'aria-label': id,\n },\n\n inputLabel: DisplayInputLabelProps,\n }}\n />\n {Array.isArray(schema.examples) && (\n <datalist id={examplesId<T>(id)}>\n {(schema.examples as string[])\n .concat(\n schema.default && !schema.examples.includes(schema.default)\n ? ([schema.default] as string[])\n : [],\n )\n .map((example: any) => {\n return <option key={example} value={example} />\n })}\n </datalist>\n )}\n </>\n )\n}\n"],"mappings":";;;;AAcA,IAAM,IAA0B;CAAC;CAAQ;CAAkB;CAAQ;CAAO;AAQ1E,SAAwB,EAItB,GAAwC;CACxC,IAAM,EACJ,OACA,SACA,aAAa,GACb,aACA,aACA,aACA,SACA,UACA,WAAW,GACX,WAAW,GACX,UACA,aACA,qBACA,WACA,YACA,cACA,YACA,WACA,aACA,eAAY,EAAE,EACd,gBACA,aACA,oBACA,GAAG,MACD,GAIE,EAAE,SAAM,QAAK,QAAK,GAAG,MAFR,EAAuB,GAAQ,GAAM,EAAQ,EAG1D,IAAa;EACjB,YAAY;GACV;GACA;GACA;GACA,GAAI,EAAO,WAAW,EAAE,MAAM,EAAc,EAAG,EAAE,GAAG,KAAA;GACrD;EACD,GAAG;EACJ,EACK,KAAa,EAAE,QAAQ,EAAE,iBAC7B,EAAS,MAAU,KAAK,EAAQ,aAAa,EAAM,EAC/C,KAAW,EAAE,QAAQ,EAAE,iBAC3B,EAAO,GAAI,EAAM,EACb,KAAY,EAAE,QAAQ,EAAE,iBAC5B,EAAQ,GAAI,EAAM,EACd,IAAyB,EAAwB,SAAS,EAAK,GACjE;EACE,GAAG;EACH,QAAQ;EACT,GACD,GAEA;AAWJ,SAVI,EAAO,WAAW,EAAO,WAC3B,IACE,KAAK,UAAU,EAAO,WAAW,EAAO,MAAM,GAAG,eASnD,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACM;EACJ,MAAM;EACO,aAVE,EAAS,YAC3B,oCACC,KACA;EAQE,OAAO,EAAW,KAAS,KAAA,GAAW,IAAW,GAAM;EACvD,WAAW;EACX,UAAU;EACV,UAAU,KAAY;EACtB,GAAI;EACJ,OAAO,KAAS,MAAU,IAAI,IAAQ;EACtC,OAAO,EAAU,SAAS;EAC1B,UAAU,KAAoB;EAC9B,QAAQ;EACR,SAAS;EACT,GAAK;EACL,oBAAkB,EAAsB,GAAI,CAAC,CAAC,EAAO,SAAS;EAC9D,WAAW;GACT,WAAW,EACT,cAAc,GACf;GAED,YAAY;GACb;EACD,CAAA,EACD,MAAM,QAAQ,EAAO,SAAS,IAC7B,kBAAC,YAAD;EAAU,IAAI,EAAc,EAAG;YAC3B,EAAO,SACN,OACC,EAAO,WAAW,CAAC,EAAO,SAAS,SAAS,EAAO,QAAQ,GACtD,CAAC,EAAO,QAAQ,GACjB,EAAE,CACP,CACA,KAAK,MACG,kBAAC,UAAD,EAAsB,OAAO,GAAW,EAA3B,EAA2B,CAC/C;EACK,CAAA,CAEZ,EAAA,CAAA"}
1
+ {"version":3,"file":"BaseInputTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/BaseInputTemplate.tsx"],"sourcesContent":["import { CustomFormContext } from '@/components/JsonSchemaForm/CustomFormContext'\nimport { ChangeEvent, FocusEvent } from 'react'\nimport TextField, { TextFieldProps } from '@mui/material/TextField'\nimport {\n ariaDescribedByIds,\n BaseInputTemplateProps,\n examplesId,\n getInputProps,\n labelValue,\n FormContextType,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\nconst TYPES_THAT_SHRINK_LABEL = ['date', 'datetime-local', 'file', 'time']\n\n/** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme.\n * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only.\n * It can be customized/overridden for other themes or individual implementations as needed.\n *\n * @param props - The `WidgetProps` for this template\n */\nexport default function BaseInputTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: BaseInputTemplateProps<T, S, F>) {\n const {\n id,\n name, // remove this from textFieldProps\n placeholder: placeholderFromProps,\n required,\n readonly,\n disabled,\n type,\n label,\n hideLabel: _hideLabel,\n hideError: _hideError,\n value,\n onChange,\n onChangeOverride,\n onBlur,\n onFocus,\n autofocus,\n options,\n schema,\n uiSchema,\n rawErrors = [],\n formContext,\n registry,\n InputLabelProps,\n ...textFieldProps\n } = props\n const hideLabel = true\n const inputProps = getInputProps<T, S, F>(schema, type, options)\n // Now we need to pull out the step, min, max into an inner `inputProps` for material-ui\n const { step, min, max, ...rest } = inputProps\n const otherProps = {\n inputProps: {\n step,\n min,\n max,\n ...(schema.examples ? { list: examplesId<T>(id) } : undefined),\n },\n ...rest,\n }\n const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) =>\n onChange(value === '' ? options.emptyValue : value)\n const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) =>\n onBlur(id, value)\n const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) =>\n onFocus(id, value)\n const DisplayInputLabelProps = TYPES_THAT_SHRINK_LABEL.includes(type)\n ? {\n ...InputLabelProps,\n shrink: true,\n }\n : InputLabelProps\n\n let derivedValuePlaceholder: string | undefined = undefined\n if (schema.default || schema.const) {\n derivedValuePlaceholder =\n JSON.stringify(schema.default || schema.const) + ' (derived)'\n }\n\n const placeholder = (registry.formContext as CustomFormContext)\n .showDerivedAnnotationPlaceholder\n ? derivedValuePlaceholder || placeholderFromProps\n : placeholderFromProps\n\n return (\n <>\n <TextField\n id={id}\n name={id}\n placeholder={placeholder}\n label={labelValue(label || undefined, hideLabel, false)}\n autoFocus={autofocus}\n required={false}\n disabled={disabled || readonly}\n {...otherProps}\n value={value || value === 0 ? value : ''}\n error={rawErrors.length > 0}\n onChange={onChangeOverride || _onChange}\n onBlur={_onBlur}\n onFocus={_onFocus}\n {...(textFieldProps as TextFieldProps)}\n aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)}\n slotProps={{\n htmlInput: {\n 'aria-label': id,\n },\n\n inputLabel: DisplayInputLabelProps,\n }}\n />\n {Array.isArray(schema.examples) && (\n <datalist id={examplesId<T>(id)}>\n {(schema.examples as string[])\n .concat(\n schema.default && !schema.examples.includes(schema.default)\n ? ([schema.default] as string[])\n : [],\n )\n .map((example: any) => {\n return <option key={example} value={example} />\n })}\n </datalist>\n )}\n </>\n )\n}\n"],"mappings":";;;;AAcA,IAAM,IAA0B;CAAC;CAAQ;CAAkB;CAAQ;CAAO;AAQ1E,SAAwB,EAItB,GAAwC;CACxC,IAAM,EACJ,OACA,SACA,aAAa,GACb,aACA,aACA,aACA,SACA,UACA,WAAW,GACX,WAAW,GACX,UACA,aACA,qBACA,WACA,YACA,cACA,YACA,WACA,aACA,eAAY,EAAE,EACd,gBACA,aACA,oBACA,GAAG,MACD,GAIE,EAAE,SAAM,QAAK,QAAK,GAAG,MAFR,EAAuB,GAAQ,GAAM,EAEpB,EAC9B,IAAa;EACjB,YAAY;GACV;GACA;GACA;GACA,GAAI,EAAO,WAAW,EAAE,MAAM,EAAc,EAAG,EAAE,GAAG,KAAA;GACrD;EACD,GAAG;EACJ,EACK,KAAa,EAAE,QAAQ,EAAE,iBAC7B,EAAS,MAAU,KAAK,EAAQ,aAAa,EAAM,EAC/C,KAAW,EAAE,QAAQ,EAAE,iBAC3B,EAAO,GAAI,EAAM,EACb,KAAY,EAAE,QAAQ,EAAE,iBAC5B,EAAQ,GAAI,EAAM,EACd,IAAyB,EAAwB,SAAS,EAAK,GACjE;EACE,GAAG;EACH,QAAQ;EACT,GACD,GAEA;AAWJ,SAVI,EAAO,WAAW,EAAO,WAC3B,IACE,KAAK,UAAU,EAAO,WAAW,EAAO,MAAM,GAAG,eASnD,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACM;EACJ,MAAM;EACO,aAVE,EAAS,YAC3B,oCACC,KACA;EAQE,OAAO,EAAW,KAAS,KAAA,GAAW,IAAW,GAAM;EACvD,WAAW;EACX,UAAU;EACV,UAAU,KAAY;EACtB,GAAI;EACJ,OAAO,KAAS,MAAU,IAAI,IAAQ;EACtC,OAAO,EAAU,SAAS;EAC1B,UAAU,KAAoB;EAC9B,QAAQ;EACR,SAAS;EACT,GAAK;EACL,oBAAkB,EAAsB,GAAI,CAAC,CAAC,EAAO,SAAS;EAC9D,WAAW;GACT,WAAW,EACT,cAAc,GACf;GAED,YAAY;GACb;EACD,CAAA,EACD,MAAM,QAAQ,EAAO,SAAS,IAC7B,kBAAC,YAAD;EAAU,IAAI,EAAc,EAAG;YAC3B,EAAO,SACN,OACC,EAAO,WAAW,CAAC,EAAO,SAAS,SAAS,EAAO,QAAQ,GACtD,CAAC,EAAO,QAAQ,GACjB,EAAE,CACP,CACA,KAAK,MACG,kBAAC,UAAD,EAAsB,OAAO,GAAW,EAA3B,EAA2B,CAC/C;EACK,CAAA,CAEZ,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"FieldTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/FieldTemplate.tsx"],"sourcesContent":["import { RJSFInputLabelWrapper } from '@/components/JsonSchemaForm/templates/RJSFInputLabel'\nimport { GridLegacy as Grid, InputLabel } from '@mui/material'\nimport {\n FieldTemplateProps,\n FormContextType,\n getTemplate,\n getUiOptions,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\nexport function FieldTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: FieldTemplateProps<T, S, F>) {\n const {\n id,\n label,\n children,\n errors,\n help,\n description,\n hidden,\n required,\n displayLabel,\n registry,\n uiSchema,\n schema,\n hideError,\n rawErrors,\n } = props\n const uiOptions = getUiOptions<T, S, F>(uiSchema)\n const WrapIfAdditionalTemplate = getTemplate<\n 'WrapIfAdditionalTemplate',\n T,\n S,\n F\n >('WrapIfAdditionalTemplate', registry, uiOptions)\n\n if (hidden) {\n return <div className=\"hidden\">{children}</div>\n }\n const classNamesList: string[] = ['form-group', props.classNames || '']\n if (!hideError && rawErrors && rawErrors.length > 0) {\n classNamesList.push('has-error')\n }\n\n return (\n <WrapIfAdditionalTemplate\n {...props}\n classNames={classNamesList.join(' ').trim()}\n >\n <RJSFInputLabelWrapper<T, S, F>\n // RJSF hides labels for boolean checkboxes, but since we replaced checkboxes with a custom component, we want to show them\n hideLabel={!(displayLabel || schema.type === 'boolean')}\n fieldLabel={\n <InputLabel htmlFor={id}>\n {label}\n {required && <span className=\"required\">*</span>}\n </InputLabel>\n }\n description={description}\n registry={registry}\n >\n {children}\n <Grid item xs={12}>\n {errors}\n </Grid>\n </RJSFInputLabelWrapper>\n {help}\n </WrapIfAdditionalTemplate>\n )\n}\n"],"mappings":";;;;;AAWA,SAAgB,EAId,GAAoC;CACpC,IAAM,EACJ,OACA,UACA,aACA,WACA,SACA,gBACA,WACA,aACA,iBACA,aACA,aACA,WACA,cACA,iBACE,GAEE,IAA2B,EAK/B,4BAA4B,GANZ,EAAsB,EAAS,CAMC;AAElD,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;EAAU;EAAe,CAAA;CAEjD,IAAM,IAA2B,CAAC,cAAc,EAAM,cAAc,GAAG;AAKvE,QAJI,CAAC,KAAa,KAAa,EAAU,SAAS,KAChD,EAAe,KAAK,YAAY,EAIhC,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAe,KAAK,IAAI,CAAC,MAAM;YAF7C,CAIE,kBAAC,GAAD;GAEE,WAAW,EAAE,KAAgB,EAAO,SAAS;GAC7C,YACE,kBAAC,GAAD;IAAY,SAAS;cAArB,CACG,GACA,KAAY,kBAAC,QAAD;KAAM,WAAU;eAAW;KAAQ,CAAA,CACrC;;GAEF;GACH;aAVZ,CAYG,GACD,kBAAC,GAAD;IAAM,MAAA;IAAK,IAAI;cACZ;IACI,CAAA,CACe;MACvB,EACwB"}
1
+ {"version":3,"file":"FieldTemplate.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/FieldTemplate.tsx"],"sourcesContent":["import { RJSFInputLabelWrapper } from '@/components/JsonSchemaForm/templates/RJSFInputLabel'\nimport { GridLegacy as Grid, InputLabel } from '@mui/material'\nimport {\n FieldTemplateProps,\n FormContextType,\n getTemplate,\n getUiOptions,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\n\nexport function FieldTemplate<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: FieldTemplateProps<T, S, F>) {\n const {\n id,\n label,\n children,\n errors,\n help,\n description,\n hidden,\n required,\n displayLabel,\n registry,\n uiSchema,\n schema,\n hideError,\n rawErrors,\n } = props\n const uiOptions = getUiOptions<T, S, F>(uiSchema)\n const WrapIfAdditionalTemplate = getTemplate<\n 'WrapIfAdditionalTemplate',\n T,\n S,\n F\n >('WrapIfAdditionalTemplate', registry, uiOptions)\n\n if (hidden) {\n return <div className=\"hidden\">{children}</div>\n }\n const classNamesList: string[] = ['form-group', props.classNames || '']\n if (!hideError && rawErrors && rawErrors.length > 0) {\n classNamesList.push('has-error')\n }\n\n return (\n <WrapIfAdditionalTemplate\n {...props}\n classNames={classNamesList.join(' ').trim()}\n >\n <RJSFInputLabelWrapper<T, S, F>\n // RJSF hides labels for boolean checkboxes, but since we replaced checkboxes with a custom component, we want to show them\n hideLabel={!(displayLabel || schema.type === 'boolean')}\n fieldLabel={\n <InputLabel htmlFor={id}>\n {label}\n {required && <span className=\"required\">*</span>}\n </InputLabel>\n }\n description={description}\n registry={registry}\n >\n {children}\n <Grid item xs={12}>\n {errors}\n </Grid>\n </RJSFInputLabelWrapper>\n {help}\n </WrapIfAdditionalTemplate>\n )\n}\n"],"mappings":";;;;;AAWA,SAAgB,EAId,GAAoC;CACpC,IAAM,EACJ,OACA,UACA,aACA,WACA,SACA,gBACA,WACA,aACA,iBACA,aACA,aACA,WACA,cACA,iBACE,GAEE,IAA2B,EAK/B,4BAA4B,GANZ,EAAsB,EAMA,CAAU;AAElD,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;EAAU;EAAe,CAAA;CAEjD,IAAM,IAA2B,CAAC,cAAc,EAAM,cAAc,GAAG;AAKvE,QAJI,CAAC,KAAa,KAAa,EAAU,SAAS,KAChD,EAAe,KAAK,YAAY,EAIhC,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAe,KAAK,IAAI,CAAC,MAAM;YAF7C,CAIE,kBAAC,GAAD;GAEE,WAAW,EAAE,KAAgB,EAAO,SAAS;GAC7C,YACE,kBAAC,GAAD;IAAY,SAAS;cAArB,CACG,GACA,KAAY,kBAAC,QAAD;KAAM,WAAU;eAAW;KAAQ,CAAA,CACrC;;GAEF;GACH;aAVZ,CAYG,GACD,kBAAC,GAAD;IAAM,MAAA;IAAK,IAAI;cACZ;IACI,CAAA,CACe;MACvB,EACwB"}
@@ -1 +1 @@
1
- {"version":3,"file":"RJSFInputLabel.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"sourcesContent":["import { StyledPopover } from '@/components/styled/StyledPopover'\nimport { HelpOutline, HelpTwoTone } from '@mui/icons-material'\nimport { Collapse, IconButton, Tooltip } from '@mui/material'\nimport {\n FormContextType,\n Registry,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\nimport { PropsWithChildren, useState } from 'react'\n\ntype RJSFInputLabelProps<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n> = PropsWithChildren<{\n /** If true, the label will not be shown\n * @default false */\n hideLabel?: boolean\n /** The rendered label of the field */\n fieldLabel: React.ReactNode\n /** The rendered description of the field */\n description: React.ReactNode\n /** The `registry` object */\n registry: Registry<T, S, F>\n}>\n\n/**\n * Component that handles rendering our custom input label and description fields for RJSF.\n */\nexport function RJSFInputLabelWrapper<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: RJSFInputLabelProps<T, S, F>) {\n const {\n hideLabel = false,\n fieldLabel,\n description,\n registry,\n children,\n } = props\n const descriptionVariant =\n registry.formContext.descriptionVariant || 'popover'\n\n const [showDetails, setShowDetails] = useState(false)\n\n const expandButton = (\n <Tooltip title={'More Info'}>\n <IconButton\n onClick={e => {\n e.preventDefault()\n setShowDetails(!showDetails)\n }}\n aria-expanded={showDetails}\n size={'small'}\n >\n <HelpOutline color={'primary'} sx={{ width: '16px', height: '16px' }} />\n </IconButton>\n </Tooltip>\n )\n\n const popoverButton = (\n <StyledPopover popoverContent={description} maxWidth=\"350px\">\n <HelpTwoTone className={`HelpButton`} />\n </StyledPopover>\n )\n\n return (\n <>\n {!hideLabel && (\n <div className=\"LabelContainer\">\n {fieldLabel}\n {description && descriptionVariant === 'popover' && popoverButton}\n {description && descriptionVariant === 'expand' && expandButton}\n </div>\n )}\n {children}\n {!hideLabel && descriptionVariant === 'expand' && (\n <Collapse className=\"field-description\" in={showDetails}>\n {description}\n </Collapse>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;AA8BA,SAAgB,EAId,GAAqC;CACrC,IAAM,EACJ,eAAY,IACZ,eACA,gBACA,aACA,gBACE,GACE,IACJ,EAAS,YAAY,sBAAsB,WAEvC,CAAC,GAAa,KAAkB,EAAS,GAAM;AAuBrD,QACE,kBAAA,GAAA,EAAA,UAAA;EACG,CAAC,KACA,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG;IACA,KAAe,MAAuB,aAV7C,kBAAC,GAAD;KAAe,gBAAgB;KAAa,UAAS;eACnD,kBAAC,GAAD,EAAa,WAAW,cAAgB,CAAA;KAC1B,CAAA;IAST,KAAe,MAAuB,YA1B7C,kBAAC,GAAD;KAAS,OAAO;eACd,kBAAC,GAAD;MACE,UAAS,MAAK;AAEZ,OADA,EAAE,gBAAgB,EAClB,EAAe,CAAC,EAAY;;MAE9B,iBAAe;MACf,MAAM;gBAEN,kBAAC,GAAD;OAAa,OAAO;OAAW,IAAI;QAAE,OAAO;QAAQ,QAAQ;QAAQ;OAAI,CAAA;MAC7D,CAAA;KACL,CAAA;IAgBA;;EAEP;EACA,CAAC,KAAa,MAAuB,YACpC,kBAAC,GAAD;GAAU,WAAU;GAAoB,IAAI;aACzC;GACQ,CAAA;EAEZ,EAAA,CAAA"}
1
+ {"version":3,"file":"RJSFInputLabel.js","names":[],"sources":["../../../../src/components/JsonSchemaForm/templates/RJSFInputLabel.tsx"],"sourcesContent":["import { StyledPopover } from '@/components/styled/StyledPopover'\nimport { HelpOutline, HelpTwoTone } from '@mui/icons-material'\nimport { Collapse, IconButton, Tooltip } from '@mui/material'\nimport {\n FormContextType,\n Registry,\n RJSFSchema,\n StrictRJSFSchema,\n} from '@rjsf/utils'\nimport { PropsWithChildren, useState } from 'react'\n\ntype RJSFInputLabelProps<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n> = PropsWithChildren<{\n /** If true, the label will not be shown\n * @default false */\n hideLabel?: boolean\n /** The rendered label of the field */\n fieldLabel: React.ReactNode\n /** The rendered description of the field */\n description: React.ReactNode\n /** The `registry` object */\n registry: Registry<T, S, F>\n}>\n\n/**\n * Component that handles rendering our custom input label and description fields for RJSF.\n */\nexport function RJSFInputLabelWrapper<\n T = any,\n S extends StrictRJSFSchema = RJSFSchema,\n F extends FormContextType = any,\n>(props: RJSFInputLabelProps<T, S, F>) {\n const {\n hideLabel = false,\n fieldLabel,\n description,\n registry,\n children,\n } = props\n const descriptionVariant =\n registry.formContext.descriptionVariant || 'popover'\n\n const [showDetails, setShowDetails] = useState(false)\n\n const expandButton = (\n <Tooltip title={'More Info'}>\n <IconButton\n onClick={e => {\n e.preventDefault()\n setShowDetails(!showDetails)\n }}\n aria-expanded={showDetails}\n size={'small'}\n >\n <HelpOutline color={'primary'} sx={{ width: '16px', height: '16px' }} />\n </IconButton>\n </Tooltip>\n )\n\n const popoverButton = (\n <StyledPopover popoverContent={description} maxWidth=\"350px\">\n <HelpTwoTone className={`HelpButton`} />\n </StyledPopover>\n )\n\n return (\n <>\n {!hideLabel && (\n <div className=\"LabelContainer\">\n {fieldLabel}\n {description && descriptionVariant === 'popover' && popoverButton}\n {description && descriptionVariant === 'expand' && expandButton}\n </div>\n )}\n {children}\n {!hideLabel && descriptionVariant === 'expand' && (\n <Collapse className=\"field-description\" in={showDetails}>\n {description}\n </Collapse>\n )}\n </>\n )\n}\n"],"mappings":";;;;;;AA8BA,SAAgB,EAId,GAAqC;CACrC,IAAM,EACJ,eAAY,IACZ,eACA,gBACA,aACA,gBACE,GACE,IACJ,EAAS,YAAY,sBAAsB,WAEvC,CAAC,GAAa,KAAkB,EAAS,GAAM;AAuBrD,QACE,kBAAA,GAAA,EAAA,UAAA;EACG,CAAC,KACA,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG;IACA,KAAe,MAAuB,aAV7C,kBAAC,GAAD;KAAe,gBAAgB;KAAa,UAAS;eACnD,kBAAC,GAAD,EAAa,WAAW,cAAgB,CAAA;KAC1B,CAQ0C;IACnD,KAAe,MAAuB,YA1B7C,kBAAC,GAAD;KAAS,OAAO;eACd,kBAAC,GAAD;MACE,UAAS,MAAK;AAEZ,OADA,EAAE,gBAAgB,EAClB,EAAe,CAAC,EAAY;;MAE9B,iBAAe;MACf,MAAM;gBAEN,kBAAC,GAAD;OAAa,OAAO;OAAW,IAAI;QAAE,OAAO;QAAQ,QAAQ;QAAQ;OAAI,CAAA;MAC7D,CAAA;KACL,CAe+C;IAC/C;;EAEP;EACA,CAAC,KAAa,MAAuB,YACpC,kBAAC,GAAD;GAAU,WAAU;GAAoB,IAAI;aACzC;GACQ,CAAA;EAEZ,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownGithub.js","names":[],"sources":["../../../src/components/Markdown/MarkdownGithub.tsx"],"sourcesContent":["import { useFileContent } from '@/synapse-queries/file/useFiles'\nimport { useLatestTag } from '@/synapse-queries/github/useGithub'\nimport { Box, Button, Container } from '@mui/material'\nimport { SkeletonParagraph } from '../Skeleton'\nimport MarkdownSynapse from './MarkdownSynapse'\nimport { useMemo, useState } from 'react'\nimport { replaceFileExtension } from '@/utils/functions/StringUtils'\n\nexport type MarkdownGithubProps = {\n repoOwner: string\n repoName: string\n filePath: string\n showDownloadButton?: boolean\n}\n\n/**\n * Loads the latest tagged version of the (presumably MD) file from GitHub\n * @returns\n */\nexport function MarkdownGithubLatestTag(props: MarkdownGithubProps) {\n const { repoOwner, repoName } = props\n const { data: latestTag } = useLatestTag(repoOwner, repoName)\n return <MarkdownGithub {...props} tagName={latestTag} />\n}\n\nconst handleDownload = (htmlContent: string, outputFileHtmlName: string) => {\n if (!htmlContent) return\n\n // Wrap in full HTML document structure\n const fullHtml = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\">\n <title>${outputFileHtmlName}</title>\n </head>\n <body style=\"margin: 0; padding: 20px; font-family: Arial, sans-serif; line-height: 24px;\">\n ${htmlContent}\n </body>\n </html>\n `\n\n // Create a Blob and a download link\n const blob = new Blob([fullHtml], { type: 'text/html' })\n const url = URL.createObjectURL(blob)\n\n const a = document.createElement('a')\n a.href = url\n a.download = outputFileHtmlName\n a.click()\n\n URL.revokeObjectURL(url)\n}\n\n/**\n * Load MD file content from GitHub (using the given tag)\n * @returns\n */\nfunction MarkdownGithub({\n repoOwner,\n repoName,\n filePath,\n tagName,\n showDownloadButton = false,\n}: MarkdownGithubProps & {\n tagName?: string\n}) {\n const [htmlContent, setHtmlContent] = useState<string | null | undefined>(\n null,\n )\n\n const outputFileHtmlName = useMemo(\n () => replaceFileExtension(filePath, 'html'),\n [filePath],\n )\n\n const { data: fileContent } = useFileContent(\n `https://cdn.jsdelivr.net/gh/${repoOwner}/${repoName}@${tagName}/${filePath}`,\n {\n enabled: !!tagName,\n },\n )\n\n const loadingUI = (\n <Box sx={{ width: '100%' }}>\n <SkeletonParagraph rowHeight=\"30px\" numRows={70} />\n </Box>\n )\n return (\n <Container\n sx={{\n '> .markdown': {\n px: '10px', //without this, numbered lists in the md overflow left (and are cut off)\n },\n }}\n >\n {showDownloadButton && htmlContent && (\n <Box\n sx={{\n display: 'flex',\n float: 'right',\n mt: '15px',\n }}\n >\n <Button\n variant={'outlined'}\n color=\"primary\"\n sx={{ mb: 1 }}\n onClick={() => handleDownload(htmlContent, outputFileHtmlName)}\n >\n Download\n </Button>\n </Box>\n )}\n {fileContent ? (\n <MarkdownSynapse\n markdown={fileContent}\n onMarkdownProcessingDone={setHtmlContent}\n />\n ) : (\n loadingUI\n )}\n </Container>\n )\n}\n\nexport default MarkdownGithub\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,EAAwB,GAA4B;CAClE,IAAM,EAAE,cAAW,gBAAa,GAC1B,EAAE,MAAM,MAAc,EAAa,GAAW,EAAS;AAC7D,QAAO,kBAAC,GAAD;EAAgB,GAAI;EAAO,SAAS;EAAa,CAAA;;AAG1D,IAAM,KAAkB,GAAqB,MAA+B;AAC1E,KAAI,CAAC,EAAa;CAGlB,IAAM,IAAW;;;;;mBAKA,EAAmB;;;YAG1B,EAAY;;;OAMhB,IAAO,IAAI,KAAK,CAAC,EAAS,EAAE,EAAE,MAAM,aAAa,CAAC,EAClD,IAAM,IAAI,gBAAgB,EAAK,EAE/B,IAAI,SAAS,cAAc,IAAI;AAKrC,CAJA,EAAE,OAAO,GACT,EAAE,WAAW,GACb,EAAE,OAAO,EAET,IAAI,gBAAgB,EAAI;;AAO1B,SAAS,EAAe,EACtB,cACA,aACA,aACA,YACA,wBAAqB,MAGpB;CACD,IAAM,CAAC,GAAa,KAAkB,EACpC,KACD,EAEK,IAAqB,QACnB,EAAqB,GAAU,OAAO,EAC5C,CAAC,EAAS,CACX,EAEK,EAAE,MAAM,MAAgB,EAC5B,+BAA+B,EAAU,GAAG,EAAS,GAAG,EAAQ,GAAG,KACnE,EACE,SAAS,CAAC,CAAC,GACZ,CACF;AAOD,QACE,kBAAC,GAAD;EACE,IAAI,EACF,eAAe,EACb,IAAI,QACL,EACF;YALH,CAOG,KAAsB,KACrB,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,OAAO;IACP,IAAI;IACL;aAED,kBAAC,GAAD;IACE,SAAS;IACT,OAAM;IACN,IAAI,EAAE,IAAI,GAAG;IACb,eAAe,EAAe,GAAa,EAAmB;cAC/D;IAEQ,CAAA;GACL,CAAA,EAEP,IACC,kBAAC,GAAD;GACE,UAAU;GACV,0BAA0B;GAC1B,CAAA,GAlCN,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO,QAAQ;aACxB,kBAAC,GAAD;IAAmB,WAAU;IAAO,SAAS;IAAM,CAAA;GAC/C,CAAA,CAoCM"}
1
+ {"version":3,"file":"MarkdownGithub.js","names":[],"sources":["../../../src/components/Markdown/MarkdownGithub.tsx"],"sourcesContent":["import { useFileContent } from '@/synapse-queries/file/useFiles'\nimport { useLatestTag } from '@/synapse-queries/github/useGithub'\nimport { Box, Button, Container } from '@mui/material'\nimport { SkeletonParagraph } from '../Skeleton'\nimport MarkdownSynapse from './MarkdownSynapse'\nimport { useMemo, useState } from 'react'\nimport { replaceFileExtension } from '@/utils/functions/StringUtils'\n\nexport type MarkdownGithubProps = {\n repoOwner: string\n repoName: string\n filePath: string\n showDownloadButton?: boolean\n}\n\n/**\n * Loads the latest tagged version of the (presumably MD) file from GitHub\n * @returns\n */\nexport function MarkdownGithubLatestTag(props: MarkdownGithubProps) {\n const { repoOwner, repoName } = props\n const { data: latestTag } = useLatestTag(repoOwner, repoName)\n return <MarkdownGithub {...props} tagName={latestTag} />\n}\n\nconst handleDownload = (htmlContent: string, outputFileHtmlName: string) => {\n if (!htmlContent) return\n\n // Wrap in full HTML document structure\n const fullHtml = `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\">\n <title>${outputFileHtmlName}</title>\n </head>\n <body style=\"margin: 0; padding: 20px; font-family: Arial, sans-serif; line-height: 24px;\">\n ${htmlContent}\n </body>\n </html>\n `\n\n // Create a Blob and a download link\n const blob = new Blob([fullHtml], { type: 'text/html' })\n const url = URL.createObjectURL(blob)\n\n const a = document.createElement('a')\n a.href = url\n a.download = outputFileHtmlName\n a.click()\n\n URL.revokeObjectURL(url)\n}\n\n/**\n * Load MD file content from GitHub (using the given tag)\n * @returns\n */\nfunction MarkdownGithub({\n repoOwner,\n repoName,\n filePath,\n tagName,\n showDownloadButton = false,\n}: MarkdownGithubProps & {\n tagName?: string\n}) {\n const [htmlContent, setHtmlContent] = useState<string | null | undefined>(\n null,\n )\n\n const outputFileHtmlName = useMemo(\n () => replaceFileExtension(filePath, 'html'),\n [filePath],\n )\n\n const { data: fileContent } = useFileContent(\n `https://cdn.jsdelivr.net/gh/${repoOwner}/${repoName}@${tagName}/${filePath}`,\n {\n enabled: !!tagName,\n },\n )\n\n const loadingUI = (\n <Box sx={{ width: '100%' }}>\n <SkeletonParagraph rowHeight=\"30px\" numRows={70} />\n </Box>\n )\n return (\n <Container\n sx={{\n '> .markdown': {\n px: '10px', //without this, numbered lists in the md overflow left (and are cut off)\n },\n }}\n >\n {showDownloadButton && htmlContent && (\n <Box\n sx={{\n display: 'flex',\n float: 'right',\n mt: '15px',\n }}\n >\n <Button\n variant={'outlined'}\n color=\"primary\"\n sx={{ mb: 1 }}\n onClick={() => handleDownload(htmlContent, outputFileHtmlName)}\n >\n Download\n </Button>\n </Box>\n )}\n {fileContent ? (\n <MarkdownSynapse\n markdown={fileContent}\n onMarkdownProcessingDone={setHtmlContent}\n />\n ) : (\n loadingUI\n )}\n </Container>\n )\n}\n\nexport default MarkdownGithub\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,EAAwB,GAA4B;CAClE,IAAM,EAAE,cAAW,gBAAa,GAC1B,EAAE,MAAM,MAAc,EAAa,GAAW,EAAS;AAC7D,QAAO,kBAAC,GAAD;EAAgB,GAAI;EAAO,SAAS;EAAa,CAAA;;AAG1D,IAAM,KAAkB,GAAqB,MAA+B;AAC1E,KAAI,CAAC,EAAa;CAGlB,IAAM,IAAW;;;;;mBAKA,EAAmB;;;YAG1B,EAAY;;;OAMhB,IAAO,IAAI,KAAK,CAAC,EAAS,EAAE,EAAE,MAAM,aAAa,CAAC,EAClD,IAAM,IAAI,gBAAgB,EAAK,EAE/B,IAAI,SAAS,cAAc,IAAI;AAKrC,CAJA,EAAE,OAAO,GACT,EAAE,WAAW,GACb,EAAE,OAAO,EAET,IAAI,gBAAgB,EAAI;;AAO1B,SAAS,EAAe,EACtB,cACA,aACA,aACA,YACA,wBAAqB,MAGpB;CACD,IAAM,CAAC,GAAa,KAAkB,EACpC,KACD,EAEK,IAAqB,QACnB,EAAqB,GAAU,OAAO,EAC5C,CAAC,EAAS,CACX,EAEK,EAAE,MAAM,MAAgB,EAC5B,+BAA+B,EAAU,GAAG,EAAS,GAAG,EAAQ,GAAG,KACnE,EACE,SAAS,CAAC,CAAC,GACZ,CACF;AAOD,QACE,kBAAC,GAAD;EACE,IAAI,EACF,eAAe,EACb,IAAI,QACL,EACF;YALH,CAOG,KAAsB,KACrB,kBAAC,GAAD;GACE,IAAI;IACF,SAAS;IACT,OAAO;IACP,IAAI;IACL;aAED,kBAAC,GAAD;IACE,SAAS;IACT,OAAM;IACN,IAAI,EAAE,IAAI,GAAG;IACb,eAAe,EAAe,GAAa,EAAmB;cAC/D;IAEQ,CAAA;GACL,CAAA,EAEP,IACC,kBAAC,GAAD;GACE,UAAU;GACV,0BAA0B;GAC1B,CAAA,GAlCN,kBAAC,GAAD;GAAK,IAAI,EAAE,OAAO,QAAQ;aACxB,kBAAC,GAAD;IAAmB,WAAU;IAAO,SAAS;IAAM,CAAA;GAC/C,CAkCF,CAEQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownSynapse.js","names":[],"sources":["../../../src/components/Markdown/MarkdownSynapse.tsx"],"sourcesContent":["import {\n addIdsToReferenceWidgets,\n addIdsToTocWidgets,\n decodeXml,\n handleLinkClicks,\n processMath,\n fixInvalidNesting,\n} from '@/components/Markdown/MarkdownUtils'\nimport {\n useGetWikiPage,\n useGetWikiAttachments,\n} from '@/synapse-queries/wiki/useWiki'\nimport { sanitize } from '@/utils/functions/SanitizeHtmlUtils'\nimport { Link, Typography } from '@mui/material'\nimport markdownitContainer from '@sage-bionetworks/markdown-it-container'\nimport { ObjectType } from '@sage-bionetworks/synapse-types'\nimport MarkdownIt from 'markdown-it'\nimport markdownitBr from 'markdown-it-br'\nimport markdownitCentertext from 'markdown-it-center-text'\nimport markdownitInlineComments from 'markdown-it-inline-comments'\nimport markdownitStrikethroughAlt from 'markdown-it-strikethrough-alt'\nimport markdownitSub from 'markdown-it-sub-alt'\nimport markdownitSup from 'markdown-it-sup-alt'\nimport * as markdownitSynapse from 'markdown-it-synapse'\nimport markdownitSynapsePlugin from 'markdown-it-synapse'\nimport markdownitSynapseHeading from 'markdown-it-synapse-heading'\nimport markdownitMath from 'markdown-it-synapse-math'\nimport markdownitSynapseTable from 'markdown-it-synapse-table'\nimport { JSX, useEffect, useMemo, useRef } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport { SkeletonTable } from '../Skeleton'\nimport MarkdownWidget from './MarkdownWidget'\nimport { SynapseWikiContextProvider } from './SynapseWikiContext'\nimport Bookmarks from './widget/Bookmarks'\n\nexport const NO_WIKI_CONTENT = 'There is no content.'\n\nexport type MarkdownSynapseProps = {\n ownerId?: string\n wikiId?: string\n markdown?: string\n renderInline?: boolean\n objectType?: ObjectType\n loadingSkeletonRowCount?: number\n onMarkdownProcessingDone?: (htmlContent: string | null | undefined) => void\n showPlaceholderIfNoWikiContent?: boolean\n}\n\n// Configure markdown-it\nconst md = MarkdownIt({ html: true })\nmarkdownitSynapse.init_markdown_it(\n md,\n markdownitSub,\n markdownitSup,\n markdownitCentertext,\n markdownitSynapseHeading,\n markdownitSynapseTable,\n markdownitStrikethroughAlt,\n markdownitContainer,\n markdownitInlineComments,\n markdownitBr,\n)\nconst mathSuffix = ''\nmd.use(markdownitSynapsePlugin, mathSuffix, 'https://synapse.org').use(\n markdownitMath,\n mathSuffix,\n)\n\n/**\n * Process all the corresponding bookmark tags of the references made throughout the page and renders footnotes, if any exist.\n */\nfunction AddBookmarks(props: { renderInline: boolean; markdown: string }) {\n const { markdown, renderInline } = props\n const footnotesHtml = useMemo(() => {\n markdownitSynapse.resetFootnotes()\n createHTML(renderInline, markdown)\n return createHTML(renderInline, markdownitSynapse.footnotes()).__html\n }, [markdown, renderInline])\n\n if (footnotesHtml.length > 0) {\n return (\n <div>\n <Bookmarks footnotes={footnotesHtml} />\n </div>\n )\n }\n return null\n}\n\n/**\n * Given input text, generate markdown object to be passed onto inner html of some container.\n * @param {String} markdown The text being written in plain markdown\n * @returns {Object} Dictionary to be passed into dangerouslySetInnerHTML with markdown text\n */\nfunction createHTML(renderInline: boolean, markdown?: string) {\n if (!markdown) {\n return { __html: '' }\n }\n // Note - renderInline parses out any block level elements contained in the markdown\n const initText = renderInline\n ? md.renderInline(markdown)\n : md.render(markdown)\n const cleanText = sanitize(initText)\n return { __html: cleanText }\n}\n\n/**\n * Given widgetMap renders it in a React component (or originalMarkup in special cases.)\n *\n * @param {string} widgetParams The params of the widget to render\n * @param {string} originalMarkup The original markup text, this is a special case for widgets that\n * are html specific.\n * @returns the rendered markdown widget\n */\nfunction MapParamsToMarkdownWidget(props: {\n widgetParams: string\n originalMarkup: string\n}) {\n const { widgetParams, originalMarkup } = props\n // General workflow -\n // 1. Capture widget parameters\n // 2. Transform any widget xml parameters to standard text\n // 3. Split those parameters into a map\n // 4. Render that widget based on its parameters\n\n // steps 1,2\n const decodedWidgetParams = decodeXml(widgetParams)\n\n // decodedWidgetParams look like {<widget>?param1=xxx&param2=yyy}\n const questionIndex = decodedWidgetParams.indexOf('?')\n if (questionIndex === -1) {\n // e.g. toc is passed, there are no params\n return (\n <MarkdownWidget\n key={JSON.stringify(decodedWidgetParams)}\n widgetType={decodedWidgetParams as any}\n widgetParamsMapped={{}}\n originalMarkup={originalMarkup}\n />\n )\n }\n const widgetType = decodedWidgetParams.substring(0, questionIndex)\n const widgetParamsMapped: Record<string, string> = {}\n // map out params and their values\n decodedWidgetParams\n .substring(questionIndex + 1)\n .split('&')\n .forEach(keyPair => {\n let [key, value] = keyPair.split('=')\n value = decodeURIComponent(value)\n widgetParamsMapped[key] = value\n })\n return (\n <MarkdownWidget\n key={JSON.stringify(decodedWidgetParams)}\n widgetType={widgetType as any}\n widgetParamsMapped={widgetParamsMapped}\n originalMarkup={originalMarkup}\n />\n )\n}\n\n/**\n * Component that process all the markdown and transforms it to the appropriate Synapse widgets.\n *\n * @returns JSX of the markdown into widgets\n */\nfunction RenderMarkdown(props: {\n renderInline: boolean\n markdown: string\n isLoading: boolean\n showPlaceholderIfNoWikiContent: boolean\n}) {\n const { renderInline, markdown, isLoading, showPlaceholderIfNoWikiContent } =\n props\n\n const markup = useMemo(() => {\n // create initial markup\n let markup = createHTML(renderInline, markdown).__html\n // process reference widgets\n markup = addIdsToReferenceWidgets(markup)\n // process table of contents widgets\n markup = addIdsToTocWidgets(markup)\n\n return markup\n }, [markdown, renderInline])\n\n const processedDocuments = useMemo(() => {\n if (markup.length > 0) {\n const domParser = new DOMParser()\n const document = domParser.parseFromString(markup, 'text/html')\n\n fixInvalidNesting(document.body)\n\n return document.body\n }\n return null\n }, [markup])\n\n if (processedDocuments) {\n return <RecursiveRender element={processedDocuments} markdown={markup} />\n }\n\n if (!isLoading && showPlaceholderIfNoWikiContent && markup === '') {\n return (\n <Typography variant=\"body1Italic\" sx={{ mb: 1 }}>\n {NO_WIKI_CONTENT}\n </Typography>\n )\n }\n\n return\n}\n\n/**\n * recursiveRender will render react tree from HTML tree\n *\n * @param {Node} element This will be either a text Node or an HTMLElement\n * @param {string} markdown The original markdown, its kept as a special case for the table of contents widget\n * @returns {*}\n */\n\nfunction RecursiveRender(props: { element: Node; markdown: string }) {\n const { element, markdown } = props\n /*\n Recursively render the html tree created from the markdown, there are a few cases:\n 1. element is Node and is text in which case it is simply rendered\n 2. element is an HTMLElement and is: a self closing tag, has no children (e.g. <br>), or its a synapse widget and is\n rendered accordingly\n 3. element is an HTMLElement and has children so we loop through its childNodes, recurively render those, and then render its own tag\n as the parent of those child nodes. Note - childNodes was specifically chosen over .children because text Nodes\n would not come through .children\n */\n if (element.nodeType === Node.TEXT_NODE) {\n // case 1.\n return <>{element.textContent}</>\n } else if (\n element.nodeType === Node.ELEMENT_NODE &&\n element instanceof HTMLElement\n ) {\n const Tag: keyof JSX.IntrinsicElements =\n element.tagName.toLowerCase() as keyof JSX.IntrinsicElements\n const widgetParams = element.getAttribute('data-widgetparams')\n\n if (widgetParams) {\n // case 2\n // process widget\n return (\n <MapParamsToMarkdownWidget\n widgetParams={widgetParams}\n originalMarkup={markdown}\n />\n )\n }\n // manually add on props, depending on what comes through the markdown their could\n // be unforseen issues with attributes being misnamed according to what react will respect\n // e.g. class instead of className\n const attributes = element.attributes\n const rawProps: Record<string, string> = {}\n for (let i = 0; i < attributes.length; i++) {\n let name = ''\n let value = ''\n const attribute = attributes.item(i)\n if (attribute) {\n name = attribute.name\n value = attribute.value\n }\n if (name && value) {\n rawProps[name] = value\n }\n }\n\n const { style: styleString, class: className, ...props } = rawProps\n // Remap class to className\n props.className = className\n if (styleString) {\n // React expects the `style` prop to be an object, not a string, so use\n // the all-caps STYLE to pass the style string as a custom attribute\n props.STYLE = styleString\n }\n\n if (element.childNodes.length === 0) {\n // case 2\n // e.g. self closing tag like <br/> or <img>\n return <Tag {...props} />\n }\n\n // case 3\n // recursively render children\n const children = Array.from(element.childNodes).map((el, index) => {\n return <RecursiveRender key={index} element={el} markdown={markdown} />\n })\n // Render tagName as parent element of the children below\n switch (Tag) {\n case 'p':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'span':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h1':\n return (\n <Typography variant={'headline1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h2':\n return (\n <Typography variant={'headline2'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h3':\n return (\n <Typography variant={'headline3'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'ol':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'ul':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'a':\n return (\n <Link {...props} component={Tag}>\n {children}\n </Link>\n )\n default:\n if (Tag === 'body') {\n // The component ultimately wraps this content, so if the tag is 'body', just render the children.\n return children\n }\n return <Tag {...props}>{children}</Tag>\n }\n }\n return null\n}\n\n/**\n * Basic Markdown functionality for Synapse, supporting Images/Plots/References/Bookmarks/buttonlinks\n *\n * @class Markdown\n * @extends {Component}\n */\nfunction MarkdownSynapse(props: MarkdownSynapseProps) {\n const {\n ownerId,\n wikiId,\n objectType = ObjectType.ENTITY,\n markdown: markdownFromProps,\n onMarkdownProcessingDone,\n renderInline = false,\n loadingSkeletonRowCount,\n showPlaceholderIfNoWikiContent = false,\n } = props\n\n const markupRef = useRef<HTMLDivElement>(null)\n\n const {\n data: wikiPage,\n isLoading: isLoadingWikiPage,\n error: getWikiPageError,\n } = useGetWikiPage(\n {\n ownerObjectId: ownerId!,\n wikiPageId: wikiId!,\n ownerObjectType: objectType,\n },\n { enabled: Boolean(ownerId) },\n )\n\n const {\n data: wikiAttachments,\n isLoading: isLoadingWikiAttachments,\n error: getWikiAttachmentsError,\n } = useGetWikiAttachments(\n {\n ownerObjectId: ownerId!,\n wikiPageId: wikiId!,\n ownerObjectType: objectType,\n },\n {\n enabled: Boolean(ownerId),\n },\n )\n\n const isLoading = isLoadingWikiPage || isLoadingWikiAttachments\n const error = getWikiPageError || getWikiAttachmentsError\n\n /* Add click handler to the markdown area to handle clicking refs, ToC, etc. */\n useEffect(() => {\n const currentMarkupNode = markupRef.current\n if (currentMarkupNode) {\n currentMarkupNode.addEventListener('click', handleLinkClicks)\n }\n return () => {\n if (currentMarkupNode) {\n currentMarkupNode.removeEventListener('click', handleLinkClicks)\n }\n }\n }, [])\n\n const markdown = markdownFromProps || wikiPage?.markdown || ''\n\n /* When the markdown changes, call the `onMarkdownProcessingDone` callback */\n useEffect(() => {\n if (markdown && onMarkdownProcessingDone) {\n onMarkdownProcessingDone(createHTML(renderInline, markdown).__html)\n }\n }, [wikiPage, onMarkdownProcessingDone, renderInline])\n\n /* When the markdown changes, re-run the math processor */\n useEffect(() => {\n if (markdown) {\n processMath(markupRef)\n }\n }, [markdown])\n\n const loader = loadingSkeletonRowCount ? (\n <SkeletonTable numCols={1} numRows={loadingSkeletonRowCount} />\n ) : (\n <span className=\"spinner\" />\n )\n\n if (error) {\n return <ErrorBanner error={error} />\n }\n const content = (\n <SynapseWikiContextProvider\n wikiContext={{\n ownerId: props.ownerId,\n wikiId: props.wikiId,\n wikiPage: wikiPage,\n fileHandles: wikiAttachments,\n }}\n >\n {isLoading && loader}\n {(markdown || showPlaceholderIfNoWikiContent) && (\n <RenderMarkdown\n markdown={markdown}\n renderInline={renderInline}\n isLoading={isLoading}\n showPlaceholderIfNoWikiContent={showPlaceholderIfNoWikiContent}\n />\n )}\n {markdown && (\n <AddBookmarks renderInline={renderInline} markdown={markdown} />\n )}\n </SynapseWikiContextProvider>\n )\n if (renderInline) {\n return (\n <span\n data-testid=\"markdown\"\n className=\"markdown markdown-inline\"\n ref={markupRef}\n >\n {content}\n </span>\n )\n }\n return (\n <div data-testid=\"markdown\" className=\"markdown\" ref={markupRef}>\n {content}\n </div>\n )\n}\n\nexport { MarkdownSynapse, MarkdownSynapse as Markdown }\n\nexport default MarkdownSynapse\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownSynapse.js","names":[],"sources":["../../../src/components/Markdown/MarkdownSynapse.tsx"],"sourcesContent":["import {\n addIdsToReferenceWidgets,\n addIdsToTocWidgets,\n decodeXml,\n handleLinkClicks,\n processMath,\n fixInvalidNesting,\n} from '@/components/Markdown/MarkdownUtils'\nimport {\n useGetWikiPage,\n useGetWikiAttachments,\n} from '@/synapse-queries/wiki/useWiki'\nimport { sanitize } from '@/utils/functions/SanitizeHtmlUtils'\nimport { Link, Typography } from '@mui/material'\nimport markdownitContainer from '@sage-bionetworks/markdown-it-container'\nimport { ObjectType } from '@sage-bionetworks/synapse-types'\nimport MarkdownIt from 'markdown-it'\nimport markdownitBr from 'markdown-it-br'\nimport markdownitCentertext from 'markdown-it-center-text'\nimport markdownitInlineComments from 'markdown-it-inline-comments'\nimport markdownitStrikethroughAlt from 'markdown-it-strikethrough-alt'\nimport markdownitSub from 'markdown-it-sub-alt'\nimport markdownitSup from 'markdown-it-sup-alt'\nimport * as markdownitSynapse from 'markdown-it-synapse'\nimport markdownitSynapsePlugin from 'markdown-it-synapse'\nimport markdownitSynapseHeading from 'markdown-it-synapse-heading'\nimport markdownitMath from 'markdown-it-synapse-math'\nimport markdownitSynapseTable from 'markdown-it-synapse-table'\nimport { JSX, useEffect, useMemo, useRef } from 'react'\nimport { ErrorBanner } from '../error/ErrorBanner'\nimport { SkeletonTable } from '../Skeleton'\nimport MarkdownWidget from './MarkdownWidget'\nimport { SynapseWikiContextProvider } from './SynapseWikiContext'\nimport Bookmarks from './widget/Bookmarks'\n\nexport const NO_WIKI_CONTENT = 'There is no content.'\n\nexport type MarkdownSynapseProps = {\n ownerId?: string\n wikiId?: string\n markdown?: string\n renderInline?: boolean\n objectType?: ObjectType\n loadingSkeletonRowCount?: number\n onMarkdownProcessingDone?: (htmlContent: string | null | undefined) => void\n showPlaceholderIfNoWikiContent?: boolean\n}\n\n// Configure markdown-it\nconst md = MarkdownIt({ html: true })\nmarkdownitSynapse.init_markdown_it(\n md,\n markdownitSub,\n markdownitSup,\n markdownitCentertext,\n markdownitSynapseHeading,\n markdownitSynapseTable,\n markdownitStrikethroughAlt,\n markdownitContainer,\n markdownitInlineComments,\n markdownitBr,\n)\nconst mathSuffix = ''\nmd.use(markdownitSynapsePlugin, mathSuffix, 'https://synapse.org').use(\n markdownitMath,\n mathSuffix,\n)\n\n/**\n * Process all the corresponding bookmark tags of the references made throughout the page and renders footnotes, if any exist.\n */\nfunction AddBookmarks(props: { renderInline: boolean; markdown: string }) {\n const { markdown, renderInline } = props\n const footnotesHtml = useMemo(() => {\n markdownitSynapse.resetFootnotes()\n createHTML(renderInline, markdown)\n return createHTML(renderInline, markdownitSynapse.footnotes()).__html\n }, [markdown, renderInline])\n\n if (footnotesHtml.length > 0) {\n return (\n <div>\n <Bookmarks footnotes={footnotesHtml} />\n </div>\n )\n }\n return null\n}\n\n/**\n * Given input text, generate markdown object to be passed onto inner html of some container.\n * @param {String} markdown The text being written in plain markdown\n * @returns {Object} Dictionary to be passed into dangerouslySetInnerHTML with markdown text\n */\nfunction createHTML(renderInline: boolean, markdown?: string) {\n if (!markdown) {\n return { __html: '' }\n }\n // Note - renderInline parses out any block level elements contained in the markdown\n const initText = renderInline\n ? md.renderInline(markdown)\n : md.render(markdown)\n const cleanText = sanitize(initText)\n return { __html: cleanText }\n}\n\n/**\n * Given widgetMap renders it in a React component (or originalMarkup in special cases.)\n *\n * @param {string} widgetParams The params of the widget to render\n * @param {string} originalMarkup The original markup text, this is a special case for widgets that\n * are html specific.\n * @returns the rendered markdown widget\n */\nfunction MapParamsToMarkdownWidget(props: {\n widgetParams: string\n originalMarkup: string\n}) {\n const { widgetParams, originalMarkup } = props\n // General workflow -\n // 1. Capture widget parameters\n // 2. Transform any widget xml parameters to standard text\n // 3. Split those parameters into a map\n // 4. Render that widget based on its parameters\n\n // steps 1,2\n const decodedWidgetParams = decodeXml(widgetParams)\n\n // decodedWidgetParams look like {<widget>?param1=xxx&param2=yyy}\n const questionIndex = decodedWidgetParams.indexOf('?')\n if (questionIndex === -1) {\n // e.g. toc is passed, there are no params\n return (\n <MarkdownWidget\n key={JSON.stringify(decodedWidgetParams)}\n widgetType={decodedWidgetParams as any}\n widgetParamsMapped={{}}\n originalMarkup={originalMarkup}\n />\n )\n }\n const widgetType = decodedWidgetParams.substring(0, questionIndex)\n const widgetParamsMapped: Record<string, string> = {}\n // map out params and their values\n decodedWidgetParams\n .substring(questionIndex + 1)\n .split('&')\n .forEach(keyPair => {\n let [key, value] = keyPair.split('=')\n value = decodeURIComponent(value)\n widgetParamsMapped[key] = value\n })\n return (\n <MarkdownWidget\n key={JSON.stringify(decodedWidgetParams)}\n widgetType={widgetType as any}\n widgetParamsMapped={widgetParamsMapped}\n originalMarkup={originalMarkup}\n />\n )\n}\n\n/**\n * Component that process all the markdown and transforms it to the appropriate Synapse widgets.\n *\n * @returns JSX of the markdown into widgets\n */\nfunction RenderMarkdown(props: {\n renderInline: boolean\n markdown: string\n isLoading: boolean\n showPlaceholderIfNoWikiContent: boolean\n}) {\n const { renderInline, markdown, isLoading, showPlaceholderIfNoWikiContent } =\n props\n\n const markup = useMemo(() => {\n // create initial markup\n let markup = createHTML(renderInline, markdown).__html\n // process reference widgets\n markup = addIdsToReferenceWidgets(markup)\n // process table of contents widgets\n markup = addIdsToTocWidgets(markup)\n\n return markup\n }, [markdown, renderInline])\n\n const processedDocuments = useMemo(() => {\n if (markup.length > 0) {\n const domParser = new DOMParser()\n const document = domParser.parseFromString(markup, 'text/html')\n\n fixInvalidNesting(document.body)\n\n return document.body\n }\n return null\n }, [markup])\n\n if (processedDocuments) {\n return <RecursiveRender element={processedDocuments} markdown={markup} />\n }\n\n if (!isLoading && showPlaceholderIfNoWikiContent && markup === '') {\n return (\n <Typography variant=\"body1Italic\" sx={{ mb: 1 }}>\n {NO_WIKI_CONTENT}\n </Typography>\n )\n }\n\n return\n}\n\n/**\n * recursiveRender will render react tree from HTML tree\n *\n * @param {Node} element This will be either a text Node or an HTMLElement\n * @param {string} markdown The original markdown, its kept as a special case for the table of contents widget\n * @returns {*}\n */\n\nfunction RecursiveRender(props: { element: Node; markdown: string }) {\n const { element, markdown } = props\n /*\n Recursively render the html tree created from the markdown, there are a few cases:\n 1. element is Node and is text in which case it is simply rendered\n 2. element is an HTMLElement and is: a self closing tag, has no children (e.g. <br>), or its a synapse widget and is\n rendered accordingly\n 3. element is an HTMLElement and has children so we loop through its childNodes, recurively render those, and then render its own tag\n as the parent of those child nodes. Note - childNodes was specifically chosen over .children because text Nodes\n would not come through .children\n */\n if (element.nodeType === Node.TEXT_NODE) {\n // case 1.\n return <>{element.textContent}</>\n } else if (\n element.nodeType === Node.ELEMENT_NODE &&\n element instanceof HTMLElement\n ) {\n const Tag: keyof JSX.IntrinsicElements =\n element.tagName.toLowerCase() as keyof JSX.IntrinsicElements\n const widgetParams = element.getAttribute('data-widgetparams')\n\n if (widgetParams) {\n // case 2\n // process widget\n return (\n <MapParamsToMarkdownWidget\n widgetParams={widgetParams}\n originalMarkup={markdown}\n />\n )\n }\n // manually add on props, depending on what comes through the markdown their could\n // be unforseen issues with attributes being misnamed according to what react will respect\n // e.g. class instead of className\n const attributes = element.attributes\n const rawProps: Record<string, string> = {}\n for (let i = 0; i < attributes.length; i++) {\n let name = ''\n let value = ''\n const attribute = attributes.item(i)\n if (attribute) {\n name = attribute.name\n value = attribute.value\n }\n if (name && value) {\n rawProps[name] = value\n }\n }\n\n const { style: styleString, class: className, ...props } = rawProps\n // Remap class to className\n props.className = className\n if (styleString) {\n // React expects the `style` prop to be an object, not a string, so use\n // the all-caps STYLE to pass the style string as a custom attribute\n props.STYLE = styleString\n }\n\n if (element.childNodes.length === 0) {\n // case 2\n // e.g. self closing tag like <br/> or <img>\n return <Tag {...props} />\n }\n\n // case 3\n // recursively render children\n const children = Array.from(element.childNodes).map((el, index) => {\n return <RecursiveRender key={index} element={el} markdown={markdown} />\n })\n // Render tagName as parent element of the children below\n switch (Tag) {\n case 'p':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'span':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h1':\n return (\n <Typography variant={'headline1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h2':\n return (\n <Typography variant={'headline2'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'h3':\n return (\n <Typography variant={'headline3'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'ol':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'ul':\n return (\n <Typography variant={'body1'} {...props} component={Tag}>\n {children}\n </Typography>\n )\n case 'a':\n return (\n <Link {...props} component={Tag}>\n {children}\n </Link>\n )\n default:\n if (Tag === 'body') {\n // The component ultimately wraps this content, so if the tag is 'body', just render the children.\n return children\n }\n return <Tag {...props}>{children}</Tag>\n }\n }\n return null\n}\n\n/**\n * Basic Markdown functionality for Synapse, supporting Images/Plots/References/Bookmarks/buttonlinks\n *\n * @class Markdown\n * @extends {Component}\n */\nfunction MarkdownSynapse(props: MarkdownSynapseProps) {\n const {\n ownerId,\n wikiId,\n objectType = ObjectType.ENTITY,\n markdown: markdownFromProps,\n onMarkdownProcessingDone,\n renderInline = false,\n loadingSkeletonRowCount,\n showPlaceholderIfNoWikiContent = false,\n } = props\n\n const markupRef = useRef<HTMLDivElement>(null)\n\n const {\n data: wikiPage,\n isLoading: isLoadingWikiPage,\n error: getWikiPageError,\n } = useGetWikiPage(\n {\n ownerObjectId: ownerId!,\n wikiPageId: wikiId!,\n ownerObjectType: objectType,\n },\n { enabled: Boolean(ownerId) },\n )\n\n const {\n data: wikiAttachments,\n isLoading: isLoadingWikiAttachments,\n error: getWikiAttachmentsError,\n } = useGetWikiAttachments(\n {\n ownerObjectId: ownerId!,\n wikiPageId: wikiId!,\n ownerObjectType: objectType,\n },\n {\n enabled: Boolean(ownerId),\n },\n )\n\n const isLoading = isLoadingWikiPage || isLoadingWikiAttachments\n const error = getWikiPageError || getWikiAttachmentsError\n\n /* Add click handler to the markdown area to handle clicking refs, ToC, etc. */\n useEffect(() => {\n const currentMarkupNode = markupRef.current\n if (currentMarkupNode) {\n currentMarkupNode.addEventListener('click', handleLinkClicks)\n }\n return () => {\n if (currentMarkupNode) {\n currentMarkupNode.removeEventListener('click', handleLinkClicks)\n }\n }\n }, [])\n\n const markdown = markdownFromProps || wikiPage?.markdown || ''\n\n /* When the markdown changes, call the `onMarkdownProcessingDone` callback */\n useEffect(() => {\n if (markdown && onMarkdownProcessingDone) {\n onMarkdownProcessingDone(createHTML(renderInline, markdown).__html)\n }\n }, [wikiPage, onMarkdownProcessingDone, renderInline])\n\n /* When the markdown changes, re-run the math processor */\n useEffect(() => {\n if (markdown) {\n processMath(markupRef)\n }\n }, [markdown])\n\n const loader = loadingSkeletonRowCount ? (\n <SkeletonTable numCols={1} numRows={loadingSkeletonRowCount} />\n ) : (\n <span className=\"spinner\" />\n )\n\n if (error) {\n return <ErrorBanner error={error} />\n }\n const content = (\n <SynapseWikiContextProvider\n wikiContext={{\n ownerId: props.ownerId,\n wikiId: props.wikiId,\n wikiPage: wikiPage,\n fileHandles: wikiAttachments,\n }}\n >\n {isLoading && loader}\n {(markdown || showPlaceholderIfNoWikiContent) && (\n <RenderMarkdown\n markdown={markdown}\n renderInline={renderInline}\n isLoading={isLoading}\n showPlaceholderIfNoWikiContent={showPlaceholderIfNoWikiContent}\n />\n )}\n {markdown && (\n <AddBookmarks renderInline={renderInline} markdown={markdown} />\n )}\n </SynapseWikiContextProvider>\n )\n if (renderInline) {\n return (\n <span\n data-testid=\"markdown\"\n className=\"markdown markdown-inline\"\n ref={markupRef}\n >\n {content}\n </span>\n )\n }\n return (\n <div data-testid=\"markdown\" className=\"markdown\" ref={markupRef}>\n {content}\n </div>\n )\n}\n\nexport { MarkdownSynapse, MarkdownSynapse as Markdown }\n\nexport default MarkdownSynapse\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownUtils.js","names":[],"sources":["../../../src/components/Markdown/MarkdownUtils.ts"],"sourcesContent":["import katex from 'katex'\nimport { RefObject } from 'react'\nimport { MarkdownSynapseProps } from './MarkdownSynapse'\nimport MarkdownIt from 'markdown-it'\nimport { truncateString } from '@/utils/functions/StringUtils'\n\n/**\n * Find all math identified elements of the form [id^=\\\"mathjax-\\\"]\n * (e.g. <dom element id=\"mathjax-10\"> text </dom element>)\n * and transform them to their math markdown equivalents\n */\nexport function processMath(markupRef: RefObject<HTMLElement | null>) {\n if (!markupRef.current) {\n return\n }\n // use regex to grab all elements\n const mathExpressions =\n markupRef.current.querySelectorAll<HTMLElement>('[id^=\"mathjax-\"]')\n // go through all obtained elements and transform them with katex\n const regEx = new RegExp(/\\\\[()[\\]]/, 'g') // Look for a '\\' followed by either '(', ')', '[', or ']'. We delete these strings since they interfere with katex processing.\n mathExpressions.forEach(element => {\n if (element.textContent && !element.getAttribute('processed')) {\n // only process a math element once, used to double/triple process\n element.setAttribute('processed', 'true')\n const textContent = element.textContent.replace(regEx, '')\n return katex.render(textContent, element, {\n output: 'html',\n throwOnError: false,\n })\n }\n })\n}\n\n/**\n * When the markdown string is transferred over the network certain characters get transformed,\n * this does a simple transformation back to the original user's string.\n *\n * @param {string} xml\n * @returns\n * @memberof MarkdownSynapse\n */\nexport function decodeXml(xml: string) {\n const escapedOneToXmlSpecialMap = {\n '&amp;': '&',\n '&gt;': '>',\n '&lt;': '<',\n '&quot;': '\"',\n }\n return xml.replace(\n /(&quot;|&lt;|&gt;|&amp;)/g,\n (str: string, item: keyof typeof escapedOneToXmlSpecialMap) => {\n return escapedOneToXmlSpecialMap[item]\n },\n )\n}\n\nexport function addIdsToReferenceWidgets(text: string) {\n const referenceRegex =\n /<span.*?id=\"wikiReference.*?<span.*? data-widgetparams.*?span>/g\n let referenceCount = 1\n\n return text.replace(referenceRegex, () => {\n // replace all reference tags with id's of the form id=\"ref<number>\"\" that we can read onClick\n const current = referenceCount\n referenceCount += 1\n return `<a href=\"\" id=\"ref${current}\">[${current}]</a>`\n })\n}\n\nexport function addIdsToTocWidgets(text: string) {\n const tocId = 'SRC-header-'\n let tocIdCount = 1\n const TOC_HEADER_REGEX = /<h[1-6] toc=\"true\">.*<\\/h[1-6]>/gm\n\n return text.replace(TOC_HEADER_REGEX, (match: string) => {\n // replace with id of the form id=\"toc\" so we can read them with onclick events\n const curTocId = tocIdCount\n tocIdCount += 1\n const matchWithId = `${match.substring(\n 0,\n 3,\n )} id=\"${tocId}${curTocId}\"${match.substring(3)}`\n return matchWithId\n })\n}\n\n// Manually handle clicks to anchor tags where the scrollto isn't handled by page hash\nexport function handleLinkClicks(event: MouseEvent) {\n const genericElement = event.target as HTMLElement\n const currentTarget = event.currentTarget as HTMLElement\n if (genericElement.tagName === 'A' || genericElement.tagName === 'BUTTON') {\n const anchor = event.target as HTMLAnchorElement\n if (anchor.id.substring(0, 3) === 'ref') {\n event.preventDefault()\n\n // its a reference, so we scroll to the appropriate bookmark\n const referenceNumber = Number(currentTarget.id.substring(3)) // e.g. ref2 => '2'\n const goTo = currentTarget.querySelector(`#bookmark${referenceNumber}`)\n try {\n goTo!.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n })\n } catch (e) {\n console.log('error on scroll', e)\n }\n } else if (\n currentTarget.id !== null &&\n anchor.getAttribute('data-anchor')\n ) {\n event.preventDefault()\n // handle table of contents widget\n const idOfContent = anchor.getAttribute('data-anchor')\n const goTo = currentTarget.querySelector(`[id=\"${idOfContent}\"]`)\n try {\n goTo!.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n })\n } catch (e) {\n console.log('error on scroll', e)\n }\n }\n }\n}\n\nexport function stripHTML(myHtmlString: string): string {\n const el = document.createElement('div')\n el.innerHTML = myHtmlString\n return el.textContent || el.innerText || ''\n}\n\nexport function transformStringIntoMarkdownProps(\n value: string,\n isRawMarkdown?: boolean,\n) {\n const newProps: MarkdownSynapseProps = {}\n if (isRawMarkdown) {\n newProps.markdown = value\n } else {\n if (value.includes('/wiki/')) {\n // value looks like syn20681023/wiki/594680\n const split = value.split('/')\n const ownerId = split[0]\n const wikiId = split[2]\n newProps.ownerId = ownerId\n newProps.wikiId = wikiId\n } else if (value) {\n // else assume it's an ownerId\n newProps.ownerId = value\n }\n }\n return newProps\n}\n\nconst md = new MarkdownIt()\n\nexport const markdownToPlainText = (markdown: string, maxLength?: number) => {\n if (!markdown || markdown.length === 0) {\n return ''\n }\n\n const html = md.render(markdown)\n const plainText = stripHTML(html)\n .replace(/\\|/g, '')\n .replace(/#/g, '')\n .replace(/<Synapse widget>/g, '')\n\n return maxLength ? truncateString(plainText, maxLength) : plainText\n}\n\nconst blockLevelTags = [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'canvas',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'noscript',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'tfoot',\n 'ul',\n 'video',\n]\n\nconst inlineTags = ['span', 'a', 'em', 'strong', 'b', 'i', 'u', 'sub', 'sup']\n\nconst tableTags = ['table', 'thead', 'tbody', 'tr', 'tfoot']\n\n// Widget types that render inline elements and should not be treated as block-level\nconst inlineWidgetTypes = ['badge', 'image', 'imageLink', 'buttonlink']\n\nconst isInlineContainer = (node: Node): boolean => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n\n const element = node as HTMLElement\n const tag = element.tagName.toLowerCase()\n return inlineTags.includes(tag)\n}\n\n// Check if a node is a block level element\nexport const isBlockLevelElement = (node: Node): boolean => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n\n const element = node as HTMLElement\n const tag = element.tagName.toLowerCase()\n const isStandardBlock = blockLevelTags.includes(tag)\n\n const widgetParams = element.getAttribute('data-widgetparams')\n const isWidget =\n widgetParams !== null &&\n !inlineWidgetTypes.includes(widgetParams.split('?')[0])\n\n return isStandardBlock || isWidget\n}\n\nfunction isValidNesting(child: HTMLElement, ancestor: HTMLElement): boolean {\n // case 1: block level elements cannot be inside of inline containers\n if (isBlockLevelElement(child) && isInlineContainer(ancestor)) {\n return false\n }\n\n // case 2: buttons cannot be nested inside of other buttons\n if (\n ancestor.tagName.toLowerCase() === 'button' &&\n child.tagName.toLowerCase() === 'button'\n ) {\n return false\n }\n\n // A <p> tag cannot contain block-level elements (including other <p> tags)\n if (ancestor.tagName.toLowerCase() === 'p' && isBlockLevelElement(child)) {\n return false\n }\n\n return true\n}\n\n/**\n * Fixes invalid HTML nesting (e.g., <div> inside <p>) in a single O(n) pass.\n * It compares the current 'node' against a stack of its 'ancestors'.\n * @param node - The current DOM node being inspected.\n * @param ancestors - An array of the current node's parent elements\n */\nexport function fixInvalidNesting(\n node: Node,\n ancestors: HTMLElement[] = [],\n): void {\n // Whitespace-only text nodes are invalid children of table structure elements and must be removed.\n if (node.nodeType === Node.TEXT_NODE) {\n const parentTag = (node.parentNode as HTMLElement)?.tagName?.toLowerCase()\n\n if (tableTags.includes(parentTag) && !node.textContent?.trim()) {\n node.parentNode?.removeChild(node)\n }\n\n return\n }\n\n // We only care about element nodes\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return\n }\n\n const element = node as HTMLElement\n\n // We check the current element against every ancestor in the stack to see if there is any invalid nesting.\n // We iterate backwards (from immediate parent to root) so we fix the closest invalid container first.\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const ancestor = ancestors[i]\n\n // if the nesting is invalid\n if (!isValidNesting(element, ancestor)) {\n // change the ancestor to a div\n const div = element.ownerDocument.createElement('div')\n\n // Preserve all original attributes\n Array.from(ancestor.attributes).forEach(attr =>\n div.setAttribute(attr.name, attr.value),\n )\n\n // Move all children from the old element to the new <div>\n while (ancestor.firstChild) {\n div.appendChild(ancestor.firstChild)\n }\n\n // replace the ancestor with the new div\n if (ancestor.parentNode) {\n ancestor.parentNode.replaceChild(div, ancestor)\n }\n\n ancestors[i] = div // Update our local stack to reference to the new div\n }\n }\n\n // Push the current element to the stack before traversing children\n ancestors.push(element)\n\n Array.from(element.childNodes).forEach(child => {\n fixInvalidNesting(child, ancestors)\n })\n\n // Pop the current element off the stack after traversing its children\n ancestors.pop()\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownUtils.js","names":[],"sources":["../../../src/components/Markdown/MarkdownUtils.ts"],"sourcesContent":["import katex from 'katex'\nimport { RefObject } from 'react'\nimport { MarkdownSynapseProps } from './MarkdownSynapse'\nimport MarkdownIt from 'markdown-it'\nimport { truncateString } from '@/utils/functions/StringUtils'\n\n/**\n * Find all math identified elements of the form [id^=\\\"mathjax-\\\"]\n * (e.g. <dom element id=\"mathjax-10\"> text </dom element>)\n * and transform them to their math markdown equivalents\n */\nexport function processMath(markupRef: RefObject<HTMLElement | null>) {\n if (!markupRef.current) {\n return\n }\n // use regex to grab all elements\n const mathExpressions =\n markupRef.current.querySelectorAll<HTMLElement>('[id^=\"mathjax-\"]')\n // go through all obtained elements and transform them with katex\n const regEx = new RegExp(/\\\\[()[\\]]/, 'g') // Look for a '\\' followed by either '(', ')', '[', or ']'. We delete these strings since they interfere with katex processing.\n mathExpressions.forEach(element => {\n if (element.textContent && !element.getAttribute('processed')) {\n // only process a math element once, used to double/triple process\n element.setAttribute('processed', 'true')\n const textContent = element.textContent.replace(regEx, '')\n return katex.render(textContent, element, {\n output: 'html',\n throwOnError: false,\n })\n }\n })\n}\n\n/**\n * When the markdown string is transferred over the network certain characters get transformed,\n * this does a simple transformation back to the original user's string.\n *\n * @param {string} xml\n * @returns\n * @memberof MarkdownSynapse\n */\nexport function decodeXml(xml: string) {\n const escapedOneToXmlSpecialMap = {\n '&amp;': '&',\n '&gt;': '>',\n '&lt;': '<',\n '&quot;': '\"',\n }\n return xml.replace(\n /(&quot;|&lt;|&gt;|&amp;)/g,\n (str: string, item: keyof typeof escapedOneToXmlSpecialMap) => {\n return escapedOneToXmlSpecialMap[item]\n },\n )\n}\n\nexport function addIdsToReferenceWidgets(text: string) {\n const referenceRegex =\n /<span.*?id=\"wikiReference.*?<span.*? data-widgetparams.*?span>/g\n let referenceCount = 1\n\n return text.replace(referenceRegex, () => {\n // replace all reference tags with id's of the form id=\"ref<number>\"\" that we can read onClick\n const current = referenceCount\n referenceCount += 1\n return `<a href=\"\" id=\"ref${current}\">[${current}]</a>`\n })\n}\n\nexport function addIdsToTocWidgets(text: string) {\n const tocId = 'SRC-header-'\n let tocIdCount = 1\n const TOC_HEADER_REGEX = /<h[1-6] toc=\"true\">.*<\\/h[1-6]>/gm\n\n return text.replace(TOC_HEADER_REGEX, (match: string) => {\n // replace with id of the form id=\"toc\" so we can read them with onclick events\n const curTocId = tocIdCount\n tocIdCount += 1\n const matchWithId = `${match.substring(\n 0,\n 3,\n )} id=\"${tocId}${curTocId}\"${match.substring(3)}`\n return matchWithId\n })\n}\n\n// Manually handle clicks to anchor tags where the scrollto isn't handled by page hash\nexport function handleLinkClicks(event: MouseEvent) {\n const genericElement = event.target as HTMLElement\n const currentTarget = event.currentTarget as HTMLElement\n if (genericElement.tagName === 'A' || genericElement.tagName === 'BUTTON') {\n const anchor = event.target as HTMLAnchorElement\n if (anchor.id.substring(0, 3) === 'ref') {\n event.preventDefault()\n\n // its a reference, so we scroll to the appropriate bookmark\n const referenceNumber = Number(currentTarget.id.substring(3)) // e.g. ref2 => '2'\n const goTo = currentTarget.querySelector(`#bookmark${referenceNumber}`)\n try {\n goTo!.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n })\n } catch (e) {\n console.log('error on scroll', e)\n }\n } else if (\n currentTarget.id !== null &&\n anchor.getAttribute('data-anchor')\n ) {\n event.preventDefault()\n // handle table of contents widget\n const idOfContent = anchor.getAttribute('data-anchor')\n const goTo = currentTarget.querySelector(`[id=\"${idOfContent}\"]`)\n try {\n goTo!.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n })\n } catch (e) {\n console.log('error on scroll', e)\n }\n }\n }\n}\n\nexport function stripHTML(myHtmlString: string): string {\n const el = document.createElement('div')\n el.innerHTML = myHtmlString\n return el.textContent || el.innerText || ''\n}\n\nexport function transformStringIntoMarkdownProps(\n value: string,\n isRawMarkdown?: boolean,\n) {\n const newProps: MarkdownSynapseProps = {}\n if (isRawMarkdown) {\n newProps.markdown = value\n } else {\n if (value.includes('/wiki/')) {\n // value looks like syn20681023/wiki/594680\n const split = value.split('/')\n const ownerId = split[0]\n const wikiId = split[2]\n newProps.ownerId = ownerId\n newProps.wikiId = wikiId\n } else if (value) {\n // else assume it's an ownerId\n newProps.ownerId = value\n }\n }\n return newProps\n}\n\nconst md = new MarkdownIt()\n\nexport const markdownToPlainText = (markdown: string, maxLength?: number) => {\n if (!markdown || markdown.length === 0) {\n return ''\n }\n\n const html = md.render(markdown)\n const plainText = stripHTML(html)\n .replace(/\\|/g, '')\n .replace(/#/g, '')\n .replace(/<Synapse widget>/g, '')\n\n return maxLength ? truncateString(plainText, maxLength) : plainText\n}\n\nconst blockLevelTags = [\n 'address',\n 'article',\n 'aside',\n 'blockquote',\n 'canvas',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'noscript',\n 'ol',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'tfoot',\n 'ul',\n 'video',\n]\n\nconst inlineTags = ['span', 'a', 'em', 'strong', 'b', 'i', 'u', 'sub', 'sup']\n\nconst tableTags = ['table', 'thead', 'tbody', 'tr', 'tfoot']\n\n// Widget types that render inline elements and should not be treated as block-level\nconst inlineWidgetTypes = ['badge', 'image', 'imageLink', 'buttonlink']\n\nconst isInlineContainer = (node: Node): boolean => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n\n const element = node as HTMLElement\n const tag = element.tagName.toLowerCase()\n return inlineTags.includes(tag)\n}\n\n// Check if a node is a block level element\nexport const isBlockLevelElement = (node: Node): boolean => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false\n }\n\n const element = node as HTMLElement\n const tag = element.tagName.toLowerCase()\n const isStandardBlock = blockLevelTags.includes(tag)\n\n const widgetParams = element.getAttribute('data-widgetparams')\n const isWidget =\n widgetParams !== null &&\n !inlineWidgetTypes.includes(widgetParams.split('?')[0])\n\n return isStandardBlock || isWidget\n}\n\nfunction isValidNesting(child: HTMLElement, ancestor: HTMLElement): boolean {\n // case 1: block level elements cannot be inside of inline containers\n if (isBlockLevelElement(child) && isInlineContainer(ancestor)) {\n return false\n }\n\n // case 2: buttons cannot be nested inside of other buttons\n if (\n ancestor.tagName.toLowerCase() === 'button' &&\n child.tagName.toLowerCase() === 'button'\n ) {\n return false\n }\n\n // A <p> tag cannot contain block-level elements (including other <p> tags)\n if (ancestor.tagName.toLowerCase() === 'p' && isBlockLevelElement(child)) {\n return false\n }\n\n return true\n}\n\n/**\n * Fixes invalid HTML nesting (e.g., <div> inside <p>) in a single O(n) pass.\n * It compares the current 'node' against a stack of its 'ancestors'.\n * @param node - The current DOM node being inspected.\n * @param ancestors - An array of the current node's parent elements\n */\nexport function fixInvalidNesting(\n node: Node,\n ancestors: HTMLElement[] = [],\n): void {\n // Whitespace-only text nodes are invalid children of table structure elements and must be removed.\n if (node.nodeType === Node.TEXT_NODE) {\n const parentTag = (node.parentNode as HTMLElement)?.tagName?.toLowerCase()\n\n if (tableTags.includes(parentTag) && !node.textContent?.trim()) {\n node.parentNode?.removeChild(node)\n }\n\n return\n }\n\n // We only care about element nodes\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return\n }\n\n const element = node as HTMLElement\n\n // We check the current element against every ancestor in the stack to see if there is any invalid nesting.\n // We iterate backwards (from immediate parent to root) so we fix the closest invalid container first.\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const ancestor = ancestors[i]\n\n // if the nesting is invalid\n if (!isValidNesting(element, ancestor)) {\n // change the ancestor to a div\n const div = element.ownerDocument.createElement('div')\n\n // Preserve all original attributes\n Array.from(ancestor.attributes).forEach(attr =>\n div.setAttribute(attr.name, attr.value),\n )\n\n // Move all children from the old element to the new <div>\n while (ancestor.firstChild) {\n div.appendChild(ancestor.firstChild)\n }\n\n // replace the ancestor with the new div\n if (ancestor.parentNode) {\n ancestor.parentNode.replaceChild(div, ancestor)\n }\n\n ancestors[i] = div // Update our local stack to reference to the new div\n }\n }\n\n // Push the current element to the stack before traversing children\n ancestors.push(element)\n\n Array.from(element.childNodes).forEach(child => {\n fixInvalidNesting(child, ancestors)\n })\n\n // Pop the current element off the stack after traversing its children\n ancestors.pop()\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseWikiContext.js","names":[],"sources":["../../../src/components/Markdown/SynapseWikiContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from 'react'\nimport { FileHandleResults, WikiPage } from '@sage-bionetworks/synapse-types'\n\nexport type SynapseWikiContextType = {\n ownerId?: string\n wikiId?: string\n wikiPage?: Partial<WikiPage>\n /** Downloaded file handles that are attached to the wiki */\n fileHandles?: FileHandleResults\n}\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseWikiContext = createContext<\n SynapseWikiContextType | undefined\n>(undefined)\n\nexport type SynapseWikiContextProviderProps = {\n wikiContext?: SynapseWikiContextType\n children?: ReactNode\n}\n\n/**\n * Provides context related to Synapse Wikis\n * @param param0\n * @returns\n */\nexport function SynapseWikiContextProvider({\n children,\n wikiContext,\n}: SynapseWikiContextProviderProps) {\n return (\n <SynapseWikiContext.Provider value={wikiContext}>\n {children}\n </SynapseWikiContext.Provider>\n )\n}\n\nexport const SynapseWikiContextConsumer = SynapseWikiContext.Consumer\n\nexport function useWikiContext(): SynapseWikiContextType {\n const context = useContext(SynapseWikiContext)\n return context ?? {}\n}\n"],"mappings":";;;AAcA,IAAa,IAAqB,EAEhC,KAAA,EAAU;AAYZ,SAAgB,EAA2B,EACzC,aACA,kBACkC;AAClC,QACE,kBAAC,EAAmB,UAApB;EAA6B,OAAO;EACjC;EAC2B,CAAA;;AAIlC,IAAa,IAA6B,EAAmB;AAE7D,SAAgB,IAAyC;AAEvD,QADgB,EAAW,EAAmB,IAC5B,EAAE"}
1
+ {"version":3,"file":"SynapseWikiContext.js","names":[],"sources":["../../../src/components/Markdown/SynapseWikiContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext } from 'react'\nimport { FileHandleResults, WikiPage } from '@sage-bionetworks/synapse-types'\n\nexport type SynapseWikiContextType = {\n ownerId?: string\n wikiId?: string\n wikiPage?: Partial<WikiPage>\n /** Downloaded file handles that are attached to the wiki */\n fileHandles?: FileHandleResults\n}\n\n/**\n * This must be exported to use the context in class components.\n */\nexport const SynapseWikiContext = createContext<\n SynapseWikiContextType | undefined\n>(undefined)\n\nexport type SynapseWikiContextProviderProps = {\n wikiContext?: SynapseWikiContextType\n children?: ReactNode\n}\n\n/**\n * Provides context related to Synapse Wikis\n * @param param0\n * @returns\n */\nexport function SynapseWikiContextProvider({\n children,\n wikiContext,\n}: SynapseWikiContextProviderProps) {\n return (\n <SynapseWikiContext.Provider value={wikiContext}>\n {children}\n </SynapseWikiContext.Provider>\n )\n}\n\nexport const SynapseWikiContextConsumer = SynapseWikiContext.Consumer\n\nexport function useWikiContext(): SynapseWikiContextType {\n const context = useContext(SynapseWikiContext)\n return context ?? {}\n}\n"],"mappings":";;;AAcA,IAAa,IAAqB,EAEhC,KAAA,EAAU;AAYZ,SAAgB,EAA2B,EACzC,aACA,kBACkC;AAClC,QACE,kBAAC,EAAmB,UAApB;EAA6B,OAAO;EACjC;EAC2B,CAAA;;AAIlC,IAAa,IAA6B,EAAmB;AAE7D,SAAgB,IAAyC;AAEvD,QADgB,EAAW,EACpB,IAAW,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserMentionModal.js","names":[],"sources":["../../../src/components/Markdown/UserMentionModal.tsx"],"sourcesContent":["import { useCallback } from 'react'\nimport { DialogBase } from '../DialogBase'\nimport { TYPE_FILTER, UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport UserSearchBox from '../UserSearchBox/UserSearchBox'\n\nexport type UserMentionModalProps = {\n show: boolean\n onClose: () => void\n handleUserTag: (user: string) => void\n}\n\nexport function UserMentionModal({\n show,\n onClose,\n handleUserTag,\n}: UserMentionModalProps) {\n const onUserChange = useCallback(\n (selected: string | null, header: UserGroupHeader | null) => {\n if (selected && header) {\n handleUserTag(header.userName)\n }\n onClose()\n },\n [onClose, handleUserTag],\n )\n\n return (\n <>\n <DialogBase\n open={show}\n onCancel={onClose}\n title=\"Find User or Team\"\n content={\n <UserSearchBox\n placeholder=\"Search for a user or team name\"\n onChange={onUserChange}\n typeFilter={TYPE_FILTER.ALL}\n autoFocus={true}\n />\n }\n sx={{\n '.MuiDialog-paperFullWidth': {\n overflowY: 'visible',\n '.MuiDialogContent-root': { overflowY: 'visible' },\n },\n }}\n />\n </>\n )\n}\n"],"mappings":";;;;;;AAWA,SAAgB,EAAiB,EAC/B,SACA,YACA,oBACwB;AAWxB,QACE,kBAAA,GAAA,EAAA,UACE,kBAAC,GAAD;EACE,MAAM;EACN,UAAU;EACV,OAAM;EACN,SACE,kBAAC,GAAD;GACE,aAAY;GACZ,UAnBW,GAClB,GAAyB,MAAmC;AAI3D,IAHI,KAAY,KACd,EAAc,EAAO,SAAS,EAEhC,GAAS;MAEX,CAAC,GAAS,EAAc,CACzB;GAYS,YAAY,EAAY;GACxB,WAAW;GACX,CAAA;EAEJ,IAAI,EACF,6BAA6B;GAC3B,WAAW;GACX,0BAA0B,EAAE,WAAW,WAAW;GACnD,EACF;EACD,CAAA,EACD,CAAA"}
1
+ {"version":3,"file":"UserMentionModal.js","names":[],"sources":["../../../src/components/Markdown/UserMentionModal.tsx"],"sourcesContent":["import { useCallback } from 'react'\nimport { DialogBase } from '../DialogBase'\nimport { TYPE_FILTER, UserGroupHeader } from '@sage-bionetworks/synapse-types'\nimport UserSearchBox from '../UserSearchBox/UserSearchBox'\n\nexport type UserMentionModalProps = {\n show: boolean\n onClose: () => void\n handleUserTag: (user: string) => void\n}\n\nexport function UserMentionModal({\n show,\n onClose,\n handleUserTag,\n}: UserMentionModalProps) {\n const onUserChange = useCallback(\n (selected: string | null, header: UserGroupHeader | null) => {\n if (selected && header) {\n handleUserTag(header.userName)\n }\n onClose()\n },\n [onClose, handleUserTag],\n )\n\n return (\n <>\n <DialogBase\n open={show}\n onCancel={onClose}\n title=\"Find User or Team\"\n content={\n <UserSearchBox\n placeholder=\"Search for a user or team name\"\n onChange={onUserChange}\n typeFilter={TYPE_FILTER.ALL}\n autoFocus={true}\n />\n }\n sx={{\n '.MuiDialog-paperFullWidth': {\n overflowY: 'visible',\n '.MuiDialogContent-root': { overflowY: 'visible' },\n },\n }}\n />\n </>\n )\n}\n"],"mappings":";;;;;;AAWA,SAAgB,EAAiB,EAC/B,SACA,YACA,oBACwB;AAWxB,QACE,kBAAA,GAAA,EAAA,UACE,kBAAC,GAAD;EACE,MAAM;EACN,UAAU;EACV,OAAM;EACN,SACE,kBAAC,GAAD;GACE,aAAY;GACZ,UAnBW,GAClB,GAAyB,MAAmC;AAI3D,IAHI,KAAY,KACd,EAAc,EAAO,SAAS,EAEhC,GAAS;MAEX,CAAC,GAAS,EAAc,CAYN;GACV,YAAY,EAAY;GACxB,WAAW;GACX,CAAA;EAEJ,IAAI,EACF,6BAA6B;GAC3B,WAAW;GACX,0BAA0B,EAAE,WAAW,WAAW;GACnD,EACF;EACD,CAAA,EACD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownProvenanceGraph.js","names":[],"sources":["../../../../src/components/Markdown/widget/MarkdownProvenanceGraph.tsx"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport ProvenanceGraph from '../../ProvenanceGraph/ProvenanceGraph'\n\nexport type MarkdownProvenanceGraphProps = {\n entityList: string // comma delimited entity references of the form <synapse_ID>/version/<version_number>. The /version/<version_number> is optional\n displayHeightPx: string\n // depth: string, // traverse the given depth, not currently supported in ProvenanceGraph\n // showExpand: string // option to make graph not expandable, not currently supported in ProvenanceGraph\n}\n\nexport default function MarkdownProvenanceGraph(\n props: MarkdownProvenanceGraphProps,\n) {\n const { entityList, displayHeightPx } = props\n // parse entityList\n const refs = entityList.split(',').map(v => {\n const entityAndVersion = v.split('/version/')\n const ref: Reference = {\n targetId: entityAndVersion[0],\n targetVersionNumber:\n entityAndVersion.length > 1 ? parseInt(entityAndVersion[1]) : undefined,\n }\n return ref\n })\n const containerHeight = displayHeightPx ? `${displayHeightPx}px` : undefined\n return <ProvenanceGraph entityRefs={refs} containerHeight={containerHeight} />\n}\n"],"mappings":";;;AAUA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,uBAAoB;AAYxC,QAAO,kBAAC,GAAD;EAAiB,YAVX,EAAW,MAAM,IAAI,CAAC,KAAI,MAAK;GAC1C,IAAM,IAAmB,EAAE,MAAM,YAAY;AAM7C,UALuB;IACrB,UAAU,EAAiB;IAC3B,qBACE,EAAiB,SAAS,IAAI,SAAS,EAAiB,GAAG,GAAG,KAAA;IACjE;IAED;EAEyD,iBADnC,IAAkB,GAAG,EAAgB,MAAM,KAAA;EACW,CAAA"}
1
+ {"version":3,"file":"MarkdownProvenanceGraph.js","names":[],"sources":["../../../../src/components/Markdown/widget/MarkdownProvenanceGraph.tsx"],"sourcesContent":["import { Reference } from '@sage-bionetworks/synapse-types'\nimport ProvenanceGraph from '../../ProvenanceGraph/ProvenanceGraph'\n\nexport type MarkdownProvenanceGraphProps = {\n entityList: string // comma delimited entity references of the form <synapse_ID>/version/<version_number>. The /version/<version_number> is optional\n displayHeightPx: string\n // depth: string, // traverse the given depth, not currently supported in ProvenanceGraph\n // showExpand: string // option to make graph not expandable, not currently supported in ProvenanceGraph\n}\n\nexport default function MarkdownProvenanceGraph(\n props: MarkdownProvenanceGraphProps,\n) {\n const { entityList, displayHeightPx } = props\n // parse entityList\n const refs = entityList.split(',').map(v => {\n const entityAndVersion = v.split('/version/')\n const ref: Reference = {\n targetId: entityAndVersion[0],\n targetVersionNumber:\n entityAndVersion.length > 1 ? parseInt(entityAndVersion[1]) : undefined,\n }\n return ref\n })\n const containerHeight = displayHeightPx ? `${displayHeightPx}px` : undefined\n return <ProvenanceGraph entityRefs={refs} containerHeight={containerHeight} />\n}\n"],"mappings":";;;AAUA,SAAwB,EACtB,GACA;CACA,IAAM,EAAE,eAAY,uBAAoB;AAYxC,QAAO,kBAAC,GAAD;EAAiB,YAVX,EAAW,MAAM,IAAI,CAAC,KAAI,MAAK;GAC1C,IAAM,IAAmB,EAAE,MAAM,YAAY;AAM7C,UAAO;IAJL,UAAU,EAAiB;IAC3B,qBACE,EAAiB,SAAS,IAAI,SAAS,EAAiB,GAAG,GAAG,KAAA;IAE3D;IAG2B;EAAuB,iBADnC,IAAkB,GAAG,EAAgB,MAAM,KAAA;EACW,CAAA"}