synapse-react-client 4.0.46 → 4.0.47

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 (559) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/aridhia-queries/useSubmitAridhiaDar.js +2 -2
  3. package/dist/aridhia-queries/useSubmitAridhiaDar.js.map +1 -1
  4. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js +1 -1
  5. package/dist/components/AccessTokenPage/CreateAccessTokenModal.js.map +1 -1
  6. package/dist/components/AccountLevelBadges/AccountLevelBadges.js +1 -1
  7. package/dist/components/AccountLevelBadges/AccountLevelBadges.js.map +1 -1
  8. package/dist/components/AclEditor/AclEditor.test-utils.js +3 -5
  9. package/dist/components/AclEditor/AclEditor.test-utils.js.map +1 -1
  10. package/dist/components/Aridhia/AridhiaAccessStatus.d.ts.map +1 -1
  11. package/dist/components/Aridhia/AridhiaAccessStatus.js +43 -30
  12. package/dist/components/Aridhia/AridhiaAccessStatus.js.map +1 -1
  13. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts +6 -2
  14. package/dist/components/Aridhia/AridhiaDarStatusPopover.d.ts.map +1 -1
  15. package/dist/components/Aridhia/AridhiaDarStatusPopover.js +101 -31
  16. package/dist/components/Aridhia/AridhiaDarStatusPopover.js.map +1 -1
  17. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts +11 -9
  18. package/dist/components/Aridhia/aridhiaAccessStatusUtils.d.ts.map +1 -1
  19. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js +24 -13
  20. package/dist/components/Aridhia/aridhiaAccessStatusUtils.js.map +1 -1
  21. package/dist/components/Authentication/LastLoginInfo.js +2 -2
  22. package/dist/components/Authentication/LastLoginInfo.js.map +1 -1
  23. package/dist/components/Authentication/RecoveryCodeForm.js +1 -1
  24. package/dist/components/Authentication/RecoveryCodeForm.js.map +1 -1
  25. package/dist/components/Authentication/RecoveryCodeGrid.js.map +1 -1
  26. package/dist/components/Authentication/TOTPForm.d.ts.map +1 -1
  27. package/dist/components/Authentication/TOTPForm.js +3 -3
  28. package/dist/components/Authentication/TOTPForm.js.map +1 -1
  29. package/dist/components/Authentication/index.d.ts +6 -6
  30. package/dist/components/Authentication/index.d.ts.map +1 -1
  31. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js +1 -1
  32. package/dist/components/CannedRejectionDialog/CannedRejectionDialog.js.map +1 -1
  33. package/dist/components/CardContainer/CardContainer.js +7 -7
  34. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  35. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js +1 -1
  36. package/dist/components/ChallengeRequirementsModal/ChallengeRequirementsModal.js.map +1 -1
  37. package/dist/components/ChallengeSubmission/ChallengeSubmission.d.ts.map +1 -1
  38. package/dist/components/ChallengeSubmission/ChallengeSubmission.js +1 -1
  39. package/dist/components/ChallengeSubmission/ChallengeSubmission.js.map +1 -1
  40. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js +1 -1
  41. package/dist/components/ChallengeTeamWizard/SelectChallengeTeam.js.map +1 -1
  42. package/dist/components/CitationPopover/CitationPopoverUtils.js +2 -2
  43. package/dist/components/CitationPopover/CitationPopoverUtils.js.map +1 -1
  44. package/dist/components/CohortBuilder/CohortBuilder.css +1 -0
  45. package/dist/components/CohortBuilder/CohortBuilder.d.ts +35 -0
  46. package/dist/components/CohortBuilder/CohortBuilder.d.ts.map +1 -0
  47. package/dist/components/CohortBuilder/CohortBuilder.js +108 -0
  48. package/dist/components/CohortBuilder/CohortBuilder.js.map +1 -0
  49. package/dist/components/CohortBuilder/CohortBuilder.module.js +10 -0
  50. package/dist/components/CohortBuilder/CohortBuilder.module.js.map +1 -0
  51. package/dist/components/CohortBuilder/CohortBuilder.module.scss +20 -0
  52. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts +16 -0
  53. package/dist/components/CohortBuilder/CohortFilesPanel.d.ts.map +1 -0
  54. package/dist/components/CohortBuilder/CohortFilesPanel.js +124 -0
  55. package/dist/components/CohortBuilder/CohortFilesPanel.js.map +1 -0
  56. package/dist/components/CohortBuilder/cohortHandOff.d.ts +25 -0
  57. package/dist/components/CohortBuilder/cohortHandOff.d.ts.map +1 -0
  58. package/dist/components/CohortBuilder/cohortHandOff.js +26 -0
  59. package/dist/components/CohortBuilder/cohortHandOff.js.map +1 -0
  60. package/dist/components/ColumnFilter/ColumnFilter.d.ts.map +1 -1
  61. package/dist/components/ColumnFilter/ColumnFilter.js +14 -13
  62. package/dist/components/ColumnFilter/ColumnFilter.js.map +1 -1
  63. package/dist/components/DataExplorer/DataExplorer.d.ts.map +1 -1
  64. package/dist/components/DataExplorer/DataExplorer.js.map +1 -1
  65. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts +11 -2
  66. package/dist/components/DataGrid/columns/AutocompleteColumn.d.ts.map +1 -1
  67. package/dist/components/DataGrid/columns/AutocompleteColumn.js +115 -109
  68. package/dist/components/DataGrid/columns/AutocompleteColumn.js.map +1 -1
  69. package/dist/components/DataGrid/columns/NumberColumn.js +1 -1
  70. package/dist/components/DataGrid/columns/NumberColumn.js.map +1 -1
  71. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts +20 -0
  72. package/dist/components/DataGrid/columns/NumberOrEnumColumn.d.ts.map +1 -0
  73. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js +18 -0
  74. package/dist/components/DataGrid/columns/NumberOrEnumColumn.js.map +1 -0
  75. package/dist/components/DataGrid/components/contextMenu.js +3 -3
  76. package/dist/components/DataGrid/components/contextMenu.js.map +1 -1
  77. package/dist/components/DataGrid/hooks/useGridUndoRedo.d.ts.map +1 -1
  78. package/dist/components/DataGrid/hooks/useGridUndoRedo.js +9 -7
  79. package/dist/components/DataGrid/hooks/useGridUndoRedo.js.map +1 -1
  80. package/dist/components/DataGrid/hooks/useStack.d.ts +1 -1
  81. package/dist/components/DataGrid/hooks/useStack.js +2 -2
  82. package/dist/components/DataGrid/hooks/useStack.js.map +1 -1
  83. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  84. package/dist/components/DataGrid/utils/columnFactory.js +47 -42
  85. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  86. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js +7 -7
  87. package/dist/components/DataGrid/utils/extractColumnValidationMessages.js.map +1 -1
  88. package/dist/components/DataGrid/utils/json-rx/JsonRx.js +2 -2
  89. package/dist/components/DataGrid/utils/json-rx/JsonRx.js.map +1 -1
  90. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js +1 -1
  91. package/dist/components/DownloadCart/DownloadIneligibleForPackagingFilesFromListButton.js.map +1 -1
  92. package/dist/components/DownloadCart/MeetAccessRequirementCard.js +1 -1
  93. package/dist/components/DownloadCart/MeetAccessRequirementCard.js.map +1 -1
  94. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js +5 -5
  95. package/dist/components/EntityDownloadConfirmation/EntityDownloadConfirmation.js.map +1 -1
  96. package/dist/components/EntityFinder/details/view/DetailsView.d.ts.map +1 -1
  97. package/dist/components/EntityFinder/details/view/DetailsView.js +4 -4
  98. package/dist/components/EntityFinder/details/view/DetailsView.js.map +1 -1
  99. package/dist/components/EntityHeaderTable/EntityHeaderTable.js +4 -4
  100. package/dist/components/EntityHeaderTable/Filter.d.ts.map +1 -1
  101. package/dist/components/EntityHeaderTable/Filter.js +1 -1
  102. package/dist/components/EntityHeaderTable/Filter.js.map +1 -1
  103. package/dist/components/Evaluation/EvaluationRoundEditor.js.map +1 -1
  104. package/dist/components/FeaturedDataTabs/FacetPlotsCard.d.ts.map +1 -1
  105. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +80 -84
  106. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  107. package/dist/components/FormTemplateEditor/FormStructurePanel.js +7 -7
  108. package/dist/components/FormTemplateEditor/StepCard.js +9 -9
  109. package/dist/components/FormTemplateEditor/schemaFieldUtils.js +2 -2
  110. package/dist/components/FormTemplateEditor/schemaFieldUtils.js.map +1 -1
  111. package/dist/components/FullTextSearch/FullTextSearch.js +8 -8
  112. package/dist/components/GenericCard/CardUtils.js.map +1 -1
  113. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js +1 -1
  114. package/dist/components/GenericCard/DuoTermTags/DuoTermTags.js.map +1 -1
  115. package/dist/components/GenericCard/DuoTermTags/duoTerms.js +1 -1
  116. package/dist/components/GenericCard/DuoTermTags/duoTerms.js.map +1 -1
  117. package/dist/components/GenericCard/TableRowGenericCard.js +37 -37
  118. package/dist/components/GoalsV3/GoalsV3.js +1 -1
  119. package/dist/components/GoalsV3/GoalsV3.js.map +1 -1
  120. package/dist/components/HexGrid/HexGrid.d.ts +3 -1
  121. package/dist/components/HexGrid/HexGrid.d.ts.map +1 -1
  122. package/dist/components/HexGrid/HexGrid.js +14 -13
  123. package/dist/components/HexGrid/HexGrid.js.map +1 -1
  124. package/dist/components/IconSvg/index.d.ts +1 -1
  125. package/dist/components/IconSvg/index.d.ts.map +1 -1
  126. package/dist/components/IconSvg/index.js.map +1 -1
  127. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.d.ts.map +1 -1
  128. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js +3 -3
  129. package/dist/components/JsonSchemaForm/templates/BaseInputTemplate.js.map +1 -1
  130. package/dist/components/Markdown/MarkdownEditor.js +1 -1
  131. package/dist/components/Markdown/MarkdownEditor.js.map +1 -1
  132. package/dist/components/Markdown/widget/index.d.ts +1 -1
  133. package/dist/components/Markdown/widget/index.d.ts.map +1 -1
  134. package/dist/components/ModalDownload/ModalDownload.d.ts.map +1 -1
  135. package/dist/components/ModalDownload/ModalDownload.js +2 -1
  136. package/dist/components/ModalDownload/ModalDownload.js.map +1 -1
  137. package/dist/components/Plot/BarPlot.js +1 -1
  138. package/dist/components/Plot/BarPlot.js.map +1 -1
  139. package/dist/components/Plot/PlotPanelHeader.d.ts +3 -2
  140. package/dist/components/Plot/PlotPanelHeader.d.ts.map +1 -1
  141. package/dist/components/Plot/PlotPanelHeader.js.map +1 -1
  142. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js +1 -1
  143. package/dist/components/ProgrammaticTableDownload/ProgrammaticTableDownload.js.map +1 -1
  144. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js +1 -1
  145. package/dist/components/ProvenanceGraph/ProvenanceExternalIcon.js.map +1 -1
  146. package/dist/components/ProvenanceGraph/ProvenanceGraph.d.ts.map +1 -1
  147. package/dist/components/ProvenanceGraph/ProvenanceGraph.js +3 -3
  148. package/dist/components/ProvenanceGraph/ProvenanceGraph.js.map +1 -1
  149. package/dist/components/QueryBuilder/FilterConditionRow.d.ts.map +1 -1
  150. package/dist/components/QueryBuilder/FilterConditionRow.js +28 -27
  151. package/dist/components/QueryBuilder/FilterConditionRow.js.map +1 -1
  152. package/dist/components/QueryBuilder/FilterGroupNode.d.ts.map +1 -1
  153. package/dist/components/QueryBuilder/FilterGroupNode.js +91 -75
  154. package/dist/components/QueryBuilder/FilterGroupNode.js.map +1 -1
  155. package/dist/components/QueryBuilder/QueryBuilderControls.css +1 -1
  156. package/dist/components/QueryBuilder/QueryBuilderControls.d.ts.map +1 -1
  157. package/dist/components/QueryBuilder/QueryBuilderControls.js +91 -79
  158. package/dist/components/QueryBuilder/QueryBuilderControls.js.map +1 -1
  159. package/dist/components/QueryBuilder/QueryBuilderControls.module.js +11 -11
  160. package/dist/components/QueryBuilder/QueryBuilderControls.module.js.map +1 -1
  161. package/dist/components/QueryBuilder/QueryBuilderControls.module.scss +2 -0
  162. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts +2 -0
  163. package/dist/components/QueryBuilder/QueryBuilderInternalContext.d.ts.map +1 -1
  164. package/dist/components/QueryBuilder/QueryBuilderInternalContext.js.map +1 -1
  165. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts +18 -0
  166. package/dist/components/QueryBuilder/queryBuilderLimits.d.ts.map +1 -0
  167. package/dist/components/QueryBuilder/queryBuilderLimits.js +38 -0
  168. package/dist/components/QueryBuilder/queryBuilderLimits.js.map +1 -0
  169. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts +0 -8
  170. package/dist/components/QueryBuilder/queryBuilderMetadata.d.ts.map +1 -1
  171. package/dist/components/QueryBuilder/queryBuilderMetadata.js +6 -9
  172. package/dist/components/QueryBuilder/queryBuilderMetadata.js.map +1 -1
  173. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts +5 -4
  174. package/dist/components/QueryBuilder/queryBuilderTranslation.d.ts.map +1 -1
  175. package/dist/components/QueryBuilder/queryBuilderTranslation.js +58 -33
  176. package/dist/components/QueryBuilder/queryBuilderTranslation.js.map +1 -1
  177. package/dist/components/QueryBuilder/useQBCombinedSql.d.ts.map +1 -1
  178. package/dist/components/QueryBuilder/useQBCombinedSql.js +4 -4
  179. package/dist/components/QueryBuilder/useQBCombinedSql.js.map +1 -1
  180. package/dist/components/QueryBuilder/useQBValueDisplayName.d.ts.map +1 -1
  181. package/dist/components/QueryBuilder/useQBValueDisplayName.js +5 -5
  182. package/dist/components/QueryBuilder/useQBValueDisplayName.js.map +1 -1
  183. package/dist/components/QuerySortSelector.js +5 -5
  184. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js +21 -21
  185. package/dist/components/QueryVisualizationWrapper/QueryVisualizationWrapper.js.map +1 -1
  186. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts +20 -0
  187. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.d.ts.map +1 -0
  188. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js +50 -0
  189. package/dist/components/QueryWrapper/AggregateQueryErrorNotice.js.map +1 -0
  190. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts +5 -3
  191. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.d.ts.map +1 -1
  192. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js +7 -3
  193. package/dist/components/QueryWrapper/TableQueryUseQueryOptions.js.map +1 -1
  194. package/dist/components/QueryWrapper/downloadListFiles.d.ts +25 -0
  195. package/dist/components/QueryWrapper/downloadListFiles.d.ts.map +1 -0
  196. package/dist/components/QueryWrapper/downloadListFiles.js +39 -0
  197. package/dist/components/QueryWrapper/downloadListFiles.js.map +1 -0
  198. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts +16 -0
  199. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.d.ts.map +1 -0
  200. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js +50 -0
  201. package/dist/components/QueryWrapper/useAddSelectedRowsToDownloadList.js.map +1 -0
  202. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts +4 -1
  203. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.d.ts.map +1 -1
  204. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js +15 -28
  205. package/dist/components/QueryWrapper/useGetAddToDownloadListRequestForCurrentQuery.js.map +1 -1
  206. package/dist/components/QueryWrapper/useOnQueryDataChange.d.ts.map +1 -1
  207. package/dist/components/QueryWrapper/useOnQueryDataChange.js +7 -6
  208. package/dist/components/QueryWrapper/useOnQueryDataChange.js.map +1 -1
  209. package/dist/components/QueryWrapperErrorBoundary.d.ts +3 -1
  210. package/dist/components/QueryWrapperErrorBoundary.d.ts.map +1 -1
  211. package/dist/components/QueryWrapperErrorBoundary.js +26 -21
  212. package/dist/components/QueryWrapperErrorBoundary.js.map +1 -1
  213. package/dist/components/QueryWrapperPlotNav/LastUpdatedOn.js +7 -7
  214. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts +2 -2
  215. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.d.ts.map +1 -1
  216. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js +34 -32
  217. package/dist/components/QueryWrapperPlotNav/QueryWrapperPlotNav.js.map +1 -1
  218. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +7 -7
  219. package/dist/components/QueryWrapperPlotNav/UseRowSet.d.ts.map +1 -1
  220. package/dist/components/QueryWrapperPlotNav/UseRowSet.js +12 -12
  221. package/dist/components/QueryWrapperPlotNav/UseRowSet.js.map +1 -1
  222. package/dist/components/RowDataTable/CategorizedRowDataTable.css +1 -0
  223. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts +33 -0
  224. package/dist/components/RowDataTable/CategorizedRowDataTable.d.ts.map +1 -0
  225. package/dist/components/RowDataTable/CategorizedRowDataTable.js +64 -0
  226. package/dist/components/RowDataTable/CategorizedRowDataTable.js.map +1 -0
  227. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js +8 -0
  228. package/dist/components/RowDataTable/CategorizedRowDataTable.module.js.map +1 -0
  229. package/dist/components/RowDataTable/CategorizedRowDataTable.module.scss +18 -0
  230. package/dist/components/RowDataTable/RowDataTable.d.ts +13 -0
  231. package/dist/components/RowDataTable/RowDataTable.d.ts.map +1 -1
  232. package/dist/components/RowDataTable/RowDataTable.js +25 -8
  233. package/dist/components/RowDataTable/RowDataTable.js.map +1 -1
  234. package/dist/components/RssFeedCards/RssFeedCards.js +1 -1
  235. package/dist/components/RssFeedCards/RssFeedCards.js.map +1 -1
  236. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.d.ts.map +1 -1
  237. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js +2 -2
  238. package/dist/components/SchemaDrivenAnnotationEditor/field/AdditionalPropertiesSchemaField.js.map +1 -1
  239. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js +1 -1
  240. package/dist/components/SchemaDrivenAnnotationEditor/template/ObjectFieldTemplate.js.map +1 -1
  241. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +17 -9
  242. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  243. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +39 -30
  244. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  245. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js +24 -24
  246. package/dist/components/SetAccessRequirementCommonFields/SetAccessRequirementCommonFields.js.map +1 -1
  247. package/dist/components/StandaloneQueryWrapper/StandaloneQueryWrapper.js +8 -8
  248. package/dist/components/SynapseChat/SynapseChatMessage.js +1 -1
  249. package/dist/components/SynapseChat/SynapseChatMessage.js.map +1 -1
  250. package/dist/components/SynapseForm/NavButtons.js.map +1 -1
  251. package/dist/components/SynapseForm/StepsSideNav.js.map +1 -1
  252. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js +1 -1
  253. package/dist/components/SynapseSearchPageResults/HighlightedTypography.js.map +1 -1
  254. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.d.ts.map +1 -1
  255. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js +3 -3
  256. package/dist/components/SynapseSearchPageResults/SearchFacetPanel/SearchFacetPanelUtils.js.map +1 -1
  257. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.d.ts.map +1 -1
  258. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js +38 -44
  259. package/dist/components/SynapseTable/RowSelection/RowSelectionControls.js.map +1 -1
  260. package/dist/components/SynapseTable/RowSelection/RowSelectionUI.js +4 -4
  261. package/dist/components/SynapseTable/SqlEditor.js +7 -7
  262. package/dist/components/SynapseTable/SynapseTable.js +8 -8
  263. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  264. package/dist/components/SynapseTable/SynapseTableRenderers.d.ts.map +1 -1
  265. package/dist/components/SynapseTable/SynapseTableRenderers.js +73 -72
  266. package/dist/components/SynapseTable/SynapseTableRenderers.js.map +1 -1
  267. package/dist/components/SynapseTable/SynapseTableUtils.js +1 -1
  268. package/dist/components/SynapseTable/SynapseTableUtils.js.map +1 -1
  269. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  270. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +44 -45
  271. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  272. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js +1 -1
  273. package/dist/components/SynapseTable/datasets/DatasetEditorVersionCell.js.map +1 -1
  274. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.d.ts.map +1 -1
  275. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js +142 -142
  276. package/dist/components/SynapseTable/datasets/DatasetItemsEditor.js.map +1 -1
  277. package/dist/components/SynapseTable/export/ExportToAnalysisPlatformDialog.js +4 -4
  278. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js +12 -12
  279. package/dist/components/SynapseTable/export/ExternalPlatformActionsRequiredPrecheck.js.map +1 -1
  280. package/dist/components/SynapseTable/table-top/ColumnSelection.js +6 -6
  281. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts +0 -1
  282. package/dist/components/SynapseTable/table-top/DownloadOptions.d.ts.map +1 -1
  283. package/dist/components/SynapseTable/table-top/DownloadOptions.js +64 -57
  284. package/dist/components/SynapseTable/table-top/DownloadOptions.js.map +1 -1
  285. package/dist/components/SynapseTable/usePrefetchTableData.d.ts.map +1 -1
  286. package/dist/components/SynapseTable/usePrefetchTableData.js +3 -3
  287. package/dist/components/SynapseTable/usePrefetchTableData.js.map +1 -1
  288. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +1 -1
  289. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  290. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js +1 -1
  291. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorTestUtils.js.map +1 -1
  292. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +2 -2
  293. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  294. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +60 -60
  295. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  296. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js +1 -1
  297. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.js.map +1 -1
  298. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js +1 -1
  299. package/dist/components/TanStackTable/ColumnHeaderEnumFilter.js.map +1 -1
  300. package/dist/components/TanStackTable/StyledTanStackTable.d.ts.map +1 -1
  301. package/dist/components/TanStackTable/StyledTanStackTable.js +1 -4
  302. package/dist/components/TanStackTable/StyledTanStackTable.js.map +1 -1
  303. package/dist/components/TermsAndConditions/TermsAndConditions.js.map +1 -1
  304. package/dist/components/TotalQueryResults.js +14 -14
  305. package/dist/components/Webhook/WebhookDashboard.d.ts.map +1 -1
  306. package/dist/components/Webhook/WebhookDashboard.js +2 -2
  307. package/dist/components/Webhook/WebhookDashboard.js.map +1 -1
  308. package/dist/components/download_list/DownloadConfirmationUtils.d.ts +5 -1
  309. package/dist/components/download_list/DownloadConfirmationUtils.d.ts.map +1 -1
  310. package/dist/components/download_list/DownloadConfirmationUtils.js +2 -2
  311. package/dist/components/download_list/DownloadConfirmationUtils.js.map +1 -1
  312. package/dist/components/error/ErrorBanner.d.ts.map +1 -1
  313. package/dist/components/error/ErrorBanner.js +49 -46
  314. package/dist/components/error/ErrorBanner.js.map +1 -1
  315. package/dist/components/file/upload/MultiFileUploadProgress.js +5 -5
  316. package/dist/components/row_renderers/Dataset.d.ts.map +1 -1
  317. package/dist/components/row_renderers/Dataset.js +6 -6
  318. package/dist/components/row_renderers/Dataset.js.map +1 -1
  319. package/dist/components/row_renderers/Funder.js +1 -1
  320. package/dist/components/row_renderers/Funder.js.map +1 -1
  321. package/dist/components/widgets/ElementWithTooltip.d.ts +6 -1
  322. package/dist/components/widgets/ElementWithTooltip.d.ts.map +1 -1
  323. package/dist/components/widgets/ElementWithTooltip.js +22 -14
  324. package/dist/components/widgets/ElementWithTooltip.js.map +1 -1
  325. package/dist/components/widgets/RangeSlider/RangeSlider.d.ts.map +1 -1
  326. package/dist/components/widgets/RangeSlider/RangeSlider.js +1 -1
  327. package/dist/components/widgets/RangeSlider/RangeSlider.js.map +1 -1
  328. package/dist/components/widgets/SynapseImage.js +1 -1
  329. package/dist/components/widgets/SynapseImage.js.map +1 -1
  330. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts +16 -5
  331. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  332. package/dist/components/widgets/facet-nav/FacetNavPanel.js +115 -102
  333. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  334. package/dist/components/widgets/facet-nav/FacetPlotLegendList.d.ts.map +1 -1
  335. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js +4 -2
  336. package/dist/components/widgets/facet-nav/FacetPlotLegendList.js.map +1 -1
  337. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js +1 -1
  338. package/dist/components/widgets/facet-nav/FacetPlotLegendTable.js.map +1 -1
  339. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts +2 -0
  340. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.d.ts.map +1 -1
  341. package/dist/components/widgets/facet-nav/FacetPlotLegendUtils.js.map +1 -1
  342. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts +7 -0
  343. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  344. package/dist/components/widgets/facet-nav/PlotsContainer.js +47 -45
  345. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  346. package/dist/components/widgets/facet-nav/SelectionCriteriaPills.js +4 -4
  347. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts +3 -2
  348. package/dist/components/widgets/facet-nav/useFacetPlots.d.ts.map +1 -1
  349. package/dist/components/widgets/facet-nav/useFacetPlots.js +16 -15
  350. package/dist/components/widgets/facet-nav/useFacetPlots.js.map +1 -1
  351. package/dist/components/widgets/query-filter/CombinedRangeFacetFilter.js +4 -4
  352. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts +2 -2
  353. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.d.ts.map +1 -1
  354. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js +62 -60
  355. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilter.js.map +1 -1
  356. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts +2 -0
  357. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.d.ts.map +1 -1
  358. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js +10 -10
  359. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterOption.js.map +1 -1
  360. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts +1 -0
  361. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.d.ts.map +1 -1
  362. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js +2 -1
  363. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUI.js.map +1 -1
  364. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts +3 -2
  365. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.d.ts.map +1 -1
  366. package/dist/components/widgets/query-filter/EnumFacetFilter/EnumFacetFilterUtils.js.map +1 -1
  367. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts +3 -2
  368. package/dist/components/widgets/query-filter/FacetFilterControls.d.ts.map +1 -1
  369. package/dist/components/widgets/query-filter/FacetFilterControls.js +63 -62
  370. package/dist/components/widgets/query-filter/FacetFilterControls.js.map +1 -1
  371. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.d.ts.map +1 -1
  372. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js +30 -29
  373. package/dist/components/widgets/query-filter/JsonColumnFacetFilters.js.map +1 -1
  374. package/dist/components/widgets/query-filter/RangeFacetFilter.js +5 -5
  375. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts +53 -0
  376. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.d.ts.map +1 -0
  377. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js +391 -0
  378. package/dist/mocks/cohortBuilder/cohortBuilderMockProfiles.js.map +1 -0
  379. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts +41 -0
  380. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.d.ts.map +1 -0
  381. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js +379 -0
  382. package/dist/mocks/cohortBuilder/cohortBuilderMockQueryEngine.js.map +1 -0
  383. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts +26 -0
  384. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.d.ts.map +1 -0
  385. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js +112 -0
  386. package/dist/mocks/cohortBuilder/cohortBuilderSyntheticData.js.map +1 -0
  387. package/dist/mocks/mockAnnotationColumns.d.ts.map +1 -1
  388. package/dist/mocks/mockAnnotationColumns.js +1 -1
  389. package/dist/mocks/mockAnnotationColumns.js.map +1 -1
  390. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts +9 -0
  391. package/dist/mocks/msw/handlers/aridhiaHandlers.d.ts.map +1 -1
  392. package/dist/mocks/msw/handlers/aridhiaHandlers.js +24 -15
  393. package/dist/mocks/msw/handlers/aridhiaHandlers.js.map +1 -1
  394. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts +21 -2
  395. package/dist/mocks/msw/handlers/asyncJobHandlers.d.ts.map +1 -1
  396. package/dist/mocks/msw/handlers/asyncJobHandlers.js +30 -22
  397. package/dist/mocks/msw/handlers/asyncJobHandlers.js.map +1 -1
  398. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts +27 -0
  399. package/dist/mocks/msw/handlers/cohortBuilderHandlers.d.ts.map +1 -0
  400. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js +158 -0
  401. package/dist/mocks/msw/handlers/cohortBuilderHandlers.js.map +1 -0
  402. package/dist/mocks/msw/handlers/subscriptionHandlers.js +1 -1
  403. package/dist/mocks/msw/handlers/subscriptionHandlers.js.map +1 -1
  404. package/dist/mocks/msw/handlers/userProfileHandlers.d.ts.map +1 -1
  405. package/dist/mocks/msw/handlers/userProfileHandlers.js +2 -2
  406. package/dist/mocks/msw/handlers/userProfileHandlers.js.map +1 -1
  407. package/dist/mocks/query/mockColumnCategoryTable.d.ts +19 -0
  408. package/dist/mocks/query/mockColumnCategoryTable.d.ts.map +1 -0
  409. package/dist/mocks/query/mockColumnCategoryTable.js +188 -0
  410. package/dist/mocks/query/mockColumnCategoryTable.js.map +1 -0
  411. package/dist/stories/ColorPaletteInspector.d.ts.map +1 -1
  412. package/dist/stories/ColorPaletteInspector.js +2 -2
  413. package/dist/stories/ColorPaletteInspector.js.map +1 -1
  414. package/dist/style/components/facet_nav/_facet-nav-panel.scss +8 -0
  415. package/dist/style/main.css +1 -1
  416. package/dist/synapse-queries/auth/useOIDC.js +2 -2
  417. package/dist/synapse-queries/auth/useOIDC.js.map +1 -1
  418. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js +2 -2
  419. package/dist/synapse-queries/auth/useUnbindOAuthProviderIdentity.js.map +1 -1
  420. package/dist/synapse-queries/challenge/useChallenge.js +2 -2
  421. package/dist/synapse-queries/challenge/useChallenge.js.map +1 -1
  422. package/dist/synapse-queries/chat/useChat.js +8 -8
  423. package/dist/synapse-queries/chat/useChat.js.map +1 -1
  424. package/dist/synapse-queries/curation/task/useCurationTask.js +10 -10
  425. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  426. package/dist/synapse-queries/dataaccess/useAccessRequirements.js +24 -24
  427. package/dist/synapse-queries/dataaccess/useAccessRequirements.js.map +1 -1
  428. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js +4 -4
  429. package/dist/synapse-queries/dataaccess/useDataAccessSubmission.js.map +1 -1
  430. package/dist/synapse-queries/dataaccess/useEDuc.js +6 -6
  431. package/dist/synapse-queries/dataaccess/useEDuc.js.map +1 -1
  432. package/dist/synapse-queries/dataaccess/useFormTemplate.js +4 -4
  433. package/dist/synapse-queries/dataaccess/useFormTemplate.js.map +1 -1
  434. package/dist/synapse-queries/download/index.js +2 -2
  435. package/dist/synapse-queries/download/useDownloadList.d.ts +5 -0
  436. package/dist/synapse-queries/download/useDownloadList.d.ts.map +1 -1
  437. package/dist/synapse-queries/download/useDownloadList.js +14 -13
  438. package/dist/synapse-queries/download/useDownloadList.js.map +1 -1
  439. package/dist/synapse-queries/entity/useEntity.d.ts.map +1 -1
  440. package/dist/synapse-queries/entity/useEntity.js +20 -20
  441. package/dist/synapse-queries/entity/useEntity.js.map +1 -1
  442. package/dist/synapse-queries/entity/useExportToADWorkbench.d.ts.map +1 -1
  443. package/dist/synapse-queries/entity/useExportToADWorkbench.js +2 -1
  444. package/dist/synapse-queries/entity/useExportToADWorkbench.js.map +1 -1
  445. package/dist/synapse-queries/entity/useExportToCavatica.d.ts.map +1 -1
  446. package/dist/synapse-queries/entity/useExportToCavatica.js +3 -2
  447. package/dist/synapse-queries/entity/useExportToCavatica.js.map +1 -1
  448. package/dist/synapse-queries/entity/useExportToPluto.d.ts.map +1 -1
  449. package/dist/synapse-queries/entity/useExportToPluto.js +2 -1
  450. package/dist/synapse-queries/entity/useExportToPluto.js.map +1 -1
  451. package/dist/synapse-queries/entity/useGetQueryResultBundle.d.ts.map +1 -1
  452. package/dist/synapse-queries/entity/useGetQueryResultBundle.js +4 -7
  453. package/dist/synapse-queries/entity/useGetQueryResultBundle.js.map +1 -1
  454. package/dist/synapse-queries/forum/useReply.js +6 -6
  455. package/dist/synapse-queries/forum/useReply.js.map +1 -1
  456. package/dist/synapse-queries/forum/useThread.js +14 -14
  457. package/dist/synapse-queries/forum/useThread.js.map +1 -1
  458. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js +1 -1
  459. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  460. package/dist/synapse-queries/grid/useGridSession.js +4 -4
  461. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  462. package/dist/synapse-queries/index.js +177 -176
  463. package/dist/synapse-queries/oauth/useOAuthClient.js +9 -9
  464. package/dist/synapse-queries/oauth/useOAuthClient.js.map +1 -1
  465. package/dist/synapse-queries/portal/usePortal.js +7 -7
  466. package/dist/synapse-queries/portal/usePortal.js.map +1 -1
  467. package/dist/synapse-queries/subscription/useSubscription.js +4 -4
  468. package/dist/synapse-queries/subscription/useSubscription.js.map +1 -1
  469. package/dist/synapse-queries/table/useTableUpdateTransaction.js +2 -2
  470. package/dist/synapse-queries/table/useTableUpdateTransaction.js.map +1 -1
  471. package/dist/synapse-queries/team/useTeam.js +2 -2
  472. package/dist/synapse-queries/team/useTeam.js.map +1 -1
  473. package/dist/synapse-queries/team/useTeamList.d.ts.map +1 -1
  474. package/dist/synapse-queries/team/useTeamList.js +3 -3
  475. package/dist/synapse-queries/team/useTeamList.js.map +1 -1
  476. package/dist/synapse-queries/team/useTeamMembers.js +8 -8
  477. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  478. package/dist/synapse-queries/termsOfService/useTermsOfService.js +2 -2
  479. package/dist/synapse-queries/termsOfService/useTermsOfService.js.map +1 -1
  480. package/dist/synapse-queries/trash/useTrashCan.js +4 -4
  481. package/dist/synapse-queries/trash/useTrashCan.js.map +1 -1
  482. package/dist/synapse-queries/user/useCertificationQuiz.js +2 -2
  483. package/dist/synapse-queries/user/useCertificationQuiz.js.map +1 -1
  484. package/dist/synapse-queries/user/useFavorites.js +4 -4
  485. package/dist/synapse-queries/user/useFavorites.js.map +1 -1
  486. package/dist/synapse-queries/user/useRevokeCertification.js +2 -2
  487. package/dist/synapse-queries/user/useRevokeCertification.js.map +1 -1
  488. package/dist/synapse-queries/wiki/useWiki.js +10 -10
  489. package/dist/synapse-queries/wiki/useWiki.js.map +1 -1
  490. package/dist/tsconfig.build.tsbuildinfo +1 -1
  491. package/dist/utils/ContentTypeUtils.js +4 -4
  492. package/dist/utils/ContentTypeUtils.js.map +1 -1
  493. package/dist/utils/PermissionLevelToAccessType.js +1 -1
  494. package/dist/utils/PermissionLevelToAccessType.js.map +1 -1
  495. package/dist/utils/analytics/useGoogleAnalytics.js +1 -1
  496. package/dist/utils/analytics/useGoogleAnalytics.js.map +1 -1
  497. package/dist/utils/context/DocumentMetadataContext.js +1 -1
  498. package/dist/utils/context/DocumentMetadataContext.js.map +1 -1
  499. package/dist/utils/functions/AccessControlListUtils.d.ts.map +1 -1
  500. package/dist/utils/functions/AccessControlListUtils.js +3 -3
  501. package/dist/utils/functions/AccessControlListUtils.js.map +1 -1
  502. package/dist/utils/functions/ArrayUtils.js +2 -2
  503. package/dist/utils/functions/ArrayUtils.js.map +1 -1
  504. package/dist/utils/functions/FileHandleUtils.js +1 -1
  505. package/dist/utils/functions/FileHandleUtils.js.map +1 -1
  506. package/dist/utils/functions/RegularExpressions.js +1 -1
  507. package/dist/utils/functions/RegularExpressions.js.map +1 -1
  508. package/dist/utils/functions/StringUtils.d.ts.map +1 -1
  509. package/dist/utils/functions/StringUtils.js +1 -2
  510. package/dist/utils/functions/StringUtils.js.map +1 -1
  511. package/dist/utils/functions/deepLinkingUtils.js +2 -2
  512. package/dist/utils/functions/deepLinkingUtils.js.map +1 -1
  513. package/dist/utils/functions/enumerationFacet.d.ts +26 -0
  514. package/dist/utils/functions/enumerationFacet.d.ts.map +1 -0
  515. package/dist/utils/functions/enumerationFacet.js +27 -0
  516. package/dist/utils/functions/enumerationFacet.js.map +1 -0
  517. package/dist/utils/functions/facetCountUtils.d.ts +12 -0
  518. package/dist/utils/functions/facetCountUtils.d.ts.map +1 -0
  519. package/dist/utils/functions/facetCountUtils.js +9 -0
  520. package/dist/utils/functions/facetCountUtils.js.map +1 -0
  521. package/dist/utils/functions/getEndpoint.js.map +1 -1
  522. package/dist/utils/functions/getUserData.js +1 -1
  523. package/dist/utils/functions/getUserData.js.map +1 -1
  524. package/dist/utils/functions/queryUtils.d.ts +1 -1
  525. package/dist/utils/functions/queryUtils.d.ts.map +1 -1
  526. package/dist/utils/functions/queryUtils.js +26 -22
  527. package/dist/utils/functions/queryUtils.js.map +1 -1
  528. package/dist/utils/functions/testDownloadSpeed.d.ts.map +1 -1
  529. package/dist/utils/functions/testDownloadSpeed.js +17 -26
  530. package/dist/utils/functions/testDownloadSpeed.js.map +1 -1
  531. package/dist/utils/functions/unCamelCase.js +1 -1
  532. package/dist/utils/functions/unCamelCase.js.map +1 -1
  533. package/dist/utils/hooks/useGetInfoFromIds.js +5 -5
  534. package/dist/utils/hooks/useGetInfoFromIds.js.map +1 -1
  535. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js +1 -1
  536. package/dist/utils/hooks/useImmutableTableQuery/TableQueryReducerActions.js.map +1 -1
  537. package/dist/utils/hooks/useLogin.d.ts.map +1 -1
  538. package/dist/utils/hooks/useLogin.js +5 -5
  539. package/dist/utils/hooks/useLogin.js.map +1 -1
  540. package/dist/utils/hooks/useUploadFileEntity/useCreateFolderPath.js.map +1 -1
  541. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts +6 -0
  542. package/dist/utils/jsonschema/collectTopLevelProperties.d.ts.map +1 -1
  543. package/dist/utils/jsonschema/collectTopLevelProperties.js +1 -1
  544. package/dist/utils/jsonschema/collectTopLevelProperties.js.map +1 -1
  545. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts +22 -0
  546. package/dist/utils/jsonschema/getNumberOrEnumInfo.d.ts.map +1 -0
  547. package/dist/utils/jsonschema/getNumberOrEnumInfo.js +39 -0
  548. package/dist/utils/jsonschema/getNumberOrEnumInfo.js.map +1 -0
  549. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts +1 -0
  550. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.d.ts.map +1 -1
  551. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js +1 -1
  552. package/dist/utils/jsonschema/getOnlyNonNullOneOfOption.js.map +1 -1
  553. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts +5 -0
  554. package/dist/utils/jsonschema/getSchemaPropertyInfo.d.ts.map +1 -1
  555. package/dist/utils/jsonschema/getSchemaPropertyInfo.js +30 -15
  556. package/dist/utils/jsonschema/getSchemaPropertyInfo.js.map +1 -1
  557. package/dist/utils/jsonschema/submissionContext.js +2 -2
  558. package/dist/utils/jsonschema/submissionContext.js.map +1 -1
  559. package/package.json +6 -6
@@ -1,21 +1,30 @@
1
1
  import { JSONSchema7Type } from 'json-schema';
2
2
  import { CellProps, Column } from '@sage-bionetworks/react-datasheet-grid';
3
3
  export type AutocompleteOption = string | number | boolean | null | Record<string, unknown> | Array<unknown>;
4
+ /** Converts text typed or pasted into a cell into the value stored in the model */
5
+ export type ParseFreeText = (freeText: string) => unknown;
4
6
  export type AutocompleteCellProps = CellProps & {
5
7
  rowData: AutocompleteOption;
6
8
  setRowData: (value: AutocompleteOption) => void;
7
9
  choices: AutocompleteOption[];
8
10
  colType?: JSONSchema7Type;
11
+ /**
12
+ * Replaces parsing typed text by `colType`. Compared by reference when
13
+ * memoizing the cell, so it must be stable across renders.
14
+ */
15
+ parseFreeText?: ParseFreeText;
9
16
  clearValue?: undefined | null;
10
17
  };
11
18
  export declare function castCellValueToString(toCast: any): string;
12
- export declare function AutocompleteCell({ rowData, setRowData, choices, colType, focus, stopEditing, active, clearValue, }: AutocompleteCellProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function AutocompleteCell({ rowData, setRowData, choices, colType, parseFreeText, focus, stopEditing, active, clearValue, }: AutocompleteCellProps): import("react/jsx-runtime").JSX.Element;
13
20
  export declare function areAutocompleteCellPropsEqual(prevProps: AutocompleteCellProps, nextProps: AutocompleteCellProps): boolean;
14
21
  export declare const MemoizedAutocompleteCell: import("react").NamedExoticComponent<AutocompleteCellProps>;
15
22
  export type AutocompleteColumnProps = {
16
23
  choices: AutocompleteOption[];
17
24
  colType?: JSONSchema7Type;
25
+ /** Parses typed and pasted text. When omitted, both are parsed by `colType`. */
26
+ parseFreeText?: ParseFreeText;
18
27
  clearValue: undefined | null;
19
28
  };
20
- export declare function autocompleteColumn({ choices, colType, clearValue, }: AutocompleteColumnProps): Partial<Column>;
29
+ export declare function autocompleteColumn({ choices, colType, parseFreeText, clearValue, }: AutocompleteColumnProps): Partial<Column>;
21
30
  //# sourceMappingURL=AutocompleteColumn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAW7C,OAAO,EAEL,SAAS,EACT,MAAM,EACP,MAAM,wCAAwC,CAAA;AAoB/C,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,OAAO,CAAC,CAAA;AAElB,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG;IAC9C,OAAO,EAAE,kBAAkB,CAAA;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/C,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAQzD;AAqBD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAsB,GACvB,EAAE,qBAAqB,2CAoJvB;AAMD,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,qBAAqB,WAUjC;AAED,eAAO,MAAM,wBAAwB,6DAGpC,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3C"}
1
+ {"version":3,"file":"AutocompleteColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAW7C,OAAO,EAEL,SAAS,EACT,MAAM,EACP,MAAM,wCAAwC,CAAA;AAoB/C,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,KAAK,CAAC,OAAO,CAAC,CAAA;AAElB,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;AAYzD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG;IAC9C,OAAO,EAAE,kBAAkB,CAAA;IAC3B,UAAU,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAC/C,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAQzD;AAqBD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,aAAa,EACb,KAAK,EACL,WAAW,EACX,MAAM,EACN,UAAsB,GACvB,EAAE,qBAAqB,2CAmJvB;AAMD,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,qBAAqB,WAWjC;AAED,eAAO,MAAM,wBAAwB,6DAGpC,CAAA;AACD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,aAAa,EACb,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3C"}
@@ -1,12 +1,12 @@
1
1
  import e from "../utils/parseFreeTextUsingJsonSchemaType.js";
2
2
  import { useGridAutocompleteState as t } from "./useGridAutocompleteState.js";
3
- import { memo as n, useEffect as r, useLayoutEffect as ee, useRef as te, useState as ne } from "react";
4
- import { isNil as re } from "lodash-es";
5
- import { Autocomplete as ie, TextField as ae } from "@mui/material";
6
- import { jsx as oe } from "react/jsx-runtime";
7
- import { c as se } from "react/compiler-runtime";
3
+ import { memo as n, useEffect as r, useLayoutEffect as i, useRef as ee, useState as te } from "react";
4
+ import { isNil as ne } from "lodash-es";
5
+ import { Autocomplete as re, TextField as ie } from "@mui/material";
6
+ import { jsx as a } from "react/jsx-runtime";
7
+ import { c as ae } from "react/compiler-runtime";
8
8
  //#region src/components/DataGrid/columns/AutocompleteColumn.tsx
9
- var ce = {
9
+ var oe = {
10
10
  width: "100%",
11
11
  height: "100%",
12
12
  "& .MuiTextField-root .MuiInputBase-root": {
@@ -21,148 +21,154 @@ var ce = {
21
21
  },
22
22
  "& .MuiFormControl-root": { height: "100%" }
23
23
  };
24
- function i(e) {
25
- return re(e) ? "" : typeof e == "object" ? JSON.stringify(e) : String(e);
24
+ function se(t, n, r) {
25
+ return r ? r(t) : e(t, n);
26
26
  }
27
- function le(e, t) {
27
+ function o(e) {
28
+ return ne(e) ? "" : typeof e == "object" ? JSON.stringify(e) : String(e);
29
+ }
30
+ function ce(e, t) {
28
31
  return e == null || typeof e == "string" && e.trim() === "" ? t : e;
29
32
  }
30
- function a(n) {
31
- let a = se(61), { rowData: o, setRowData: s, choices: c, colType: l, focus: u, stopEditing: d, active: f, clearValue: de } = n, p = de === void 0 ? void 0 : de, m = te(s), h;
32
- a[0] === s ? h = a[1] : (h = () => {
33
- m.current = s;
34
- }, a[0] = s, a[1] = h), ee(h);
35
- let g = te(d), _;
36
- a[2] === d ? _ = a[3] : (_ = () => {
37
- g.current = d;
38
- }, a[2] = d, a[3] = _), ee(_);
39
- let v;
40
- a[4] === o ? v = a[5] : (v = i(o), a[4] = o, a[5] = v);
41
- let y = v, [b, fe] = ne(y), x;
42
- a[6] !== p || a[7] !== l || a[8] !== b || a[9] !== y ? (x = () => {
43
- if (b !== y) {
44
- let t = e(b, l);
45
- m.current(le(t, p));
33
+ function s(e) {
34
+ let n = ae(64), { rowData: s, setRowData: c, choices: l, colType: u, parseFreeText: ue, focus: d, stopEditing: f, active: p, clearValue: de } = e, m = de === void 0 ? void 0 : de, h = ee(c), g;
35
+ n[0] === c ? g = n[1] : (g = () => {
36
+ h.current = c;
37
+ }, n[0] = c, n[1] = g), i(g);
38
+ let _ = ee(f), v;
39
+ n[2] === f ? v = n[3] : (v = () => {
40
+ _.current = f;
41
+ }, n[2] = f, n[3] = v), i(v);
42
+ let y;
43
+ n[4] === s ? y = n[5] : (y = o(s), n[4] = s, n[5] = y);
44
+ let b = y, [x, fe] = te(b), S;
45
+ n[6] !== u || n[7] !== ue ? (S = (e) => se(e, u, ue), n[6] = u, n[7] = ue, n[8] = S) : S = n[8];
46
+ let C = S, w;
47
+ n[9] !== m || n[10] !== x || n[11] !== C || n[12] !== b ? (w = () => {
48
+ if (x !== b) {
49
+ let e = C(x);
50
+ h.current(ce(e, m));
46
51
  }
47
- }, a[6] = p, a[7] = l, a[8] = b, a[9] = y, a[10] = x) : x = a[10];
48
- let S;
49
- a[11] !== f || a[12] !== u || a[13] !== d || a[14] !== x ? (S = {
50
- active: f,
51
- focus: u,
52
- stopEditing: d,
53
- onDeactivate: x
54
- }, a[11] = f, a[12] = u, a[13] = d, a[14] = x, a[15] = S) : S = a[15];
55
- let { menuIsOpen: C, inputRef: w, handleListboxMouseDown: T, notifyOptionCommitted: E, handleMenuOpen: D, handleClose: O, handlePopupIndicatorMouseDown: k } = t(S), A, j;
56
- a[16] !== u || a[17] !== y ? (A = () => {
57
- u || fe(y);
58
- }, j = [u, y], a[16] = u, a[17] = y, a[18] = A, a[19] = j) : (A = a[18], j = a[19]), r(A, j);
59
- let M;
60
- a[20] === o ? M = a[21] : (M = !re(o) && o !== "", a[20] = o, a[21] = M);
61
- let pe = M, N = u ? void 0 : "none", P;
62
- a[22] === N ? P = a[23] : (P = {
52
+ }, n[9] = m, n[10] = x, n[11] = C, n[12] = b, n[13] = w) : w = n[13];
53
+ let T;
54
+ n[14] !== p || n[15] !== d || n[16] !== f || n[17] !== w ? (T = {
55
+ active: p,
56
+ focus: d,
57
+ stopEditing: f,
58
+ onDeactivate: w
59
+ }, n[14] = p, n[15] = d, n[16] = f, n[17] = w, n[18] = T) : T = n[18];
60
+ let { menuIsOpen: pe, inputRef: me, handleListboxMouseDown: E, notifyOptionCommitted: D, handleMenuOpen: O, handleClose: k, handlePopupIndicatorMouseDown: A } = t(T), j, M;
61
+ n[19] !== d || n[20] !== b ? (j = () => {
62
+ d || fe(b);
63
+ }, M = [d, b], n[19] = d, n[20] = b, n[21] = j, n[22] = M) : (j = n[21], M = n[22]), r(j, M);
64
+ let N;
65
+ n[23] === s ? N = n[24] : (N = !ne(s) && s !== "", n[23] = s, n[24] = N);
66
+ let he = N, P = d ? void 0 : "none", F;
67
+ n[25] === P ? F = n[26] : (F = {
63
68
  padding: "0 10px",
64
69
  backgroundColor: "inherit",
65
- pointerEvents: N
66
- }, a[22] = N, a[23] = P);
67
- let F = f ? "visible" : "hidden", I;
68
- a[24] === F ? I = a[25] : (I = {
69
- visibility: F,
70
+ pointerEvents: P
71
+ }, n[25] = P, n[26] = F);
72
+ let I = p ? "visible" : "hidden", L;
73
+ n[27] === I ? L = n[28] : (L = {
74
+ visibility: I,
70
75
  pointerEvents: "auto"
71
- }, a[24] = F, a[25] = I);
72
- let L = f ? "visible" : "hidden", R;
73
- a[26] === L ? R = a[27] : (R = {
74
- visibility: L,
76
+ }, n[27] = I, n[28] = L);
77
+ let R = p ? "visible" : "hidden", z;
78
+ n[29] === R ? z = n[30] : (z = {
79
+ visibility: R,
75
80
  pointerEvents: "auto"
76
- }, a[26] = L, a[27] = R);
77
- let z, B;
78
- a[28] === Symbol.for("react.memo_cache_sentinel") ? (z = { visibility: "visible" }, B = { visibility: "visible" }, a[28] = z, a[29] = B) : (z = a[28], B = a[29]);
79
- let V;
80
- a[30] !== P || a[31] !== I || a[32] !== R ? (V = {
81
- ...ce,
82
- "& .MuiAutocomplete-inputRoot": P,
83
- "& .MuiAutocomplete-clearIndicator": I,
84
- "& .MuiAutocomplete-popupIndicator": R,
85
- "&:hover .MuiAutocomplete-clearIndicator": z,
86
- "&:hover .MuiAutocomplete-popupIndicator": B
87
- }, a[30] = P, a[31] = I, a[32] = R, a[33] = V) : V = a[33];
88
- let H = V, U;
89
- a[34] === Symbol.for("react.memo_cache_sentinel") ? (U = (e) => {
90
- e.key === "Tab" ? (e.preventDefault(), g.current({ nextRow: !1 })) : e.key === "Enter" && (e.preventDefault(), g.current({ nextRow: !0 }));
91
- }, a[34] = U) : U = a[34];
92
- let me = U, W;
93
- a[35] !== p || a[36] !== l || a[37] !== E ? (W = (t, n, r) => {
94
- if (E(), r === "clear") m.current(p);
95
- else if (r === "createOption") {
96
- let t = e(n, l);
97
- m.current(le(t, p));
98
- } else m.current(n);
81
+ }, n[29] = R, n[30] = z);
82
+ let B, V;
83
+ n[31] === Symbol.for("react.memo_cache_sentinel") ? (B = { visibility: "visible" }, V = { visibility: "visible" }, n[31] = B, n[32] = V) : (B = n[31], V = n[32]);
84
+ let H;
85
+ n[33] !== F || n[34] !== L || n[35] !== z ? (H = {
86
+ ...oe,
87
+ "& .MuiAutocomplete-inputRoot": F,
88
+ "& .MuiAutocomplete-clearIndicator": L,
89
+ "& .MuiAutocomplete-popupIndicator": z,
90
+ "&:hover .MuiAutocomplete-clearIndicator": B,
91
+ "&:hover .MuiAutocomplete-popupIndicator": V
92
+ }, n[33] = F, n[34] = L, n[35] = z, n[36] = H) : H = n[36];
93
+ let U = H, W;
94
+ n[37] === Symbol.for("react.memo_cache_sentinel") ? (W = (e) => {
95
+ e.key === "Tab" ? (e.preventDefault(), _.current({ nextRow: !1 })) : e.key === "Enter" && (e.preventDefault(), _.current({ nextRow: !0 }));
96
+ }, n[37] = W) : W = n[37];
97
+ let ge = W, G;
98
+ n[38] !== m || n[39] !== D || n[40] !== C ? (G = (e, t, n) => {
99
+ if (D(), n === "clear") h.current(m);
100
+ else if (n === "createOption") {
101
+ let e = C(t);
102
+ h.current(ce(e, m));
103
+ } else h.current(t);
99
104
  setTimeout(() => {
100
- g.current({ nextRow: !1 });
105
+ _.current({ nextRow: !1 });
101
106
  }, 0);
102
- }, a[35] = p, a[36] = l, a[37] = E, a[38] = W) : W = a[38];
103
- let G = W, K = !pe, q = o, J;
104
- a[39] === Symbol.for("react.memo_cache_sentinel") ? (J = (e, t) => {
107
+ }, n[38] = m, n[39] = D, n[40] = C, n[41] = G) : G = n[41];
108
+ let K = G, q = !he, _e = s, J;
109
+ n[42] === Symbol.for("react.memo_cache_sentinel") ? (J = (e, t) => {
105
110
  fe(t);
106
- }, a[39] = J) : J = a[39];
111
+ }, n[42] = J) : J = n[42];
107
112
  let Y;
108
- a[40] === T ? Y = a[41] : (Y = { onMouseDown: T }, a[40] = T, a[41] = Y);
113
+ n[43] === E ? Y = n[44] : (Y = { onMouseDown: E }, n[43] = E, n[44] = Y);
109
114
  let X;
110
- a[42] === k ? X = a[43] : (X = { onMouseDown: k }, a[42] = k, a[43] = X);
115
+ n[45] === A ? X = n[46] : (X = { onMouseDown: A }, n[45] = A, n[46] = X);
111
116
  let Z;
112
- a[44] !== Y || a[45] !== X ? (Z = {
117
+ n[47] !== Y || n[48] !== X ? (Z = {
113
118
  listbox: Y,
114
119
  popupIndicator: X
115
- }, a[44] = Y, a[45] = X, a[46] = Z) : Z = a[46];
120
+ }, n[47] = Y, n[48] = X, n[49] = Z) : Z = n[49];
116
121
  let Q;
117
- a[47] === w ? Q = a[48] : (Q = (e) => /* @__PURE__ */ oe(ae, {
122
+ n[50] === me ? Q = n[51] : (Q = (e) => /* @__PURE__ */ a(ie, {
118
123
  ...e,
119
- inputRef: w
120
- }), a[47] = w, a[48] = Q);
124
+ inputRef: me
125
+ }), n[50] = me, n[51] = Q);
121
126
  let $;
122
- return a[49] !== H || a[50] !== c || a[51] !== G || a[52] !== O || a[53] !== D || a[54] !== b || a[55] !== C || a[56] !== K || a[57] !== q || a[58] !== Z || a[59] !== Q ? ($ = /* @__PURE__ */ oe(ie, {
123
- open: C,
124
- onOpen: D,
127
+ return n[52] !== U || n[53] !== l || n[54] !== K || n[55] !== k || n[56] !== O || n[57] !== x || n[58] !== pe || n[59] !== q || n[60] !== _e || n[61] !== Z || n[62] !== Q ? ($ = /* @__PURE__ */ a(re, {
128
+ open: pe,
129
+ onOpen: O,
125
130
  forcePopupIcon: !0,
126
- disableClearable: K,
131
+ disableClearable: q,
127
132
  freeSolo: !0,
128
133
  disablePortal: !1,
129
- options: c,
134
+ options: l,
130
135
  selectOnFocus: !0,
131
- getOptionLabel: ue,
132
- value: q,
133
- inputValue: b,
136
+ getOptionLabel: le,
137
+ value: _e,
138
+ inputValue: x,
134
139
  onInputChange: J,
135
- onKeyDown: me,
136
- onClose: O,
137
- onChange: G,
140
+ onKeyDown: ge,
141
+ onClose: k,
142
+ onChange: K,
138
143
  blurOnSelect: !0,
139
144
  slotProps: Z,
140
145
  renderInput: Q,
141
- sx: H
142
- }), a[49] = H, a[50] = c, a[51] = G, a[52] = O, a[53] = D, a[54] = b, a[55] = C, a[56] = K, a[57] = q, a[58] = Z, a[59] = Q, a[60] = $) : $ = a[60], $;
146
+ sx: U
147
+ }), n[52] = U, n[53] = l, n[54] = K, n[55] = k, n[56] = O, n[57] = x, n[58] = pe, n[59] = q, n[60] = _e, n[61] = Z, n[62] = Q, n[63] = $) : $ = n[63], $;
143
148
  }
144
- function ue(e) {
145
- return i(e);
149
+ function le(e) {
150
+ return o(e);
146
151
  }
147
- function o(e, t) {
148
- return e.rowData === t.rowData && e.choices === t.choices && e.colType === t.colType && e.focus === t.focus && e.active === t.active && e.clearValue === t.clearValue;
152
+ function c(e, t) {
153
+ return e.rowData === t.rowData && e.choices === t.choices && e.colType === t.colType && e.parseFreeText === t.parseFreeText && e.focus === t.focus && e.active === t.active && e.clearValue === t.clearValue;
149
154
  }
150
- var s = n(a, o);
151
- function c({ choices: e, colType: t, clearValue: n }) {
155
+ var l = n(s, c);
156
+ function u({ choices: e, colType: t, parseFreeText: n, clearValue: r }) {
152
157
  return {
153
- component: ((r) => /* @__PURE__ */ oe(s, {
154
- ...r,
158
+ component: ((i) => /* @__PURE__ */ a(l, {
159
+ ...i,
155
160
  choices: e,
156
161
  colType: t,
157
- clearValue: n
162
+ parseFreeText: n,
163
+ clearValue: r
158
164
  })),
159
165
  copyValue: ({ rowData: e }) => e,
160
- pasteValue: ({ value: e }) => e,
166
+ pasteValue: ({ value: e }) => se(e, t, n),
161
167
  disableKeys: !0,
162
168
  keepFocus: !0
163
169
  };
164
170
  }
165
171
  //#endregion
166
- export { a as AutocompleteCell, s as MemoizedAutocompleteCell, o as areAutocompleteCellPropsEqual, c as autocompleteColumn, i as castCellValueToString };
172
+ export { s as AutocompleteCell, l as MemoizedAutocompleteCell, c as areAutocompleteCellPropsEqual, u as autocompleteColumn, o as castCellValueToString };
167
173
 
168
174
  //# sourceMappingURL=AutocompleteColumn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteColumn.js","names":["parseFreeTextGivenJsonSchemaType","Autocomplete","AutocompleteChangeReason","SxProps","TextField","Theme","JSONSchema7Type","isNil","memo","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CellComponent","CellProps","Column","useGridAutocompleteState","AUTOCOMPLETE_BASE_SX","width","height","padding","backgroundColor","borderRadius","AutocompleteOption","Record","Array","AutocompleteCellProps","rowData","setRowData","value","choices","colType","clearValue","castCellValueToString","toCast","JSON","stringify","String","commitParsedValue","parsed","undefined","trim","AutocompleteCell","t0","$","_c","focus","stopEditing","active","t1","setRowDataRef","t2","current","stopEditingRef","t3","t4","rowDataAsString","localInputState","setLocalInputState","t5","t6","onDeactivate","menuIsOpen","inputRef","handleListboxMouseDown","notifyOptionCommitted","handleMenuOpen","handleClose","handlePopupIndicatorMouseDown","t7","t8","t9","hasValue","t10","t11","pointerEvents","t12","t13","visibility","t14","t15","t16","t17","Symbol","for","t18","autocompleteSx","t19","e","key","preventDefault","nextRow","handleKeyDown","t20","_e","newVal","reason","parsed_0","setTimeout","handleChange","t21","t22","t23","_","newInputValue","t24","onMouseDown","t25","t26","listbox","popupIndicator","t27","params","t28","_temp","option","areAutocompleteCellPropsEqual","prevProps","nextProps","MemoizedAutocompleteCell","AutocompleteColumnProps","autocompleteColumn","Partial","component","props","Omit","copyValue","pasteValue","disableKeys","keepFocus"],"sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"sourcesContent":["import parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Autocomplete,\n AutocompleteChangeReason,\n SxProps,\n TextField,\n Theme,\n} from '@mui/material'\nimport { JSONSchema7Type } from 'json-schema'\nimport { isNil } from 'lodash-es'\nimport {\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n CellComponent,\n CellProps,\n Column,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { useGridAutocompleteState } from './useGridAutocompleteState'\n\n// Static styles extracted to avoid recreation on every render\nconst AUTOCOMPLETE_BASE_SX: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n '& .MuiTextField-root .MuiInputBase-root': {\n height: '100%',\n padding: '0 10px',\n backgroundColor: 'inherit',\n borderRadius: 0,\n },\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n },\n '& .MuiFormControl-root': { height: '100%' },\n}\n\nexport type AutocompleteOption =\n | string\n | number\n | boolean\n | null\n | Record<string, unknown>\n | Array<unknown>\n\nexport type AutocompleteCellProps = CellProps & {\n rowData: AutocompleteOption\n setRowData: (value: AutocompleteOption) => void\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue?: undefined | null\n}\n\nexport function castCellValueToString(toCast: any): string {\n if (isNil(toCast)) {\n return ''\n }\n if (typeof toCast === 'object') {\n return JSON.stringify(toCast)\n }\n return String(toCast)\n}\n\n// Free-text typed/pasted into the cell parses to \"\" for empty input. Committing\n// \"\" leaves the cell as an empty string, which fails enum validation with a\n// terse \"is not a valid enum value\" message. Substitute the column's clearValue\n// (null for required, undefined for optional) so the commit path matches the\n// X-button clear path and the validator surfaces the substantive message.\nfunction commitParsedValue(\n parsed: unknown,\n clearValue: undefined | null,\n): unknown {\n if (\n parsed === null ||\n parsed === undefined ||\n (typeof parsed === 'string' && parsed.trim() === '')\n ) {\n return clearValue\n }\n return parsed\n}\n\nexport function AutocompleteCell({\n rowData,\n setRowData,\n choices,\n colType,\n focus,\n stopEditing,\n active,\n clearValue = undefined,\n}: AutocompleteCellProps) {\n // Stable refs so memo(AutocompleteCell) can use default shallow comparison —\n // react-datasheet-grid recreates these functions on every render, but their\n // behavior is stable for a given cell position.\n const setRowDataRef = useRef(setRowData)\n useLayoutEffect(() => {\n setRowDataRef.current = setRowData\n })\n const stopEditingRef = useRef(stopEditing)\n useLayoutEffect(() => {\n stopEditingRef.current = stopEditing\n })\n\n const rowDataAsString = castCellValueToString(rowData)\n const [localInputState, setLocalInputState] =\n useState<string>(rowDataAsString)\n\n const {\n menuIsOpen,\n inputRef,\n handleListboxMouseDown,\n notifyOptionCommitted,\n handleMenuOpen,\n handleClose,\n handlePopupIndicatorMouseDown,\n } = useGridAutocompleteState({\n active,\n focus,\n stopEditing,\n onDeactivate: () => {\n if (localInputState !== rowDataAsString) {\n // Commit any free-typed text that hasn't been saved yet\n const parsed = parseFreeTextGivenJsonSchemaType(\n localInputState,\n colType,\n )\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n }\n },\n })\n\n // Sync localInputState with rowData whenever the cell isn't being edited.\n // Covers: deletes/cuts from active-but-not-focused state, Escape (grid flips\n // focus=false while active stays true, so the gate must allow this case),\n // and post-commit cleanup after the cell exits edit mode.\n useEffect(() => {\n if (!focus) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, rowDataAsString])\n\n const hasValue = !isNil(rowData) && rowData !== ''\n\n // Memoize sx to avoid recreation — dynamic styles change based on active/focus state\n const autocompleteSx = useMemo<SxProps<Theme>>(\n () => ({\n ...AUTOCOMPLETE_BASE_SX,\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n pointerEvents: focus ? undefined : 'none',\n },\n '& .MuiAutocomplete-clearIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '& .MuiAutocomplete-popupIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '&:hover .MuiAutocomplete-clearIndicator': {\n visibility: 'visible',\n },\n '&:hover .MuiAutocomplete-popupIndicator': {\n visibility: 'visible',\n },\n }),\n [active, focus],\n )\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: false })\n } else if (e.key === 'Enter') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: true })\n }\n }, [])\n\n const handleChange = useCallback(\n (\n _e: React.SyntheticEvent,\n newVal: unknown,\n reason: AutocompleteChangeReason,\n ) => {\n notifyOptionCommitted()\n if (reason === 'clear') {\n setRowDataRef.current(clearValue)\n } else if (reason === 'createOption') {\n // The user typed an option that wasn't a defined enum — cast to correct type\n const parsed = parseFreeTextGivenJsonSchemaType(\n newVal as string,\n colType,\n )\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n } else {\n setRowDataRef.current(newVal as AutocompleteOption)\n }\n setTimeout(() => {\n stopEditingRef.current({ nextRow: false })\n }, 0)\n },\n [clearValue, colType, notifyOptionCommitted],\n )\n\n return (\n <Autocomplete\n open={menuIsOpen}\n onOpen={handleMenuOpen}\n forcePopupIcon={true}\n disableClearable={!hasValue}\n freeSolo={true}\n disablePortal={false}\n options={choices}\n selectOnFocus\n getOptionLabel={option => castCellValueToString(option)}\n value={rowData as AutocompleteOption}\n inputValue={localInputState}\n onInputChange={(_, newInputValue) => {\n setLocalInputState(newInputValue)\n }}\n onKeyDown={handleKeyDown}\n onClose={handleClose}\n onChange={handleChange}\n blurOnSelect={true}\n slotProps={{\n listbox: { onMouseDown: handleListboxMouseDown },\n popupIndicator: { onMouseDown: handlePopupIndicatorMouseDown },\n }}\n renderInput={params => <TextField {...params} inputRef={inputRef} />}\n sx={autocompleteSx}\n />\n )\n}\n\n// Memoize the cell component to prevent unnecessary re-renders.\n// react-datasheet-grid provides new setRowData/stopEditing function instances\n// on each render, so we must ignore those callback identities here and only\n// compare the props that affect rendering.\nexport function areAutocompleteCellPropsEqual(\n prevProps: AutocompleteCellProps,\n nextProps: AutocompleteCellProps,\n) {\n return (\n prevProps.rowData === nextProps.rowData &&\n prevProps.choices === nextProps.choices &&\n prevProps.colType === nextProps.colType &&\n prevProps.focus === nextProps.focus &&\n prevProps.active === nextProps.active &&\n prevProps.clearValue === nextProps.clearValue\n )\n}\n\nexport const MemoizedAutocompleteCell = memo(\n AutocompleteCell,\n areAutocompleteCellPropsEqual,\n)\nexport type AutocompleteColumnProps = {\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n clearValue: undefined | null\n}\n\nexport function autocompleteColumn({\n choices,\n colType,\n clearValue,\n}: AutocompleteColumnProps): Partial<Column> {\n return {\n component: ((props: Omit<AutocompleteCellProps, 'choices'>) => (\n <MemoizedAutocompleteCell\n {...props}\n choices={choices}\n colType={colType}\n clearValue={clearValue}\n />\n )) as CellComponent,\n // If we update our enums to support labels, then we can update copy to copy the label and paste to lookup the mapping from label -> value\n copyValue: ({ rowData }) => rowData,\n pasteValue: ({ value }) => value,\n disableKeys: true,\n keepFocus: true,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteColumn.js","names":["parseFreeTextGivenJsonSchemaType","Autocomplete","AutocompleteChangeReason","SxProps","TextField","Theme","JSONSchema7Type","isNil","memo","useCallback","useEffect","useLayoutEffect","useMemo","useRef","useState","CellComponent","CellProps","Column","useGridAutocompleteState","AUTOCOMPLETE_BASE_SX","width","height","padding","backgroundColor","borderRadius","AutocompleteOption","Record","Array","ParseFreeText","freeText","parseCellText","colType","parseFreeText","AutocompleteCellProps","rowData","setRowData","value","choices","clearValue","castCellValueToString","toCast","JSON","stringify","String","commitParsedValue","parsed","undefined","trim","AutocompleteCell","t0","$","_c","focus","stopEditing","active","t1","setRowDataRef","t2","current","stopEditingRef","t3","t4","rowDataAsString","localInputState","setLocalInputState","t5","parseTypedText","t6","t7","onDeactivate","menuIsOpen","inputRef","handleListboxMouseDown","notifyOptionCommitted","handleMenuOpen","handleClose","handlePopupIndicatorMouseDown","t8","t9","t10","hasValue","t11","t12","pointerEvents","t13","t14","visibility","t15","t16","t17","t18","Symbol","for","t19","autocompleteSx","t20","e","key","preventDefault","nextRow","handleKeyDown","t21","_e","newVal","reason","parsed_0","setTimeout","handleChange","t22","t23","t24","_","newInputValue","t25","onMouseDown","t26","t27","listbox","popupIndicator","t28","params","t29","_temp","option","areAutocompleteCellPropsEqual","prevProps","nextProps","MemoizedAutocompleteCell","AutocompleteColumnProps","autocompleteColumn","Partial","component","props","Omit","copyValue","pasteValue","disableKeys","keepFocus"],"sources":["../../../../src/components/DataGrid/columns/AutocompleteColumn.tsx"],"sourcesContent":["import parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Autocomplete,\n AutocompleteChangeReason,\n SxProps,\n TextField,\n Theme,\n} from '@mui/material'\nimport { JSONSchema7Type } from 'json-schema'\nimport { isNil } from 'lodash-es'\nimport {\n memo,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {\n CellComponent,\n CellProps,\n Column,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { useGridAutocompleteState } from './useGridAutocompleteState'\n\n// Static styles extracted to avoid recreation on every render\nconst AUTOCOMPLETE_BASE_SX: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n '& .MuiTextField-root .MuiInputBase-root': {\n height: '100%',\n padding: '0 10px',\n backgroundColor: 'inherit',\n borderRadius: 0,\n },\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n },\n '& .MuiFormControl-root': { height: '100%' },\n}\n\nexport type AutocompleteOption =\n | string\n | number\n | boolean\n | null\n | Record<string, unknown>\n | Array<unknown>\n\n/** Converts text typed or pasted into a cell into the value stored in the model */\nexport type ParseFreeText = (freeText: string) => unknown\n\nfunction parseCellText(\n freeText: string,\n colType: JSONSchema7Type | undefined,\n parseFreeText: ParseFreeText | undefined,\n): unknown {\n return parseFreeText\n ? parseFreeText(freeText)\n : parseFreeTextGivenJsonSchemaType(freeText, colType)\n}\n\nexport type AutocompleteCellProps = CellProps & {\n rowData: AutocompleteOption\n setRowData: (value: AutocompleteOption) => void\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n /**\n * Replaces parsing typed text by `colType`. Compared by reference when\n * memoizing the cell, so it must be stable across renders.\n */\n parseFreeText?: ParseFreeText\n clearValue?: undefined | null\n}\n\nexport function castCellValueToString(toCast: any): string {\n if (isNil(toCast)) {\n return ''\n }\n if (typeof toCast === 'object') {\n return JSON.stringify(toCast)\n }\n return String(toCast)\n}\n\n// Free-text typed/pasted into the cell parses to \"\" for empty input. Committing\n// \"\" leaves the cell as an empty string, which fails enum validation with a\n// terse \"is not a valid enum value\" message. Substitute the column's clearValue\n// (null for required, undefined for optional) so the commit path matches the\n// X-button clear path and the validator surfaces the substantive message.\nfunction commitParsedValue(\n parsed: unknown,\n clearValue: undefined | null,\n): unknown {\n if (\n parsed === null ||\n parsed === undefined ||\n (typeof parsed === 'string' && parsed.trim() === '')\n ) {\n return clearValue\n }\n return parsed\n}\n\nexport function AutocompleteCell({\n rowData,\n setRowData,\n choices,\n colType,\n parseFreeText,\n focus,\n stopEditing,\n active,\n clearValue = undefined,\n}: AutocompleteCellProps) {\n // Stable refs so memo(AutocompleteCell) can use default shallow comparison —\n // react-datasheet-grid recreates these functions on every render, but their\n // behavior is stable for a given cell position.\n const setRowDataRef = useRef(setRowData)\n useLayoutEffect(() => {\n setRowDataRef.current = setRowData\n })\n const stopEditingRef = useRef(stopEditing)\n useLayoutEffect(() => {\n stopEditingRef.current = stopEditing\n })\n\n const rowDataAsString = castCellValueToString(rowData)\n const [localInputState, setLocalInputState] =\n useState<string>(rowDataAsString)\n\n const parseTypedText = useCallback(\n (freeText: string) => parseCellText(freeText, colType, parseFreeText),\n [parseFreeText, colType],\n )\n\n const {\n menuIsOpen,\n inputRef,\n handleListboxMouseDown,\n notifyOptionCommitted,\n handleMenuOpen,\n handleClose,\n handlePopupIndicatorMouseDown,\n } = useGridAutocompleteState({\n active,\n focus,\n stopEditing,\n onDeactivate: () => {\n if (localInputState !== rowDataAsString) {\n // Commit any free-typed text that hasn't been saved yet\n const parsed = parseTypedText(localInputState)\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n }\n },\n })\n\n // Sync localInputState with rowData whenever the cell isn't being edited.\n // Covers: deletes/cuts from active-but-not-focused state, Escape (grid flips\n // focus=false while active stays true, so the gate must allow this case),\n // and post-commit cleanup after the cell exits edit mode.\n useEffect(() => {\n if (!focus) {\n setLocalInputState(rowDataAsString)\n }\n }, [focus, rowDataAsString])\n\n const hasValue = !isNil(rowData) && rowData !== ''\n\n // Memoize sx to avoid recreation — dynamic styles change based on active/focus state\n const autocompleteSx = useMemo<SxProps<Theme>>(\n () => ({\n ...AUTOCOMPLETE_BASE_SX,\n '& .MuiAutocomplete-inputRoot': {\n padding: '0 10px',\n backgroundColor: 'inherit',\n pointerEvents: focus ? undefined : 'none',\n },\n '& .MuiAutocomplete-clearIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '& .MuiAutocomplete-popupIndicator': {\n visibility: active ? 'visible' : 'hidden',\n pointerEvents: 'auto',\n },\n '&:hover .MuiAutocomplete-clearIndicator': {\n visibility: 'visible',\n },\n '&:hover .MuiAutocomplete-popupIndicator': {\n visibility: 'visible',\n },\n }),\n [active, focus],\n )\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: false })\n } else if (e.key === 'Enter') {\n e.preventDefault()\n stopEditingRef.current({ nextRow: true })\n }\n }, [])\n\n const handleChange = useCallback(\n (\n _e: React.SyntheticEvent,\n newVal: unknown,\n reason: AutocompleteChangeReason,\n ) => {\n notifyOptionCommitted()\n if (reason === 'clear') {\n setRowDataRef.current(clearValue)\n } else if (reason === 'createOption') {\n // The user typed an option that wasn't a defined enum — cast to correct type\n const parsed = parseTypedText(newVal as string)\n setRowDataRef.current(\n commitParsedValue(parsed, clearValue) as AutocompleteOption,\n )\n } else {\n setRowDataRef.current(newVal as AutocompleteOption)\n }\n setTimeout(() => {\n stopEditingRef.current({ nextRow: false })\n }, 0)\n },\n [clearValue, parseTypedText, notifyOptionCommitted],\n )\n\n return (\n <Autocomplete\n open={menuIsOpen}\n onOpen={handleMenuOpen}\n forcePopupIcon={true}\n disableClearable={!hasValue}\n freeSolo={true}\n disablePortal={false}\n options={choices}\n selectOnFocus\n getOptionLabel={option => castCellValueToString(option)}\n value={rowData as AutocompleteOption}\n inputValue={localInputState}\n onInputChange={(_, newInputValue) => {\n setLocalInputState(newInputValue)\n }}\n onKeyDown={handleKeyDown}\n onClose={handleClose}\n onChange={handleChange}\n blurOnSelect={true}\n slotProps={{\n listbox: { onMouseDown: handleListboxMouseDown },\n popupIndicator: { onMouseDown: handlePopupIndicatorMouseDown },\n }}\n renderInput={params => <TextField {...params} inputRef={inputRef} />}\n sx={autocompleteSx}\n />\n )\n}\n\n// Memoize the cell component to prevent unnecessary re-renders.\n// react-datasheet-grid provides new setRowData/stopEditing function instances\n// on each render, so we must ignore those callback identities here and only\n// compare the props that affect rendering.\nexport function areAutocompleteCellPropsEqual(\n prevProps: AutocompleteCellProps,\n nextProps: AutocompleteCellProps,\n) {\n return (\n prevProps.rowData === nextProps.rowData &&\n prevProps.choices === nextProps.choices &&\n prevProps.colType === nextProps.colType &&\n prevProps.parseFreeText === nextProps.parseFreeText &&\n prevProps.focus === nextProps.focus &&\n prevProps.active === nextProps.active &&\n prevProps.clearValue === nextProps.clearValue\n )\n}\n\nexport const MemoizedAutocompleteCell = memo(\n AutocompleteCell,\n areAutocompleteCellPropsEqual,\n)\nexport type AutocompleteColumnProps = {\n choices: AutocompleteOption[]\n colType?: JSONSchema7Type\n /** Parses typed and pasted text. When omitted, both are parsed by `colType`. */\n parseFreeText?: ParseFreeText\n clearValue: undefined | null\n}\n\nexport function autocompleteColumn({\n choices,\n colType,\n parseFreeText,\n clearValue,\n}: AutocompleteColumnProps): Partial<Column> {\n return {\n component: ((props: Omit<AutocompleteCellProps, 'choices'>) => (\n <MemoizedAutocompleteCell\n {...props}\n choices={choices}\n colType={colType}\n parseFreeText={parseFreeText}\n clearValue={clearValue}\n />\n )) as CellComponent,\n // If we update our enums to support labels, then we can update copy to copy the label and paste to lookup the mapping from label -> value\n copyValue: ({ rowData }) => rowData,\n pasteValue: ({ value }: { value: string }) =>\n parseCellText(value, colType, parseFreeText),\n disableKeys: true,\n keepFocus: true,\n }\n}\n"],"mappings":";;;;;;;;AA2BA,IAAMmB,KAAuC;CAC3CC,OAAO;CACPC,QAAQ;CACR,2CAA2C;EACzCA,QAAQ;EACRC,SAAS;EACTC,iBAAiB;EACjBC,cAAc;CAChB;CACA,gCAAgC;EAC9BF,SAAS;EACTC,iBAAiB;CACnB;CACA,0BAA0B,EAAEF,QAAQ,OAAO;AAC7C;AAaA,SAASS,GACPD,GACAE,GACAC,GACS;CACT,OAAOA,IACHA,EAAcH,CAAQ,IACtB7B,EAAiC6B,GAAUE,CAAO;AACxD;AAeA,SAAgBQ,EAAsBC,GAAqB;CAOzD,OANIjC,GAAMiC,CAAM,IACP,KAEL,OAAOA,KAAW,WACbC,KAAKC,UAAUF,CAAM,IAEvBG,OAAOH,CAAM;AACtB;AAOA,SAASI,GACPC,GACAP,GACS;CAQT,OANEO,KAAW,QAEV,OAAOA,KAAW,YAAYA,EAAOE,KAAK,MAAM,KAE1CT,IAEFO;AACT;AAEA,SAAOG,EAAAC,GAAA;CAAA,IAAAC,IAAAC,GAAA,EAAA,GAA0B,EAAAjB,YAAAC,eAAAE,YAAAN,YAAAC,mBAAAoB,UAAAC,gBAAAC,WAAAhB,YAAAiB,OAAAN,GAS/BX,IAAAiB,OAAAT,KAAAA,IAAAA,KAAAA,IAAAS,IAKAC,IAAsB3C,GAAOsB,CAAU,GAACsB;CACxC9C,AADwCuC,EAAA,OAAAf,IAGvCsB,IAAAP,EAAA,MAFeO,UAAA;EACdD,EAAaE,UAAWvB;CAAH,GACtBe,EAAA,KAAAf,GAAAe,EAAA,KAAAO,IAFD9C,EAAgB8C,CAEf;CACD,IAAAE,IAAuB9C,GAAOwC,CAAW,GAACO;CAC1CjD,AAD0CuC,EAAA,OAAAG,IAGzCO,IAAAV,EAAA,MAFeU,UAAA;EACdD,EAAcD,UAAWL;CAAH,GACvBH,EAAA,KAAAG,GAAAH,EAAA,KAAAU,IAFDjD,EAAgBiD,CAEf;CAAC,IAAAC;CAAA,AAAAX,EAAA,OAAAhB,IAEoD2B,IAAAX,EAAA,MAA9BW,IAAAtB,EAAsBL,CAAO,GAACgB,EAAA,KAAAhB,GAAAgB,EAAA,KAAAW;CAAtD,IAAAC,IAAwBD,GACxB,CAAAE,GAAAC,MACElD,GAAiBgD,CAAe,GAACG;CAAA,AAAAf,EAAA,OAAAnB,KAAAmB,EAAA,OAAAlB,MAGjCiC,KAAApC,MAAsBC,GAAcD,GAAUE,GAASC,EAAa,GAACkB,EAAA,KAAAnB,GAAAmB,EAAA,KAAAlB,IAAAkB,EAAA,KAAAe,KAAAA,IAAAf,EAAA;CADvE,IAAAgB,IAAuBD,GAGtBE;CAAA,AAAAjB,EAAA,OAAAZ,KAAAY,EAAA,QAAAa,KAAAb,EAAA,QAAAgB,KAAAhB,EAAA,QAAAY,KAceK,UAAA;EACZ,IAAIJ,MAAoBD,GAAe;GAErC,IAAAjB,IAAeqB,EAAeH,CAAe;GAC7CP,EAAaE,QACXd,GAAkBC,GAAQP,CAAU,CACtC;EAAC;CACF,GACFY,EAAA,KAAAZ,GAAAY,EAAA,MAAAa,GAAAb,EAAA,MAAAgB,GAAAhB,EAAA,MAAAY,GAAAZ,EAAA,MAAAiB,KAAAA,IAAAjB,EAAA;CAAA,IAAAkB;CAAA,AAAAlB,EAAA,QAAAI,KAAAJ,EAAA,QAAAE,KAAAF,EAAA,QAAAG,KAAAH,EAAA,QAAAiB,KAZ0BC,IAAA;EAAAd;EAAAF;EAAAC;EAAAgB,cAIbF;CAShB,GAACjB,EAAA,MAAAI,GAAAJ,EAAA,MAAAE,GAAAF,EAAA,MAAAG,GAAAH,EAAA,MAAAiB,GAAAjB,EAAA,MAAAkB,KAAAA,IAAAlB,EAAA;CArBD,IAAA,EAAAoB,gBAAAC,cAAAC,2BAAAC,0BAAAC,mBAAAC,gBAAAC,qCAQI1D,EAAyBkD,CAa5B,GAACS,GAAAC;CAMFpE,AANEwC,EAAA,QAAAE,KAAAF,EAAA,QAAAY,KAMQe,UAAA;EACR,AAAKzB,KACHY,GAAmBF,CAAe;CACnC,GACAgB,IAAA,CAAC1B,GAAOU,CAAe,GAACZ,EAAA,MAAAE,GAAAF,EAAA,MAAAY,GAAAZ,EAAA,MAAA2B,GAAA3B,EAAA,MAAA4B,MAAAD,IAAA3B,EAAA,KAAA4B,IAAA5B,EAAA,MAJ3BxC,EAAUmE,GAIPC,CAAwB;CAAC,IAAAC;CAAA,AAAA7B,EAAA,QAAAhB,IAEsB6C,IAAA7B,EAAA,OAAjC6B,IAAA,CAACxE,GAAM2B,CAAO,KAAKA,MAAY,IAAEgB,EAAA,MAAAhB,GAAAgB,EAAA,MAAA6B;CAAlD,IAAAC,KAAiBD,GASIE,IAAA7B,IAAAN,KAAAA,IAAA,QAA0BoC;CAAA,AAAAhC,EAAA,QAAA+B,IAC1CC,IAAAhC,EAAA,OAJ+BgC,IAAA;EAAA5D,SACrB;EAAQC,iBACA;EAAS4D,eACXF;CACjB,GAAC/B,EAAA,MAAA+B,GAAA/B,EAAA,MAAAgC;CAEa,IAAAE,IAAA9B,IAAA,YAAA,UAA6B+B;CAAA,AAAAnC,EAAA,QAAAkC,IAE1CC,IAAAnC,EAAA,OAHoCmC,IAAA;EAAAC,YACvBF;EAA6BD,eAC1B;CACjB,GAACjC,EAAA,MAAAkC,GAAAlC,EAAA,MAAAmC;CAEa,IAAAE,IAAAjC,IAAA,YAAA,UAA6BkC;CAAA,AAAAtC,EAAA,QAAAqC,IAE1CC,IAAAtC,EAAA,OAHoCsC,IAAA;EAAAF,YACvBC;EAA6BJ,eAC1B;CACjB,GAACjC,EAAA,MAAAqC,GAAArC,EAAA,MAAAsC;CAAA,IAAAC,GAAAC;CAAA,AAAAxC,EAAA,QAAAyC,OAAAC,IAAA,2BAAA,KAC0CH,IAAA,EAAAH,YAC7B,UACd,GAC2CI,IAAA,EAAAJ,YAC7B,UACd,GAACpC,EAAA,MAAAuC,GAAAvC,EAAA,MAAAwC,MAAAD,IAAAvC,EAAA,KAAAwC,IAAAxC,EAAA;CAAA,IAAA2C;CAAA,AAAA3C,EAAA,QAAAgC,KAAAhC,EAAA,QAAAmC,KAAAnC,EAAA,QAAAsC,KApBIK,IAAA;EAAA,GACF1E;EAAoB,gCACS+D;EAI/B,qCACoCG;EAGpC,qCACoCG;EAGpC,2CAC0CC;EAE1C,2CAC0CC;CAG7C,GAACxC,EAAA,MAAAgC,GAAAhC,EAAA,MAAAmC,GAAAnC,EAAA,MAAAsC,GAAAtC,EAAA,MAAA2C,KAAAA,IAAA3C,EAAA;CAtBH,IAAA4C,IACSD,GAuBRE;CAAA,AAAA7C,EAAA,QAAAyC,OAAAC,IAAA,2BAAA,KAEiCG,KAAAC,MAAA;EAChC,AAAIA,EAACC,QAAS,SACZD,EAACE,eAAgB,GACjBvC,EAAcD,QAAS,EAAAyC,SAAW,GAAM,CAAC,KAChCH,EAACC,QAAS,YACnBD,EAACE,eAAgB,GACjBvC,EAAcD,QAAS,EAAAyC,SAAW,GAAK,CAAC;CACzC,GACFjD,EAAA,MAAA6C,KAAAA,IAAA7C,EAAA;CARD,IAAAkD,KAAsBL,GAQhBM;CAAA,AAAAnD,EAAA,QAAAZ,KAAAY,EAAA,QAAAuB,KAAAvB,EAAA,QAAAgB,KAGJmC,KAAAC,GAAAC,GAAAC,MAAA;EAME,IADA/B,EAAsB,GAClB+B,MAAW,SACbhD,EAAaE,QAASpB,CAAU;OAC3B,IAAIkE,MAAW,gBAAc;GAElC,IAAAC,IAAevC,EAAeqC,CAAgB;GAC9C/C,EAAaE,QACXd,GAAkBC,GAAQP,CAAU,CACtC;EAAC,OAEDkB,EAAaE,QAAS6C,CAA4B;EAEpDG,iBAAW;GACT/C,EAAcD,QAAS,EAAAyC,SAAW,GAAM,CAAC;EAAC,GACzC,CAAC;CAAC,GACNjD,EAAA,MAAAZ,GAAAY,EAAA,MAAAuB,GAAAvB,EAAA,MAAAgB,GAAAhB,EAAA,MAAAmD,KAAAA,IAAAnD,EAAA;CArBH,IAAAyD,IAAqBN,GA8BCO,IAAA,CAAC5B,IAMZ6B,KAAA3E,GAA6B4E;CAAA,AAAA5D,EAAA,QAAAyC,OAAAC,IAAA,2BAAA,KAErBkB,KAAAC,GAAAC,MAAA;EACbhD,GAAmBgD,CAAa;CAAC,GAClC9D,EAAA,MAAA4D,KAAAA,IAAA5D,EAAA;CAAA,IAAA+D;CAAA,AAAA/D,EAAA,QAAAsB,IAMiDyC,IAAA/D,EAAA,OAAvC+D,IAAA,EAAAC,aAAe1C,EAAuB,GAACtB,EAAA,MAAAsB,GAAAtB,EAAA,MAAA+D;CAAA,IAAAE;CAAA,AAAAjE,EAAA,QAAA0B,IACcuC,IAAAjE,EAAA,OAA9CiE,IAAA,EAAAD,aAAetC,EAA8B,GAAC1B,EAAA,MAAA0B,GAAA1B,EAAA,MAAAiE;CAAA,IAAAC;CAAA,AAAAlE,EAAA,QAAA+D,KAAA/D,EAAA,QAAAiE,KAFrDC,IAAA;EAAAC,SACAJ;EAAuCK,gBAChCH;CAClB,GAACjE,EAAA,MAAA+D,GAAA/D,EAAA,MAAAiE,GAAAjE,EAAA,MAAAkE,KAAAA,IAAAlE,EAAA;CAAA,IAAAqE;CAAA,AAAArE,EAAA,QAAAqB,KACmEgD,IAAArE,EAAA,OAAvDqE,KAAAC,MAAU,kBAAC,IAAD;EAAU,GAAKA;EAAkBjD;CAAQ,CAAA,GAAIrB,EAAA,MAAAqB,IAAArB,EAAA,MAAAqE;CAAA,IAAAE;CAEpE,OAFoEvE,EAAA,QAAA4C,KAAA5C,EAAA,QAAAb,KAAAa,EAAA,QAAAyD,KAAAzD,EAAA,QAAAyB,KAAAzB,EAAA,QAAAwB,KAAAxB,EAAA,QAAAa,KAAAb,EAAA,QAAAoB,MAAApB,EAAA,QAAA0D,KAAA1D,EAAA,QAAA2D,MAAA3D,EAAA,QAAAkE,KAAAlE,EAAA,QAAAqE,KAvBtEE,IAAA,kBAAC,IAAD;EACQnD,MAAAA;EACEI,QAAAA;EACQ,gBAAA;EACE,kBAAAkC;EACR,UAAA;EACK,eAAA;EACNvE,SAAAA;EACT,eAAA;EACgB,gBAAAqF;EACT,OAAAb;EACK9C,YAAAA;EACG,eAAA+C;EAGJV,WAAAA;EACFzB,SAAAA;EACCgC,UAAAA;EACI,cAAA;EACH,WAAAS;EAIE,aAAAG;EACTzB,IAAAA;CAAc,CAAA,GAClB5C,EAAA,MAAA4C,GAAA5C,EAAA,MAAAb,GAAAa,EAAA,MAAAyD,GAAAzD,EAAA,MAAAyB,GAAAzB,EAAA,MAAAwB,GAAAxB,EAAA,MAAAa,GAAAb,EAAA,MAAAoB,IAAApB,EAAA,MAAA0D,GAAA1D,EAAA,MAAA2D,IAAA3D,EAAA,MAAAkE,GAAAlE,EAAA,MAAAqE,GAAArE,EAAA,MAAAuE,KAAAA,IAAAvE,EAAA,KAzBFuE;AAyBE;AA3JC,SAAAC,GAAAC,GAAA;CAAA,OA2IyBpF,EAAsBoF,CAAM;AAAC;AAwB7D,SAAgBC,EACdC,GACAC,GACA;CACA,OACED,EAAU3F,YAAY4F,EAAU5F,WAChC2F,EAAUxF,YAAYyF,EAAUzF,WAChCwF,EAAU9F,YAAY+F,EAAU/F,WAChC8F,EAAU7F,kBAAkB8F,EAAU9F,iBACtC6F,EAAUzE,UAAU0E,EAAU1E,SAC9ByE,EAAUvE,WAAWwE,EAAUxE,UAC/BuE,EAAUvF,eAAewF,EAAUxF;AAEvC;AAEA,IAAayF,IAA2BvH,EACtCwC,GACA4E,CACF;AASA,SAAgBK,EAAmB,EACjC5F,YACAN,YACAC,kBACAM,iBAC2C;CAC3C,OAAO;EACL6F,aAAaC,MACX,kBAAC,GAAD;GACE,GAAIA;GACK/F;GACAN;GACMC;GACHM;EAAW,CAAA;EAI3BgG,YAAY,EAAEpG,iBAAcA;EAC5BqG,aAAa,EAAEnG,eACbN,GAAcM,GAAOL,GAASC,CAAa;EAC7CwG,aAAa;EACbC,WAAW;CACb;AACF"}
@@ -18,7 +18,7 @@ function o({ colType: i = "number", isRequired: o }) {
18
18
  formatBlurredInput: a,
19
19
  formatInputOnFocus: t,
20
20
  parseUserInput: s,
21
- parsePastedValue: (e) => s(e.replace(/[\n\r]+/g, " "))
21
+ parsePastedValue: (e) => s(e.replaceAll(/[\n\r]+/g, " "))
22
22
  });
23
23
  }
24
24
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"NumberColumn.js","names":["getEmptyValue","parseFreeTextGivenJsonSchemaType","Column","createTextColumn","JSONSchema7Type","castCellValueToString","NUMBER_FORMAT","Intl","NumberFormat","formatNumberCellValue","value","Number","isNaN","format","NumberColumnProps","colType","isRequired","NumberColumnData","placeholder","alignRight","continuousUpdates","parseUserInput","formatBlurredInput","formatInputOnFocus","numberColumn","Partial","parse","trim","deletedValue","parsePastedValue","replace"],"sources":["../../../../src/components/DataGrid/columns/NumberColumn.ts"],"sourcesContent":["import { getEmptyValue } from '@/components/DataGrid/utils/getEmptyValue'\nimport parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Column,\n createTextColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { JSONSchema7Type } from 'json-schema'\nimport { castCellValueToString } from './AutocompleteColumn'\n\nconst NUMBER_FORMAT = new Intl.NumberFormat()\n\n/**\n * Render a numeric cell value for display while the cell is not being edited.\n *\n * Real numbers are locale-formatted; anything else is stringified verbatim.\n * Numeric columns legitimately hold non-numeric values — CSV import writes\n * cells server-side without passing through any client-side parsing, and\n * parseFreeTextGivenJsonSchemaType deliberately preserves unparseable text so\n * the validator can report it. Rendering those as blank leaves the user with an\n * apparently empty cell on a row flagged invalid.\n */\nexport function formatNumberCellValue(value: unknown): string {\n if (typeof value === 'number') {\n return Number.isNaN(value) ? '' : NUMBER_FORMAT.format(value)\n }\n return castCellValueToString(value)\n}\n\nexport type NumberColumnProps = {\n colType?: JSONSchema7Type\n isRequired?: boolean\n}\n\n/**\n * Mirrors the (unexported) columnData that createTextColumn builds, so callers\n * and tests can reach the format/parse functions it derives.\n */\nexport type NumberColumnData = {\n placeholder?: string\n alignRight: boolean\n continuousUpdates: boolean\n parseUserInput: (value: string) => unknown\n formatBlurredInput: (value: unknown) => string\n formatInputOnFocus: (value: unknown) => string\n}\n\nexport function numberColumn({\n colType = 'number',\n isRequired,\n}: NumberColumnProps): Partial<Column<unknown, NumberColumnData, string>> {\n function parse(value: string): unknown {\n if (value.trim() === '') {\n return getEmptyValue(isRequired)\n }\n return parseFreeTextGivenJsonSchemaType(value, colType)\n }\n\n return createTextColumn<unknown>({\n alignRight: true,\n continuousUpdates: false,\n deletedValue: getEmptyValue(isRequired),\n formatBlurredInput: formatNumberCellValue,\n // Edit against the stored value rather than the locale-formatted one so\n // grouping separators never reach the parser.\n formatInputOnFocus: castCellValueToString,\n parseUserInput: parse,\n parsePastedValue: value => parse(value.replace(/[\\n\\r]+/g, ' ')),\n })\n}\n"],"mappings":";;;;;AASA,IAAMM,IAAgB,IAAIC,KAAKC,aAAa;AAY5C,SAAgBC,EAAsBC,GAAwB;CAI5D,OAHI,OAAOA,KAAU,WACZC,OAAOC,MAAMF,CAAK,IAAI,KAAKJ,EAAcO,OAAOH,CAAK,IAEvDL,EAAsBK,CAAK;AACpC;AAoBA,SAAgBc,EAAa,EAC3BT,aAAU,UACVC,iBACwE;CACxE,SAASU,EAAMhB,GAAwB;EAIrC,OAHIA,EAAMiB,KAAK,MAAM,KACZ3B,EAAcgB,CAAU,IAE1Bf,EAAiCS,GAAOK,CAAO;CACxD;CAEA,OAAOZ,EAA0B;EAC/BgB,YAAY;EACZC,mBAAmB;EACnBQ,cAAc5B,EAAcgB,CAAU;EACtCM,oBAAoBb;EAGpBc,oBAAoBlB;EACpBgB,gBAAgBK;EAChBG,mBAAkBnB,MAASgB,EAAMhB,EAAMoB,QAAQ,YAAY,GAAG,CAAC;CACjE,CAAC;AACH"}
1
+ {"version":3,"file":"NumberColumn.js","names":["getEmptyValue","parseFreeTextGivenJsonSchemaType","Column","createTextColumn","JSONSchema7Type","castCellValueToString","NUMBER_FORMAT","Intl","NumberFormat","formatNumberCellValue","value","Number","isNaN","format","NumberColumnProps","colType","isRequired","NumberColumnData","placeholder","alignRight","continuousUpdates","parseUserInput","formatBlurredInput","formatInputOnFocus","numberColumn","Partial","parse","trim","deletedValue","parsePastedValue","replaceAll"],"sources":["../../../../src/components/DataGrid/columns/NumberColumn.ts"],"sourcesContent":["import { getEmptyValue } from '@/components/DataGrid/utils/getEmptyValue'\nimport parseFreeTextGivenJsonSchemaType from '@/components/DataGrid/utils/parseFreeTextUsingJsonSchemaType'\nimport {\n Column,\n createTextColumn,\n} from '@sage-bionetworks/react-datasheet-grid'\nimport { JSONSchema7Type } from 'json-schema'\nimport { castCellValueToString } from './AutocompleteColumn'\n\nconst NUMBER_FORMAT = new Intl.NumberFormat()\n\n/**\n * Render a numeric cell value for display while the cell is not being edited.\n *\n * Real numbers are locale-formatted; anything else is stringified verbatim.\n * Numeric columns legitimately hold non-numeric values — CSV import writes\n * cells server-side without passing through any client-side parsing, and\n * parseFreeTextGivenJsonSchemaType deliberately preserves unparseable text so\n * the validator can report it. Rendering those as blank leaves the user with an\n * apparently empty cell on a row flagged invalid.\n */\nexport function formatNumberCellValue(value: unknown): string {\n if (typeof value === 'number') {\n return Number.isNaN(value) ? '' : NUMBER_FORMAT.format(value)\n }\n return castCellValueToString(value)\n}\n\nexport type NumberColumnProps = {\n colType?: JSONSchema7Type\n isRequired?: boolean\n}\n\n/**\n * Mirrors the (unexported) columnData that createTextColumn builds, so callers\n * and tests can reach the format/parse functions it derives.\n */\nexport type NumberColumnData = {\n placeholder?: string\n alignRight: boolean\n continuousUpdates: boolean\n parseUserInput: (value: string) => unknown\n formatBlurredInput: (value: unknown) => string\n formatInputOnFocus: (value: unknown) => string\n}\n\nexport function numberColumn({\n colType = 'number',\n isRequired,\n}: NumberColumnProps): Partial<Column<unknown, NumberColumnData, string>> {\n function parse(value: string): unknown {\n if (value.trim() === '') {\n return getEmptyValue(isRequired)\n }\n return parseFreeTextGivenJsonSchemaType(value, colType)\n }\n\n return createTextColumn<unknown>({\n alignRight: true,\n continuousUpdates: false,\n deletedValue: getEmptyValue(isRequired),\n formatBlurredInput: formatNumberCellValue,\n // Edit against the stored value rather than the locale-formatted one so\n // grouping separators never reach the parser.\n formatInputOnFocus: castCellValueToString,\n parseUserInput: parse,\n parsePastedValue: value => parse(value.replaceAll(/[\\n\\r]+/g, ' ')),\n })\n}\n"],"mappings":";;;;;AASA,IAAMM,IAAgB,IAAIC,KAAKC,aAAa;AAY5C,SAAgBC,EAAsBC,GAAwB;CAI5D,OAHI,OAAOA,KAAU,WACZC,OAAOC,MAAMF,CAAK,IAAI,KAAKJ,EAAcO,OAAOH,CAAK,IAEvDL,EAAsBK,CAAK;AACpC;AAoBA,SAAgBc,EAAa,EAC3BT,aAAU,UACVC,iBACwE;CACxE,SAASU,EAAMhB,GAAwB;EAIrC,OAHIA,EAAMiB,KAAK,MAAM,KACZ3B,EAAcgB,CAAU,IAE1Bf,EAAiCS,GAAOK,CAAO;CACxD;CAEA,OAAOZ,EAA0B;EAC/BgB,YAAY;EACZC,mBAAmB;EACnBQ,cAAc5B,EAAcgB,CAAU;EACtCM,oBAAoBb;EAGpBc,oBAAoBlB;EACpBgB,gBAAgBK;EAChBG,mBAAkBnB,MAASgB,EAAMhB,EAAMoB,WAAW,YAAY,GAAG,CAAC;CACpE,CAAC;AACH"}
@@ -0,0 +1,20 @@
1
+ import { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues';
2
+ import { Column } from '@sage-bionetworks/react-datasheet-grid';
3
+ /**
4
+ * Converts text entered into a number-or-enum cell to the type its schema
5
+ * expects: one of the allowed strings stays a string, a decimal number becomes
6
+ * a number, and anything else is kept as trimmed text. The value is never
7
+ * rounded or range-checked; the backend validator decides whether it is valid.
8
+ */
9
+ export declare function parseNumberOrEnumInput(text: string, enumValues: readonly EnumeratedValue[]): string | number;
10
+ export type NumberOrEnumColumnProps = {
11
+ enumValues: EnumeratedValue[];
12
+ clearValue: undefined | null;
13
+ };
14
+ /**
15
+ * A column for a property that is either a number or one of a closed set of
16
+ * strings. It offers the strings as options and stores typed or pasted numbers
17
+ * as numbers.
18
+ */
19
+ export declare function numberOrEnumColumn({ enumValues, clearValue, }: NumberOrEnumColumnProps): Partial<Column>;
20
+ //# sourceMappingURL=NumberOrEnumColumn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberOrEnumColumn.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/columns/NumberOrEnumColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAA;AAO/D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,eAAe,EAAE,GACrC,MAAM,GAAG,MAAM,CAMjB;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,UAAU,GACX,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM3C"}
@@ -0,0 +1,18 @@
1
+ import { autocompleteColumn as e } from "./AutocompleteColumn.js";
2
+ //#region src/components/DataGrid/columns/NumberOrEnumColumn.ts
3
+ var t = /^-?\d+(\.\d+)?$/;
4
+ function n(e, n) {
5
+ let r = e.trim();
6
+ return n.includes(r) ? r : t.test(r) ? Number(r) : r;
7
+ }
8
+ function r({ enumValues: t, clearValue: r }) {
9
+ return e({
10
+ choices: t,
11
+ parseFreeText: (e) => n(e, t),
12
+ clearValue: r
13
+ });
14
+ }
15
+ //#endregion
16
+ export { r as numberOrEnumColumn, n as parseNumberOrEnumInput };
17
+
18
+ //# sourceMappingURL=NumberOrEnumColumn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberOrEnumColumn.js","names":["EnumeratedValue","Column","autocompleteColumn","DECIMAL_NUMBER_PATTERN","parseNumberOrEnumInput","text","enumValues","trimmed","trim","includes","test","Number","NumberOrEnumColumnProps","clearValue","numberOrEnumColumn","Partial","choices","parseFreeText"],"sources":["../../../../src/components/DataGrid/columns/NumberOrEnumColumn.ts"],"sourcesContent":["import { EnumeratedValue } from '@/utils/jsonschema/getEnumeratedValues'\nimport { Column } from '@sage-bionetworks/react-datasheet-grid'\nimport { autocompleteColumn } from './AutocompleteColumn'\n\n// Decimal notation only, so exponent, hex, and binary forms (e.g. \"0x2B\") are\n// left as text for the validator to reject rather than stored as a different number.\nconst DECIMAL_NUMBER_PATTERN = /^-?\\d+(\\.\\d+)?$/\n\n/**\n * Converts text entered into a number-or-enum cell to the type its schema\n * expects: one of the allowed strings stays a string, a decimal number becomes\n * a number, and anything else is kept as trimmed text. The value is never\n * rounded or range-checked; the backend validator decides whether it is valid.\n */\nexport function parseNumberOrEnumInput(\n text: string,\n enumValues: readonly EnumeratedValue[],\n): string | number {\n const trimmed = text.trim()\n if (enumValues.includes(trimmed)) {\n return trimmed\n }\n return DECIMAL_NUMBER_PATTERN.test(trimmed) ? Number(trimmed) : trimmed\n}\n\nexport type NumberOrEnumColumnProps = {\n enumValues: EnumeratedValue[]\n clearValue: undefined | null\n}\n\n/**\n * A column for a property that is either a number or one of a closed set of\n * strings. It offers the strings as options and stores typed or pasted numbers\n * as numbers.\n */\nexport function numberOrEnumColumn({\n enumValues,\n clearValue,\n}: NumberOrEnumColumnProps): Partial<Column> {\n return autocompleteColumn({\n choices: enumValues,\n parseFreeText: text => parseNumberOrEnumInput(text, enumValues),\n clearValue,\n })\n}\n"],"mappings":";;AAMA,IAAMG,IAAyB;AAQ/B,SAAgBC,EACdC,GACAC,GACiB;CACjB,IAAMC,IAAUF,EAAKG,KAAK;CAI1B,OAHIF,EAAWG,SAASF,CAAO,IACtBA,IAEFJ,EAAuBO,KAAKH,CAAO,IAAII,OAAOJ,CAAO,IAAIA;AAClE;AAYA,SAAgBO,EAAmB,EACjCR,eACAO,iBAC2C;CAC3C,OAAOX,EAAmB;EACxBc,SAASV;EACTW,gBAAeZ,MAAQD,EAAuBC,GAAMC,CAAU;EAC9DO;CACF,CAAC;AACH"}
@@ -2,11 +2,11 @@ import { Fragment as e, jsx as t } from "react/jsx-runtime";
2
2
  import { c as n } from "react/compiler-runtime";
3
3
  import { createAddRowsComponent as r, createContextMenuComponent as i } from "@sage-bionetworks/react-datasheet-grid";
4
4
  //#region src/components/DataGrid/components/contextMenu.tsx
5
- var a = [
5
+ var a = new Set([
6
6
  "COPY",
7
7
  "PASTE",
8
8
  "CUT"
9
- ], o = r(), s = {
9
+ ]), o = r(), s = {
10
10
  COPY: "Copy",
11
11
  PASTE: "Paste",
12
12
  CUT: "Cut",
@@ -25,7 +25,7 @@ var a = [
25
25
  }), r[2] = a, r[3] = e, r[4] = o) : o = r[4], o;
26
26
  }, f = (e) => /* @__PURE__ */ t(o, { ...e }), p = (e) => /* @__PURE__ */ t(d, { ...e }), m = (e) => /* @__PURE__ */ t(u, { ...e });
27
27
  function h(e) {
28
- return a.includes(e.type);
28
+ return a.has(e.type);
29
29
  }
30
30
  //#endregion
31
31
  export { f as renderAddRowsComponent, m as renderRecordSetContextMenu, p as renderViewContextMenu };
@@ -1 +1 @@
1
- {"version":3,"file":"contextMenu.js","names":["createAddRowsComponent","createContextMenuComponent","ContextMenuItem","DataSheetGrid","VIEW_ALLOWED_MENU_ITEMS","AddRowsComponent","CONTEXT_MENU_ITEM_LABELS","Record","COPY","PASTE","CUT","INSERT_ROW_BELLOW","DELETE_ROW","DUPLICATE_ROW","DELETE_ROWS","DUPLICATE_ROWS","renderContextMenuItem","item","type","BaseViewContextMenuComponent","RecordSetContextMenuComponent","ViewContextMenuComponent","React","FC","ComponentProps","props","$","_c","t0","items","filter","_temp","filteredItems","t1","renderAddRowsComponent","renderViewContextMenu","renderRecordSetContextMenu","includes"],"sources":["../../../../src/components/DataGrid/components/contextMenu.tsx"],"sourcesContent":["import {\n createAddRowsComponent,\n createContextMenuComponent,\n ContextMenuItem,\n DataSheetGrid,\n} from '@sage-bionetworks/react-datasheet-grid'\n\n// Define which context menu items are allowed for tables (a subset)\nconst VIEW_ALLOWED_MENU_ITEMS: ContextMenuItem['type'][] = [\n 'COPY',\n 'PASTE',\n 'CUT',\n]\n\n// Create components outside of render to avoid recreating on every render\nconst AddRowsComponent = createAddRowsComponent()\n\n// Keyed by the full item type union, so adding a new item type upstream is a\n// compile error here rather than a menu entry that silently renders nothing.\nconst CONTEXT_MENU_ITEM_LABELS: Record<ContextMenuItem['type'], string> = {\n COPY: 'Copy',\n PASTE: 'Paste',\n CUT: 'Cut',\n INSERT_ROW_BELLOW: 'Insert row below',\n DELETE_ROW: 'Delete row',\n DUPLICATE_ROW: 'Duplicate row',\n DELETE_ROWS: 'Delete rows',\n DUPLICATE_ROWS: 'Duplicate rows',\n}\n\n// Shared render function for context menu items\nconst renderContextMenuItem = (item: ContextMenuItem) => (\n <>{CONTEXT_MENU_ITEM_LABELS[item.type]}</>\n)\n\n// Create base context menus (copy/cut/paste for recordSet, default for views)\nconst BaseViewContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\nconst RecordSetContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\n// Create a wrapper component that filters items for views\nconst ViewContextMenuComponent: React.FC<\n React.ComponentProps<typeof BaseViewContextMenuComponent>\n> = props => {\n // Filter the items to only include allowed ones for views\n const filteredItems = props.items.filter(item =>\n VIEW_ALLOWED_MENU_ITEMS.includes(item.type),\n )\n\n return <BaseViewContextMenuComponent {...props} items={filteredItems} />\n}\n\n// Create stable render functions outside the component\nexport const renderAddRowsComponent: React.ComponentProps<\n typeof DataSheetGrid\n>['addRowsComponent'] = props => <AddRowsComponent {...props} />\n\nexport const renderViewContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => <ViewContextMenuComponent {...props} />\n\nexport const renderRecordSetContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => (\n <RecordSetContextMenuComponent {...props} />\n)\n"],"mappings":";;;;AAQA,IAAMI,IAAqD;CACzD;CACA;CACA;AAAK,GAIDC,IAAmBL,EAAuB,GAI1CM,IAAoE;CACxEE,MAAM;CACNC,OAAO;CACPC,KAAK;CACLC,mBAAmB;CACnBC,YAAY;CACZC,eAAe;CACfC,aAAa;CACbC,gBAAgB;AAClB,GAGMC,KAAyBC,MAC7B,kBAAA,GAAA,EAAA,UAAGX,EAAyBW,EAAKC,MAAM,CAAA,GAInCC,IAA+BlB,EACnCe,CACF,GAEMI,IAAgCnB,EACpCe,CACF,GAGMK,KAEFI,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,EAAAI,QAIDD,IAAAF,EAAA,MAFqBE,IAAAH,EAAKI,MAAMC,OAAQC,CAEzC,GAACL,EAAA,KAAAD,EAAAI,OAAAH,EAAA,KAAAE;CAFD,IAAAI,IAAsBJ,GAErBK;CAEuE,OAFvEP,EAAA,OAAAM,KAAAN,EAAA,OAAAD,KAEMQ,IAAA,kBAAC,GAAD;EAA6B,GAAKR;EAAcO,OAAAA;CAAa,CAAA,GAAIN,EAAA,KAAAM,GAAAN,EAAA,KAAAD,GAAAC,EAAA,KAAAO,KAAAA,IAAAP,EAAA,IAAjEO;AAAiE,GAI7DC,KAEWT,MAAS,kBAAC,GAAD,EAAkB,GAAIA,EAAM,CAAA,GAEhDU,KAEeV,MAAS,kBAAC,GAAD,EAA0B,GAAIA,EAAM,CAAA,GAE5DW,KAEeX,MAC1B,kBAAC,GAAD,EAA+B,GAAIA,EAAM,CAAA;AArBvC,SAAAM,EAAAd,GAAA;CAAA,OAGAb,EAAuBiC,SAAUpB,EAAIC,IAAK;AAAC"}
1
+ {"version":3,"file":"contextMenu.js","names":["createAddRowsComponent","createContextMenuComponent","ContextMenuItem","DataSheetGrid","VIEW_ALLOWED_MENU_ITEMS","ReadonlySet","Set","AddRowsComponent","CONTEXT_MENU_ITEM_LABELS","Record","COPY","PASTE","CUT","INSERT_ROW_BELLOW","DELETE_ROW","DUPLICATE_ROW","DELETE_ROWS","DUPLICATE_ROWS","renderContextMenuItem","item","type","BaseViewContextMenuComponent","RecordSetContextMenuComponent","ViewContextMenuComponent","React","FC","ComponentProps","props","$","_c","t0","items","filter","_temp","filteredItems","t1","renderAddRowsComponent","renderViewContextMenu","renderRecordSetContextMenu","has"],"sources":["../../../../src/components/DataGrid/components/contextMenu.tsx"],"sourcesContent":["import {\n createAddRowsComponent,\n createContextMenuComponent,\n ContextMenuItem,\n DataSheetGrid,\n} from '@sage-bionetworks/react-datasheet-grid'\n\n// Define which context menu items are allowed for tables (a subset)\nconst VIEW_ALLOWED_MENU_ITEMS: ReadonlySet<ContextMenuItem['type']> = new Set([\n 'COPY',\n 'PASTE',\n 'CUT',\n])\n\n// Create components outside of render to avoid recreating on every render\nconst AddRowsComponent = createAddRowsComponent()\n\n// Keyed by the full item type union, so adding a new item type upstream is a\n// compile error here rather than a menu entry that silently renders nothing.\nconst CONTEXT_MENU_ITEM_LABELS: Record<ContextMenuItem['type'], string> = {\n COPY: 'Copy',\n PASTE: 'Paste',\n CUT: 'Cut',\n INSERT_ROW_BELLOW: 'Insert row below',\n DELETE_ROW: 'Delete row',\n DUPLICATE_ROW: 'Duplicate row',\n DELETE_ROWS: 'Delete rows',\n DUPLICATE_ROWS: 'Duplicate rows',\n}\n\n// Shared render function for context menu items\nconst renderContextMenuItem = (item: ContextMenuItem) => (\n <>{CONTEXT_MENU_ITEM_LABELS[item.type]}</>\n)\n\n// Create base context menus (copy/cut/paste for recordSet, default for views)\nconst BaseViewContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\nconst RecordSetContextMenuComponent = createContextMenuComponent(\n renderContextMenuItem,\n)\n\n// Create a wrapper component that filters items for views\nconst ViewContextMenuComponent: React.FC<\n React.ComponentProps<typeof BaseViewContextMenuComponent>\n> = props => {\n // Filter the items to only include allowed ones for views\n const filteredItems = props.items.filter(item =>\n VIEW_ALLOWED_MENU_ITEMS.has(item.type),\n )\n\n return <BaseViewContextMenuComponent {...props} items={filteredItems} />\n}\n\n// Create stable render functions outside the component\nexport const renderAddRowsComponent: React.ComponentProps<\n typeof DataSheetGrid\n>['addRowsComponent'] = props => <AddRowsComponent {...props} />\n\nexport const renderViewContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => <ViewContextMenuComponent {...props} />\n\nexport const renderRecordSetContextMenu: React.ComponentProps<\n typeof DataSheetGrid\n>['contextMenuComponent'] = props => (\n <RecordSetContextMenuComponent {...props} />\n)\n"],"mappings":";;;;AAQA,IAAMI,IAAgE,IAAIE,IAAI;CAC5E;CACA;CACA;AAAK,CACN,GAGKC,IAAmBP,EAAuB,GAI1CQ,IAAoE;CACxEE,MAAM;CACNC,OAAO;CACPC,KAAK;CACLC,mBAAmB;CACnBC,YAAY;CACZC,eAAe;CACfC,aAAa;CACbC,gBAAgB;AAClB,GAGMC,KAAyBC,MAC7B,kBAAA,GAAA,EAAA,UAAGX,EAAyBW,EAAKC,MAAM,CAAA,GAInCC,IAA+BpB,EACnCiB,CACF,GAEMI,IAAgCrB,EACpCiB,CACF,GAGMK,KAEFI,MAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAAAC;CAAA,AAAAF,EAAA,OAAAD,EAAAI,QAIDD,IAAAF,EAAA,MAFqBE,IAAAH,EAAKI,MAAMC,OAAQC,CAEzC,GAACL,EAAA,KAAAD,EAAAI,OAAAH,EAAA,KAAAE;CAFD,IAAAI,IAAsBJ,GAErBK;CAEuE,OAFvEP,EAAA,OAAAM,KAAAN,EAAA,OAAAD,KAEMQ,IAAA,kBAAC,GAAD;EAA6B,GAAKR;EAAcO,OAAAA;CAAa,CAAA,GAAIN,EAAA,KAAAM,GAAAN,EAAA,KAAAD,GAAAC,EAAA,KAAAO,KAAAA,IAAAP,EAAA,IAAjEO;AAAiE,GAI7DC,KAEWT,MAAS,kBAAC,GAAD,EAAkB,GAAIA,EAAM,CAAA,GAEhDU,KAEeV,MAAS,kBAAC,GAAD,EAA0B,GAAIA,EAAM,CAAA,GAE5DW,KAEeX,MAC1B,kBAAC,GAAD,EAA+B,GAAIA,EAAM,CAAA;AArBvC,SAAAM,EAAAd,GAAA;CAAA,OAGAf,EAAuBmC,IAAKpB,EAAIC,IAAK;AAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGridUndoRedo.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,mBAAmB,CAKrB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI;;;;;;;6BAuLjB,UAAU;;2CAS5B,SAAS,EAAE,aACZ,WAAW,EAAE,YACd,WAAW,EAAE;;;;;;;;;;;;EAmI1B"}
1
+ {"version":3,"file":"useGridUndoRedo.d.ts","sourceRoot":"","sources":["../../../../src/components/DataGrid/hooks/useGridUndoRedo.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,QAAQ,CAAC,EAAE,WAAW,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EAAE,GAC1B,mBAAmB,CAKrB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI;;;;;;;6BAsLjB,UAAU;;2CAS5B,SAAS,EAAE,aACZ,WAAW,EAAE,YACd,WAAW,EAAE;;;;;;;;;;;;EAmI1B"}
@@ -33,8 +33,9 @@ function l(l) {
33
33
  u[5] === Symbol.for("react.memo_cache_sentinel") ? (S = () => se(null), u[5] = S) : S = u[5];
34
34
  let de = S, C;
35
35
  u[6] === f ? C = u[7] : (C = () => {
36
- if (f.isEmpty()) return null;
37
- let e = f.peek(), t, n = 0;
36
+ let e = f.peek();
37
+ if (e === void 0) return null;
38
+ let t, n = 0;
38
39
  if (e.type === "COMPOSITE") {
39
40
  t = "COMPOSITE";
40
41
  for (let e = f.stack.length - 1; e >= 0 && f.stack[e].type === "COMPOSITE"; e--) n++;
@@ -50,8 +51,9 @@ function l(l) {
50
51
  }, u[6] = f, u[7] = C);
51
52
  let fe = C, w;
52
53
  u[8] === m ? w = u[9] : (w = () => {
53
- if (m.isEmpty()) return null;
54
- let e = m.peek(), t, n = 0;
54
+ let e = m.peek();
55
+ if (e === void 0) return null;
56
+ let t, n = 0;
55
57
  if (e.type === "COMPOSITE") t = "COMPOSITE", n = 1;
56
58
  else {
57
59
  t = e.type;
@@ -89,9 +91,9 @@ function l(l) {
89
91
  if (m.isEmpty()) return;
90
92
  let e = m.pop();
91
93
  if (e) if (e.type === "COMPOSITE") {
92
- for (let n = 0; n < e.actions.length; n++) {
93
- let r = e.actions[n], i = t(r, "redo");
94
- i && l(i);
94
+ for (let n of e.actions) {
95
+ let e = t(n, "redo");
96
+ e && l(e);
95
97
  }
96
98
  f.push(e);
97
99
  } else {