synapse-react-client 4.0.5 → 4.0.7

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 (212) hide show
  1. package/dist/SWC.index.d.ts +2 -0
  2. package/dist/SWC.index.d.ts.map +1 -1
  3. package/dist/SWC.index.js +47 -41
  4. package/dist/SWC.index.js.map +1 -1
  5. package/dist/assets/DefaultColorfulPortalCardBackground.svg +50 -12
  6. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js +4 -4
  7. package/dist/assets/DefaultColorfulPortalCardBackground.svg.js.map +1 -1
  8. package/dist/components/CardDeck/TableQueryCardDeck.js +3 -4
  9. package/dist/components/CardDeck/TableQueryCardDeck.js.map +1 -1
  10. package/dist/components/ChangePassword/useChangePasswordFormState.js +2 -3
  11. package/dist/components/ChangePassword/useChangePasswordFormState.js.map +1 -1
  12. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.css +1 -0
  13. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.d.ts +8 -0
  14. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.d.ts.map +1 -0
  15. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js +21 -0
  16. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.js.map +1 -0
  17. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss +32 -0
  18. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss.js +14 -0
  19. package/dist/components/ColoredBulletListItem/ColoredBulletListItem.module.scss.js.map +1 -0
  20. package/dist/components/ColoredBulletListItem/index.d.ts +5 -0
  21. package/dist/components/ColoredBulletListItem/index.d.ts.map +1 -0
  22. package/dist/components/ColoredBulletListItem/index.js +6 -0
  23. package/dist/components/ColoredBulletListItem/index.js.map +1 -0
  24. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js +3 -4
  25. package/dist/components/CreateOrUpdateAccessRequirementWizard/CreateOrUpdateAccessRequirementWizard.js.map +1 -1
  26. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts +2 -1
  27. package/dist/components/CreateProjectModal/CreateProjectModal.d.ts.map +1 -1
  28. package/dist/components/CreateProjectModal/CreateProjectModal.js +122 -43
  29. package/dist/components/CreateProjectModal/CreateProjectModal.js.map +1 -1
  30. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.d.ts +7 -0
  31. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.d.ts.map +1 -0
  32. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js +132 -0
  33. package/dist/components/CreateProjectModal/ProjectVisibilityRadioGroup.js.map +1 -0
  34. package/dist/components/DataGrid/DataGrid.d.ts +2 -0
  35. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  36. package/dist/components/DataGrid/DataGrid.js +69 -67
  37. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  38. package/dist/components/DataGrid/DataGridWebSocket.d.ts +4 -0
  39. package/dist/components/DataGrid/DataGridWebSocket.d.ts.map +1 -1
  40. package/dist/components/DataGrid/DataGridWebSocket.js +47 -37
  41. package/dist/components/DataGrid/DataGridWebSocket.js.map +1 -1
  42. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js +2 -3
  43. package/dist/components/DataGrid/MergeGridWithSourceTableButton.js.map +1 -1
  44. package/dist/components/DataGrid/SynapseGrid.d.ts.map +1 -1
  45. package/dist/components/DataGrid/SynapseGrid.js +209 -162
  46. package/dist/components/DataGrid/SynapseGrid.js.map +1 -1
  47. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js +2 -3
  48. package/dist/components/DataGrid/components/UploadCsvToGridDialog.js.map +1 -1
  49. package/dist/components/DataGrid/hooks/useRemoteSelections.d.ts +16 -0
  50. package/dist/components/DataGrid/hooks/useRemoteSelections.d.ts.map +1 -0
  51. package/dist/components/DataGrid/hooks/useRemoteSelections.js +30 -0
  52. package/dist/components/DataGrid/hooks/useRemoteSelections.js.map +1 -0
  53. package/dist/components/DataGrid/useDataGridWebsocket.d.ts +6 -1
  54. package/dist/components/DataGrid/useDataGridWebsocket.d.ts.map +1 -1
  55. package/dist/components/DataGrid/useDataGridWebsocket.js +78 -69
  56. package/dist/components/DataGrid/useDataGridWebsocket.js.map +1 -1
  57. package/dist/components/DataGrid/utils/getCellClassName.d.ts +3 -0
  58. package/dist/components/DataGrid/utils/getCellClassName.d.ts.map +1 -1
  59. package/dist/components/DataGrid/utils/getCellClassName.js +21 -12
  60. package/dist/components/DataGrid/utils/getCellClassName.js.map +1 -1
  61. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.d.ts +15 -0
  62. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.d.ts.map +1 -0
  63. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js +43 -0
  64. package/dist/components/DataGrid/utils/replicaSelectionToGridSelection.js.map +1 -0
  65. package/dist/components/DialogBase.d.ts +3 -1
  66. package/dist/components/DialogBase.d.ts.map +1 -1
  67. package/dist/components/DialogBase.js +75 -56
  68. package/dist/components/DialogBase.js.map +1 -1
  69. package/dist/components/Ecosystem/EcosystemSkeleton.js +2 -3
  70. package/dist/components/Ecosystem/EcosystemSkeleton.js.map +1 -1
  71. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js +2 -3
  72. package/dist/components/FeaturedDataTabs/FacetPlotsCard.js.map +1 -1
  73. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js +2 -3
  74. package/dist/components/FeaturedDataTabs/FeaturedDataTabs.js.map +1 -1
  75. package/dist/components/GenericCard/GenericCard.js +3 -4
  76. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  77. package/dist/components/HeaderCard.js +2 -3
  78. package/dist/components/HeaderCard.js.map +1 -1
  79. package/dist/components/IconSvg/IconSvg.d.ts +1 -1
  80. package/dist/components/IconSvg/IconSvg.d.ts.map +1 -1
  81. package/dist/components/IconSvg/IconSvg.js +168 -165
  82. package/dist/components/IconSvg/IconSvg.js.map +1 -1
  83. package/dist/components/StorybookComponentWrapper.js +3 -4
  84. package/dist/components/StorybookComponentWrapper.js.map +1 -1
  85. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.d.ts +1 -0
  86. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.d.ts.map +1 -1
  87. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js +23 -16
  88. package/dist/components/SynapseForm/SynapseFormSubmissionGrid.js.map +1 -1
  89. package/dist/components/SynapseTable/SynapseTable.d.ts +6 -1
  90. package/dist/components/SynapseTable/SynapseTable.d.ts.map +1 -1
  91. package/dist/components/SynapseTable/SynapseTable.js +123 -93
  92. package/dist/components/SynapseTable/SynapseTable.js.map +1 -1
  93. package/dist/components/TextField/TextField.css +1 -0
  94. package/dist/components/TextField/TextField.d.ts +2 -1
  95. package/dist/components/TextField/TextField.d.ts.map +1 -1
  96. package/dist/components/TextField/TextField.js +42 -28
  97. package/dist/components/TextField/TextField.js.map +1 -1
  98. package/dist/components/TextField/TextField.module.scss +25 -0
  99. package/dist/components/TextField/TextField.module.scss.js +14 -0
  100. package/dist/components/TextField/TextField.module.scss.js.map +1 -0
  101. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js +2 -3
  102. package/dist/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.js.map +1 -1
  103. package/dist/components/index.d.ts +1 -0
  104. package/dist/components/index.d.ts.map +1 -1
  105. package/dist/components/index.js +242 -240
  106. package/dist/components/index.js.map +1 -1
  107. package/dist/components/styled/HoverPopover.css +1 -1
  108. package/dist/components/styled/HoverPopover.d.ts.map +1 -1
  109. package/dist/components/styled/HoverPopover.js +6 -5
  110. package/dist/components/styled/HoverPopover.js.map +1 -1
  111. package/dist/components/styled/HoverPopover.module.scss +2 -1
  112. package/dist/components/styled/HoverPopover.module.scss.js +1 -1
  113. package/dist/components/styled/StyledFormControl.js +1 -1
  114. package/dist/components/styled/StyledFormControl.js.map +1 -1
  115. package/dist/components/table/CsvPreview/CsvPreview.js +2 -3
  116. package/dist/components/table/CsvPreview/CsvPreview.js.map +1 -1
  117. package/dist/components/table/CsvPreview/CsvPreviewDialog.js +2 -3
  118. package/dist/components/table/CsvPreview/CsvPreviewDialog.js.map +1 -1
  119. package/dist/features/curator/GridPage/GridPage.js +2 -3
  120. package/dist/features/curator/GridPage/GridPage.js.map +1 -1
  121. package/dist/features/curator/GridPage/components/GridPageTitle.js +2 -3
  122. package/dist/features/curator/GridPage/components/GridPageTitle.js.map +1 -1
  123. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts +5 -2
  124. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.d.ts.map +1 -1
  125. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js +46 -33
  126. package/dist/features/entity/metadata-task/components/MetadataTaskTableActionCell.js.map +1 -1
  127. package/dist/features/entity/metadata-task/components/MetadataTasksPage.d.ts.map +1 -1
  128. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js +52 -27
  129. package/dist/features/entity/metadata-task/components/MetadataTasksPage.js.map +1 -1
  130. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts +7 -0
  131. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.d.ts.map +1 -0
  132. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js +322 -0
  133. package/dist/features/entity/metadata-task/components/MetadataTasksTableAssigneeCell.js.map +1 -0
  134. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.d.ts +7 -1
  135. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.d.ts.map +1 -1
  136. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js +7 -7
  137. package/dist/features/entity/metadata-task/hooks/useGetOrCreateGridSessionForSource.js.map +1 -1
  138. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts +9 -5
  139. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.d.ts.map +1 -1
  140. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js +79 -16
  141. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask.js.map +1 -1
  142. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.d.ts +12 -0
  143. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.d.ts.map +1 -0
  144. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js +20 -0
  145. package/dist/features/entity/metadata-task/hooks/useGridSessionForCurationTask_legacy.js.map +1 -0
  146. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts +3 -3
  147. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.d.ts.map +1 -1
  148. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js +54 -41
  149. package/dist/features/entity/metadata-task/hooks/useMetadataTaskTable.js.map +1 -1
  150. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts +2 -2
  151. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.d.ts.map +1 -1
  152. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js +11 -4
  153. package/dist/features/entity/metadata-task/utils/getCreateGridRequestForMetadataTask.js.map +1 -1
  154. package/dist/features/entity/metadata-task/utils/taskHasAssignee.d.ts +3 -0
  155. package/dist/features/entity/metadata-task/utils/taskHasAssignee.d.ts.map +1 -0
  156. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js +7 -0
  157. package/dist/features/entity/metadata-task/utils/taskHasAssignee.js.map +1 -0
  158. package/dist/index.js +306 -304
  159. package/dist/index.js.map +1 -1
  160. package/dist/mocks/curation/mockCurationTask.d.ts +10 -0
  161. package/dist/mocks/curation/mockCurationTask.d.ts.map +1 -0
  162. package/dist/mocks/curation/mockCurationTask.js +24 -0
  163. package/dist/mocks/curation/mockCurationTask.js.map +1 -0
  164. package/dist/style/components/_data-grid-extra.css +1 -1
  165. package/dist/style/components/_data-grid-extra.scss +16 -0
  166. package/dist/synapse-client/SynapseClient.d.ts +1 -1
  167. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  168. package/dist/synapse-client/SynapseClient.js +3 -2
  169. package/dist/synapse-client/SynapseClient.js.map +1 -1
  170. package/dist/synapse-queries/KeyFactory.d.ts +8 -3
  171. package/dist/synapse-queries/KeyFactory.d.ts.map +1 -1
  172. package/dist/synapse-queries/KeyFactory.js +22 -7
  173. package/dist/synapse-queries/KeyFactory.js.map +1 -1
  174. package/dist/synapse-queries/curation/task/useCurationTask.d.ts +6 -3
  175. package/dist/synapse-queries/curation/task/useCurationTask.d.ts.map +1 -1
  176. package/dist/synapse-queries/curation/task/useCurationTask.js +62 -18
  177. package/dist/synapse-queries/curation/task/useCurationTask.js.map +1 -1
  178. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts +2 -0
  179. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.d.ts.map +1 -1
  180. package/dist/synapse-queries/grid/useEstablishWebsocketConnection.js.map +1 -1
  181. package/dist/synapse-queries/grid/useGridSession.d.ts +17 -2
  182. package/dist/synapse-queries/grid/useGridSession.d.ts.map +1 -1
  183. package/dist/synapse-queries/grid/useGridSession.js +63 -30
  184. package/dist/synapse-queries/grid/useGridSession.js.map +1 -1
  185. package/dist/synapse-queries/index.js +103 -99
  186. package/dist/synapse-queries/team/index.js +18 -15
  187. package/dist/synapse-queries/team/useTeamMembers.d.ts +34 -0
  188. package/dist/synapse-queries/team/useTeamMembers.d.ts.map +1 -1
  189. package/dist/synapse-queries/team/useTeamMembers.js +110 -69
  190. package/dist/synapse-queries/team/useTeamMembers.js.map +1 -1
  191. package/dist/synapse-queries/types.d.ts +13 -0
  192. package/dist/synapse-queries/types.d.ts.map +1 -0
  193. package/dist/synapse-queries/types.js +2 -0
  194. package/dist/synapse-queries/types.js.map +1 -0
  195. package/dist/synapse-queries/user/index.js +12 -11
  196. package/dist/synapse-queries/user/useUserGroupHeader.d.ts +5 -0
  197. package/dist/synapse-queries/user/useUserGroupHeader.d.ts.map +1 -1
  198. package/dist/synapse-queries/user/useUserGroupHeader.js +28 -21
  199. package/dist/synapse-queries/user/useUserGroupHeader.js.map +1 -1
  200. package/dist/theme/palette/Palettes.d.ts +2 -0
  201. package/dist/theme/palette/Palettes.d.ts.map +1 -1
  202. package/dist/theme/palette/Palettes.js +46 -40
  203. package/dist/theme/palette/Palettes.js.map +1 -1
  204. package/dist/tsconfig.build.tsbuildinfo +1 -1
  205. package/dist/utils/hooks/useOverlay.d.ts +2 -2
  206. package/dist/utils/hooks/useOverlay.d.ts.map +1 -1
  207. package/dist/utils/hooks/useOverlay.js +41 -41
  208. package/dist/utils/hooks/useOverlay.js.map +1 -1
  209. package/package.json +4 -4
  210. package/dist/assets/ArcusBioIcon.svg +0 -1
  211. package/dist/assets/ArcusBioIcon.svg.js +0 -7
  212. package/dist/assets/ArcusBioIcon.svg.js.map +0 -1
@@ -1,17 +1,17 @@
1
- import { jsx as r, Fragment as Y, jsxs as Z } from "react/jsx-runtime";
1
+ import { jsx as a, Fragment as Z, jsxs as $ } from "react/jsx-runtime";
2
2
  import "../../synapse-client/SynapseClient.js";
3
3
  import "@sage-bionetworks/synapse-client/generated/models/ErrorResponseCode";
4
4
  import "@sage-bionetworks/synapse-client/generated/models/TwoFactorAuthErrorResponse";
5
5
  import "@sage-bionetworks/synapse-client/util/SynapseClientError";
6
- import { ColumnTypeEnum as $ } from "@sage-bionetworks/synapse-types";
6
+ import { ColumnTypeEnum as o } from "@sage-bionetworks/synapse-types";
7
7
  import "../../utils/functions/EntityTypeUtils.js";
8
8
  import "../../utils/SynapseConstants.js";
9
9
  import "lodash-es";
10
10
  import "@sage-bionetworks/synapse-client/util/synapseClientFetch";
11
11
  import "@tanstack/react-query";
12
12
  import "../../utils/PermissionLevelToAccessType.js";
13
- import { useMemo as s, useState as oo } from "react";
14
- import { useSynapseContext as eo } from "../../utils/context/SynapseContext.js";
13
+ import { useMemo as l, useState as ee } from "react";
14
+ import { useSynapseContext as oe } from "../../utils/context/SynapseContext.js";
15
15
  import "use-deep-compare-effect";
16
16
  import "@mui/material";
17
17
  import "../../utils/hooks/useCookiePreferences.js";
@@ -28,124 +28,153 @@ import "lodash-es/xorWith";
28
28
  import "react-router";
29
29
  import "@sage-bionetworks/synapse-client";
30
30
  import "../../utils/types/IsType.js";
31
- import { useGetEntity as to } from "../../synapse-queries/entity/useEntity.js";
32
- import { useReactTable as no, getCoreRowModel as ro, createColumnHelper as so } from "@tanstack/react-table";
33
- import { useAtomValue as io } from "jotai";
34
- import { ModalDownload as lo } from "../ModalDownload/ModalDownload.js";
35
- import { useQueryContext as ao } from "../QueryContext/QueryContext.js";
36
- import { useQueryVisualizationContext as mo } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
37
- import { isRowSelectionVisibleAtom as uo } from "../QueryWrapper/TableRowSelectionState.js";
38
- import co from "../TanStackTable/StyledTanStackTable.js";
39
- import { SynapseTableContext as po } from "./SynapseTableContext.js";
40
- import { rowSelectionColumn as R, addToDownloadListColumn as A, directDownloadColumn as V, accessColumn as E, TableDataCell as Co, TableDataColumnHeader as wo } from "./SynapseTableRenderers.js";
41
- import { isEntityViewOrDatasetOrCollection as fo, isFileViewOrDataset as ho, isSortableColumn as bo } from "./SynapseTableUtils.js";
42
- import { usePrefetchResourcesInTable as yo } from "./usePrefetchTableData.js";
43
- import { useTableSort as So } from "./useTableSort.js";
44
- const To = [], Do = so();
45
- function pe(i) {
46
- const { showDownloadColumn: m, hideDownload: M } = i, {
47
- rowSet: o,
48
- isLoadingNewPage: N,
49
- customColumns: C = To,
50
- showAccessColumn: u,
51
- showExternalAccessIcon: w,
52
- showAccessColumnHeader: f,
53
- showDirectDownloadColumn: O = m,
54
- hideAddToDownloadListColumn: P = M,
55
- columnLinks: h
56
- } = i, {
57
- entityId: q,
58
- versionNumber: B,
59
- getCurrentQueryRequest: b,
60
- fileIdColumnName: l,
61
- fileVersionColumnName: y
62
- } = ao(), d = s(
63
- () => b(),
64
- [b]
65
- ), n = o.headers, { data: a } = to(q, B), { columnsToShowInTable: S, NoContentPlaceholder: L } = mo(), H = s(
31
+ import { useGetEntity as te } from "../../synapse-queries/entity/useEntity.js";
32
+ import { useReactTable as ne, getCoreRowModel as re, createColumnHelper as se } from "@tanstack/react-table";
33
+ import { useAtomValue as ie } from "jotai";
34
+ import { ModalDownload as ae } from "../ModalDownload/ModalDownload.js";
35
+ import { useQueryContext as le } from "../QueryContext/QueryContext.js";
36
+ import { useQueryVisualizationContext as me } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
37
+ import { isRowSelectionVisibleAtom as ue } from "../QueryWrapper/TableRowSelectionState.js";
38
+ import ce from "../TanStackTable/StyledTanStackTable.js";
39
+ import { SynapseTableContext as de } from "./SynapseTableContext.js";
40
+ import { rowSelectionColumn as x, addToDownloadListColumn as L, directDownloadColumn as N, accessColumn as V, TableDataCell as pe, TableDataColumnHeader as Ce } from "./SynapseTableRenderers.js";
41
+ import { isEntityViewOrDatasetOrCollection as fe, isFileViewOrDataset as we, isSortableColumn as Se } from "./SynapseTableUtils.js";
42
+ import { usePrefetchResourcesInTable as Te } from "./usePrefetchTableData.js";
43
+ import { useTableSort as Ie } from "./useTableSort.js";
44
+ const De = [];
45
+ function he(r, s) {
46
+ const m = r.toLowerCase();
47
+ if (m.includes("name") || m.includes("description"))
48
+ return 250;
49
+ switch (s) {
50
+ case o.ENTITYID:
51
+ case o.ENTITYID_LIST:
52
+ case o.USERID:
53
+ case o.USERID_LIST:
54
+ case o.FILEHANDLEID:
55
+ case o.EVALUATIONID:
56
+ case o.SUBMISSIONID:
57
+ return 180;
58
+ case o.DATE:
59
+ case o.DATE_LIST:
60
+ return 120;
61
+ case o.STRING:
62
+ case o.STRING_LIST:
63
+ return 100;
64
+ default:
65
+ return 60;
66
+ }
67
+ }
68
+ const ye = se();
69
+ function Co(r) {
70
+ const { showDownloadColumn: s, hideDownload: m } = r, {
71
+ rowSet: t,
72
+ isLoadingNewPage: O,
73
+ customColumns: w = De,
74
+ showAccessColumn: d,
75
+ showExternalAccessIcon: S,
76
+ showAccessColumnHeader: T,
77
+ showDirectDownloadColumn: v = s,
78
+ hideAddToDownloadListColumn: B = m,
79
+ columnLinks: I
80
+ } = r, {
81
+ entityId: P,
82
+ versionNumber: q,
83
+ getCurrentQueryRequest: D,
84
+ fileIdColumnName: u,
85
+ fileVersionColumnName: h
86
+ } = le(), p = l(
87
+ () => D(),
88
+ [D]
89
+ ), i = t.headers, { data: c } = te(P, q), { columnsToShowInTable: y, NoContentPlaceholder: z } = me(), H = l(
66
90
  () => ({
67
- columnLinks: h,
68
- showExternalAccessIcon: w
91
+ columnLinks: I,
92
+ showExternalAccessIcon: S
69
93
  }),
70
- [h, w]
71
- ), { isAuthenticated: z } = eo(), [F, Q] = oo(!1), { sort: U, setSort: j } = So(), c = io(uo), T = !!(u && a && (fo(a) && v(o) || l)), D = a && z && (ho(a) && v(o) || l), g = !!(D && O), x = !!(D && !P && !c), k = l ? o.headers.findIndex((e) => e.name == l) : void 0, W = y ? o.headers.findIndex((e) => e.name == y) : void 0, _ = s(
94
+ [I, S]
95
+ ), { isAuthenticated: U } = oe(), [_, F] = ee(!1), { sort: G, setSort: Q } = Ie(), C = ie(ue), b = !!(d && c && (fe(c) && M(t) || u)), g = c && U && (we(c) && M(t) || u), E = !!(g && v), R = !!(g && !B && !C), j = u ? t.headers.findIndex((e) => e.name == u) : void 0, k = h ? t.headers.findIndex((e) => e.name == h) : void 0, W = l(
72
96
  () => [
73
- ...C,
74
- R,
75
- A,
76
- V,
97
+ ...w,
98
+ x,
99
+ L,
100
+ N,
77
101
  {
78
- ...E,
79
- header: u && f ? "Access" : ""
102
+ ...V,
103
+ header: d && T ? "Access" : ""
80
104
  },
81
- ...n.map((e, t) => Do.accessor((p) => p.values[t], {
105
+ ...i.map((e, n) => ye.accessor((f) => f.values[n], {
82
106
  id: e.name,
83
- enableSorting: bo(e.columnType),
107
+ enableSorting: Se(e.columnType),
84
108
  enableResizing: !0,
85
- header: wo,
86
- cell: Co
109
+ minSize: he(
110
+ e.name,
111
+ e.columnType
112
+ ),
113
+ header: Ce,
114
+ cell: pe
87
115
  })) ?? []
88
116
  ],
89
- [C, n, u, f]
90
- ), I = s(
117
+ [w, i, d, T]
118
+ ), A = l(
91
119
  () => ({
92
- [R.id]: c,
93
- [A.id]: x,
94
- [V.id]: g,
95
- [E.id]: T
120
+ [x.id]: C,
121
+ [L.id]: R,
122
+ [N.id]: E,
123
+ [V.id]: b
96
124
  }),
97
125
  [
98
- c,
99
- T,
100
- x,
101
- g
126
+ C,
127
+ b,
128
+ R,
129
+ E
102
130
  ]
103
- ), G = s(
104
- () => n.reduce((e, t) => ({
131
+ ), Y = l(
132
+ () => i.reduce((e, n) => ({
105
133
  ...e,
106
- [t.name]: S.includes(t.name)
107
- }), I),
108
- [S, n, I]
109
- ), { dataHasBeenPrefetched: J } = yo(o), K = N || !J, X = no({
110
- data: o.rows,
111
- columns: _,
112
- getCoreRowModel: ro(),
134
+ [n.name]: y.includes(n.name)
135
+ }), A),
136
+ [y, i, A]
137
+ ), { dataHasBeenPrefetched: J } = Te(t), K = O || !J, X = ne({
138
+ data: t.rows,
139
+ columns: W,
140
+ defaultColumn: { minSize: 60 },
141
+ getCoreRowModel: re(),
113
142
  manualSorting: !0,
114
143
  manualFiltering: !0,
115
- onSortingChange: j,
144
+ onSortingChange: Q,
116
145
  enableMultiSort: !0,
117
146
  columnResizeMode: "onChange",
118
147
  state: {
119
- sorting: U,
120
- columnVisibility: G
148
+ sorting: G,
149
+ columnVisibility: Y
121
150
  },
122
151
  meta: {
123
- rowSet: o,
152
+ rowSet: t,
124
153
  // make the rowEntityIDColumnIndex available to all cell renderers
125
- rowEntityIDColumnIndex: k,
126
- rowEntityVersionColumnIndex: W,
154
+ rowEntityIDColumnIndex: j,
155
+ rowEntityVersionColumnIndex: k,
127
156
  renderPlaceholderData: K,
128
157
  getWrapInExpandableTd: (e) => {
129
- const t = n.find(
130
- (p) => p.name === e.column.id
158
+ const n = i.find(
159
+ (f) => f.name === e.column.id
131
160
  );
132
- return !!(t && /* JSON handles its own overflow*/
133
- t.columnType !== $.JSON);
161
+ return !!(n && /* JSON handles its own overflow*/
162
+ n.columnType !== o.JSON);
134
163
  }
135
164
  }
136
165
  });
137
- return o ? !((o.rows?.length ?? 0) > 0) && (d.query.offset === 0 || d.query.offset == null) ? /* @__PURE__ */ r(L, {}) : /* @__PURE__ */ r(po.Provider, { value: H, children: /* @__PURE__ */ Z("div", { children: [
138
- F && /* @__PURE__ */ r(
139
- lo,
166
+ return t ? !((t.rows?.length ?? 0) > 0) && (p.query.offset === 0 || p.query.offset == null) ? /* @__PURE__ */ a(z, {}) : /* @__PURE__ */ a(de.Provider, { value: H, children: /* @__PURE__ */ $("div", { children: [
167
+ _ && /* @__PURE__ */ a(
168
+ ae,
140
169
  {
141
170
  onClose: () => {
142
- Q(!1);
171
+ F(!1);
143
172
  },
144
- queryBundleRequest: d
173
+ queryBundleRequest: p
145
174
  }
146
175
  ),
147
- /* @__PURE__ */ r(
148
- co,
176
+ /* @__PURE__ */ a(
177
+ ce,
149
178
  {
150
179
  styledTableContainerProps: {
151
180
  className: "SynapseTable",
@@ -157,12 +186,13 @@ function pe(i) {
157
186
  autoColumnSizing: !0
158
187
  }
159
188
  )
160
- ] }) }) : /* @__PURE__ */ r(Y, {});
189
+ ] }) }) : /* @__PURE__ */ a(Z, {});
161
190
  }
162
- function v(i) {
163
- return !!i.rows?.every((m) => !!m.rowId);
191
+ function M(r) {
192
+ return !!r.rows?.every((s) => !!s.rowId);
164
193
  }
165
194
  export {
166
- pe as SynapseTable
195
+ Co as SynapseTable,
196
+ he as getColumnMinSize
167
197
  };
168
198
  //# sourceMappingURL=SynapseTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapseTable.js","sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport {\n ColumnTypeEnum,\n Row,\n RowSet,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport {\n Cell,\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { LabelLinkConfig } from '../CardContainerLogic'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { SynapseTableContext } from './SynapseTableContext'\nimport {\n accessColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n rowSelectionColumn,\n TableDataCell,\n TableDataColumnHeader,\n} from './SynapseTableRenderers'\nimport {\n isEntityViewOrDatasetOrCollection,\n isFileViewOrDataset,\n isSortableColumn,\n} from './SynapseTableUtils'\nimport { usePrefetchResourcesInTable } from './usePrefetchTableData'\nimport { useTableSort } from './useTableSort'\n\nconst DEFAULT_CUSTOM_COLUMNS: ColumnDef<Row, any>[] = []\n\nexport type SynapseTableConfiguration = Pick<\n SynapseTableProps,\n | 'showAccessColumn'\n | 'showExternalAccessIcon'\n | 'showAccessColumnHeader'\n | 'showDownloadColumn'\n | 'hideDownload'\n | 'showDirectDownloadColumn'\n | 'hideAddToDownloadListColumn'\n | 'columnLinks'\n | 'customColumns'\n>\n\nexport type SynapseTableProps = {\n /** The row data shown in the table. */\n rowSet: RowSet\n /** Whether a new page of data is being loaded */\n isLoadingNewPage: boolean\n /** Custom columns to render in the table */\n customColumns?: ColumnDef<Row, any>[]\n /** If true and entity is a view or dataset, renders a column that represents if the caller has permission to download the entity represented by the row */\n showAccessColumn?: boolean\n /**\n * If true, the component will show enhanced UI for the case where\n * - the entity is a FileEntity, AND\n * - the caller has permission to fetch the dataFileHandle, AND\n * - the dataFileHandle is an instance of ExternalFileHandleInterface (i.e. the file is not controlled by Synapse)\n * Note that this requires an additional API call that cannot be batched, so it should be avoided in bulk contexts if possible.\n * @default false\n */\n showExternalAccessIcon?: boolean\n showAccessColumnHeader?: boolean\n /** @deprecated use showDirectDownloadColumn */\n showDownloadColumn?: boolean\n /** @deprecated use hideAddToDownloadListColumn */\n hideDownload?: boolean\n /** If true and entity is a file view or dataset, renders a column that allows the logged-in user to directly download the file, if they have permission */\n showDirectDownloadColumn?: boolean\n /** If true, the add to download list column will be hidden */\n hideAddToDownloadListColumn?: boolean\n /** Configuration to override cell renderers with e.g. a link to a portals detail page */\n columnLinks?: LabelLinkConfig\n}\n\nconst columnHelper = createColumnHelper<Row>()\n\nexport function SynapseTable(props: SynapseTableProps) {\n const { showDownloadColumn, hideDownload } = props\n const {\n rowSet,\n isLoadingNewPage,\n customColumns = DEFAULT_CUSTOM_COLUMNS,\n showAccessColumn,\n showExternalAccessIcon,\n showAccessColumnHeader,\n showDirectDownloadColumn = showDownloadColumn,\n hideAddToDownloadListColumn = hideDownload,\n columnLinks,\n } = props\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n fileIdColumnName,\n fileVersionColumnName,\n } = useQueryContext()\n const queryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n const selectColumns = rowSet.headers\n\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n\n const { columnsToShowInTable, NoContentPlaceholder } =\n useQueryVisualizationContext()\n const synapseTableContext = useMemo(\n () => ({\n columnLinks,\n showExternalAccessIcon,\n }),\n [columnLinks, showExternalAccessIcon],\n )\n const { isAuthenticated } = useSynapseContext()\n\n const [isExportTableDownloadOpen, setIsExportTableDownloadOpen] =\n useState(false)\n\n const { sort, setSort } = useTableSort()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const isShowingAccessColumn: boolean = Boolean(\n showAccessColumn &&\n entity &&\n ((isEntityViewOrDatasetOrCollection(entity) && allRowsHaveId(rowSet)) ||\n fileIdColumnName),\n )\n const rowsAreDownloadable =\n entity &&\n isAuthenticated &&\n ((isFileViewOrDataset(entity) && allRowsHaveId(rowSet)) || fileIdColumnName)\n\n const isShowingDirectDownloadColumn = Boolean(\n rowsAreDownloadable && showDirectDownloadColumn,\n )\n\n const isShowingAddToV2DownloadListColumn: boolean = Boolean(\n rowsAreDownloadable &&\n !hideAddToDownloadListColumn &&\n !isRowSelectionVisible,\n )\n const rowEntityIDColumnIndex = fileIdColumnName\n ? rowSet.headers.findIndex(col => col.name == fileIdColumnName)\n : undefined\n const rowEntityVersionColumnIndex = fileVersionColumnName\n ? rowSet.headers.findIndex(col => col.name == fileVersionColumnName)\n : undefined\n\n const columns = useMemo(\n () => [\n ...customColumns,\n rowSelectionColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n {\n ...accessColumn,\n header: showAccessColumn && showAccessColumnHeader ? 'Access' : '',\n },\n ...(selectColumns.map((selectColumn, index) => {\n return columnHelper.accessor(row => row.values[index], {\n id: selectColumn.name,\n enableSorting: isSortableColumn(selectColumn.columnType),\n enableResizing: true,\n header: TableDataColumnHeader,\n cell: TableDataCell,\n })\n }) ?? []),\n ],\n [customColumns, selectColumns, showAccessColumn, showAccessColumnHeader],\n )\n\n const prependColumnVisibility: VisibilityState = useMemo(\n () => ({\n [rowSelectionColumn.id as string]: isRowSelectionVisible,\n [addToDownloadListColumn.id as string]:\n isShowingAddToV2DownloadListColumn,\n [directDownloadColumn.id as string]: isShowingDirectDownloadColumn,\n [accessColumn.id as string]: isShowingAccessColumn,\n }),\n [\n isRowSelectionVisible,\n isShowingAccessColumn,\n isShowingAddToV2DownloadListColumn,\n isShowingDirectDownloadColumn,\n ],\n )\n\n // Transform our `columnsToShowInTable` to @tanstack/react-table's `VisibilityState`\n const columnVisibility: VisibilityState = useMemo(\n () =>\n selectColumns.reduce((prev: VisibilityState, curr) => {\n return {\n ...prev,\n [curr.name]: columnsToShowInTable.includes(curr.name),\n }\n }, prependColumnVisibility),\n [columnsToShowInTable, selectColumns, prependColumnVisibility],\n )\n\n const { dataHasBeenPrefetched } = usePrefetchResourcesInTable(rowSet)\n const renderTableDataPlaceholder = isLoadingNewPage || !dataHasBeenPrefetched\n\n const table = useReactTable({\n data: rowSet.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n manualSorting: true,\n manualFiltering: true,\n onSortingChange: setSort,\n enableMultiSort: true,\n columnResizeMode: 'onChange',\n state: {\n sorting: sort,\n columnVisibility: columnVisibility,\n },\n meta: {\n rowSet,\n // make the rowEntityIDColumnIndex available to all cell renderers\n rowEntityIDColumnIndex,\n rowEntityVersionColumnIndex,\n renderPlaceholderData: renderTableDataPlaceholder,\n getWrapInExpandableTd: (cell: Cell<Row, unknown>) => {\n const selectColumn = selectColumns.find(\n cm => cm.name === cell.column.id,\n )\n return Boolean(\n selectColumn &&\n /* JSON handles its own overflow*/\n selectColumn.columnType !== ColumnTypeEnum.JSON,\n )\n },\n },\n })\n\n /**\n * Display the view\n */\n if (!rowSet) {\n return <></>\n }\n const hasResults = (rowSet.rows?.length ?? 0) > 0\n // Show the No Results UI if the current page has no rows, and this is the first page of data (offset === 0 or null/undefined).\n if (\n !hasResults &&\n (queryRequest.query.offset === 0 || queryRequest.query.offset == null)\n ) {\n return <NoContentPlaceholder />\n }\n\n return (\n <SynapseTableContext.Provider value={synapseTableContext}>\n <div>\n {isExportTableDownloadOpen && (\n <ModalDownload\n onClose={() => {\n setIsExportTableDownloadOpen(false)\n }}\n queryBundleRequest={queryRequest}\n />\n )}\n <StyledTanStackTable\n styledTableContainerProps={{\n className: 'SynapseTable',\n ['data-testid']: 'SynapseTable',\n density: 'default',\n }}\n table={table}\n fullWidth={false}\n autoColumnSizing={true}\n />\n </div>\n </SynapseTableContext.Provider>\n )\n}\n\n/**\n * If this is a view/dataset and rows have an ID, then rows represent individual objects in Synapse.\n * Presence of row IDs also indicates that the query is also necessarily not summary data, e.g. the query does\n * not include an operation like GROUP BY, DISTINCT, etc., that would cause rows to not map 1:1 to Synapse Entities\n */\nfunction allRowsHaveId(rowSet: RowSet): boolean {\n return Boolean(rowSet.rows?.every(row => !!row.rowId))\n}\n"],"names":["DEFAULT_CUSTOM_COLUMNS","columnHelper","createColumnHelper","SynapseTable","props","showDownloadColumn","hideDownload","rowSet","isLoadingNewPage","customColumns","showAccessColumn","showExternalAccessIcon","showAccessColumnHeader","showDirectDownloadColumn","hideAddToDownloadListColumn","columnLinks","entityId","versionNumber","getCurrentQueryRequest","fileIdColumnName","fileVersionColumnName","useQueryContext","queryRequest","useMemo","selectColumns","entity","useGetEntity","columnsToShowInTable","NoContentPlaceholder","useQueryVisualizationContext","synapseTableContext","isAuthenticated","useSynapseContext","isExportTableDownloadOpen","setIsExportTableDownloadOpen","useState","sort","setSort","useTableSort","isRowSelectionVisible","useAtomValue","isRowSelectionVisibleAtom","isShowingAccessColumn","isEntityViewOrDatasetOrCollection","allRowsHaveId","rowsAreDownloadable","isFileViewOrDataset","isShowingDirectDownloadColumn","isShowingAddToV2DownloadListColumn","rowEntityIDColumnIndex","col","rowEntityVersionColumnIndex","columns","rowSelectionColumn","addToDownloadListColumn","directDownloadColumn","accessColumn","selectColumn","index","row","isSortableColumn","TableDataColumnHeader","TableDataCell","prependColumnVisibility","columnVisibility","prev","curr","dataHasBeenPrefetched","usePrefetchResourcesInTable","renderTableDataPlaceholder","table","useReactTable","getCoreRowModel","cell","cm","ColumnTypeEnum","SynapseTableContext","jsx","ModalDownload","StyledTanStackTable","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"SynapseTable.js","sources":["../../../src/components/SynapseTable/SynapseTable.tsx"],"sourcesContent":["import { useGetEntity } from '@/synapse-queries'\nimport { useSynapseContext } from '@/utils'\nimport {\n ColumnTypeEnum,\n Row,\n RowSet,\n Table,\n} from '@sage-bionetworks/synapse-types'\nimport {\n Cell,\n ColumnDef,\n createColumnHelper,\n getCoreRowModel,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table'\nimport { useAtomValue } from 'jotai'\nimport { useMemo, useState } from 'react'\nimport { LabelLinkConfig } from '../CardContainerLogic'\nimport ModalDownload from '../ModalDownload/ModalDownload'\nimport { useQueryContext } from '../QueryContext'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport { isRowSelectionVisibleAtom } from '../QueryWrapper/TableRowSelectionState'\nimport StyledTanStackTable from '../TanStackTable/StyledTanStackTable'\nimport { SynapseTableContext } from './SynapseTableContext'\nimport {\n accessColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n rowSelectionColumn,\n TableDataCell,\n TableDataColumnHeader,\n} from './SynapseTableRenderers'\nimport {\n isEntityViewOrDatasetOrCollection,\n isFileViewOrDataset,\n isSortableColumn,\n} from './SynapseTableUtils'\nimport { usePrefetchResourcesInTable } from './usePrefetchTableData'\nimport { useTableSort } from './useTableSort'\n\nconst DEFAULT_CUSTOM_COLUMNS: ColumnDef<Row, any>[] = []\n\n/**\n * Returns the minimum column width (in px) for a Synapse table column\n * based on its type and name.\n */\nexport function getColumnMinSize(\n columnName: string,\n columnType: ColumnTypeEnum,\n): number {\n const nameLower = columnName.toLowerCase()\n if (nameLower.includes('name') || nameLower.includes('description')) {\n return 250\n }\n switch (columnType) {\n case ColumnTypeEnum.ENTITYID:\n case ColumnTypeEnum.ENTITYID_LIST:\n case ColumnTypeEnum.USERID:\n case ColumnTypeEnum.USERID_LIST:\n case ColumnTypeEnum.FILEHANDLEID:\n case ColumnTypeEnum.EVALUATIONID:\n case ColumnTypeEnum.SUBMISSIONID:\n return 180\n case ColumnTypeEnum.DATE:\n case ColumnTypeEnum.DATE_LIST:\n return 120\n case ColumnTypeEnum.STRING:\n case ColumnTypeEnum.STRING_LIST:\n return 100\n default:\n return 60\n }\n}\n\nexport type SynapseTableConfiguration = Pick<\n SynapseTableProps,\n | 'showAccessColumn'\n | 'showExternalAccessIcon'\n | 'showAccessColumnHeader'\n | 'showDownloadColumn'\n | 'hideDownload'\n | 'showDirectDownloadColumn'\n | 'hideAddToDownloadListColumn'\n | 'columnLinks'\n | 'customColumns'\n>\n\nexport type SynapseTableProps = {\n /** The row data shown in the table. */\n rowSet: RowSet\n /** Whether a new page of data is being loaded */\n isLoadingNewPage: boolean\n /** Custom columns to render in the table */\n customColumns?: ColumnDef<Row, any>[]\n /** If true and entity is a view or dataset, renders a column that represents if the caller has permission to download the entity represented by the row */\n showAccessColumn?: boolean\n /**\n * If true, the component will show enhanced UI for the case where\n * - the entity is a FileEntity, AND\n * - the caller has permission to fetch the dataFileHandle, AND\n * - the dataFileHandle is an instance of ExternalFileHandleInterface (i.e. the file is not controlled by Synapse)\n * Note that this requires an additional API call that cannot be batched, so it should be avoided in bulk contexts if possible.\n * @default false\n */\n showExternalAccessIcon?: boolean\n showAccessColumnHeader?: boolean\n /** @deprecated use showDirectDownloadColumn */\n showDownloadColumn?: boolean\n /** @deprecated use hideAddToDownloadListColumn */\n hideDownload?: boolean\n /** If true and entity is a file view or dataset, renders a column that allows the logged-in user to directly download the file, if they have permission */\n showDirectDownloadColumn?: boolean\n /** If true, the add to download list column will be hidden */\n hideAddToDownloadListColumn?: boolean\n /** Configuration to override cell renderers with e.g. a link to a portals detail page */\n columnLinks?: LabelLinkConfig\n}\n\nconst columnHelper = createColumnHelper<Row>()\n\nexport function SynapseTable(props: SynapseTableProps) {\n const { showDownloadColumn, hideDownload } = props\n const {\n rowSet,\n isLoadingNewPage,\n customColumns = DEFAULT_CUSTOM_COLUMNS,\n showAccessColumn,\n showExternalAccessIcon,\n showAccessColumnHeader,\n showDirectDownloadColumn = showDownloadColumn,\n hideAddToDownloadListColumn = hideDownload,\n columnLinks,\n } = props\n const {\n entityId,\n versionNumber,\n getCurrentQueryRequest,\n fileIdColumnName,\n fileVersionColumnName,\n } = useQueryContext()\n const queryRequest = useMemo(\n () => getCurrentQueryRequest(),\n [getCurrentQueryRequest],\n )\n\n const selectColumns = rowSet.headers\n\n const { data: entity } = useGetEntity<Table>(entityId, versionNumber)\n\n const { columnsToShowInTable, NoContentPlaceholder } =\n useQueryVisualizationContext()\n const synapseTableContext = useMemo(\n () => ({\n columnLinks,\n showExternalAccessIcon,\n }),\n [columnLinks, showExternalAccessIcon],\n )\n const { isAuthenticated } = useSynapseContext()\n\n const [isExportTableDownloadOpen, setIsExportTableDownloadOpen] =\n useState(false)\n\n const { sort, setSort } = useTableSort()\n const isRowSelectionVisible = useAtomValue(isRowSelectionVisibleAtom)\n\n const isShowingAccessColumn: boolean = Boolean(\n showAccessColumn &&\n entity &&\n ((isEntityViewOrDatasetOrCollection(entity) && allRowsHaveId(rowSet)) ||\n fileIdColumnName),\n )\n const rowsAreDownloadable =\n entity &&\n isAuthenticated &&\n ((isFileViewOrDataset(entity) && allRowsHaveId(rowSet)) || fileIdColumnName)\n\n const isShowingDirectDownloadColumn = Boolean(\n rowsAreDownloadable && showDirectDownloadColumn,\n )\n\n const isShowingAddToV2DownloadListColumn: boolean = Boolean(\n rowsAreDownloadable &&\n !hideAddToDownloadListColumn &&\n !isRowSelectionVisible,\n )\n const rowEntityIDColumnIndex = fileIdColumnName\n ? rowSet.headers.findIndex(col => col.name == fileIdColumnName)\n : undefined\n const rowEntityVersionColumnIndex = fileVersionColumnName\n ? rowSet.headers.findIndex(col => col.name == fileVersionColumnName)\n : undefined\n\n const columns = useMemo(\n () => [\n ...customColumns,\n rowSelectionColumn,\n addToDownloadListColumn,\n directDownloadColumn,\n {\n ...accessColumn,\n header: showAccessColumn && showAccessColumnHeader ? 'Access' : '',\n },\n ...(selectColumns.map((selectColumn, index) => {\n return columnHelper.accessor(row => row.values[index], {\n id: selectColumn.name,\n enableSorting: isSortableColumn(selectColumn.columnType),\n enableResizing: true,\n minSize: getColumnMinSize(\n selectColumn.name,\n selectColumn.columnType as ColumnTypeEnum,\n ),\n header: TableDataColumnHeader,\n cell: TableDataCell,\n })\n }) ?? []),\n ],\n [customColumns, selectColumns, showAccessColumn, showAccessColumnHeader],\n )\n\n const prependColumnVisibility: VisibilityState = useMemo(\n () => ({\n [rowSelectionColumn.id as string]: isRowSelectionVisible,\n [addToDownloadListColumn.id as string]:\n isShowingAddToV2DownloadListColumn,\n [directDownloadColumn.id as string]: isShowingDirectDownloadColumn,\n [accessColumn.id as string]: isShowingAccessColumn,\n }),\n [\n isRowSelectionVisible,\n isShowingAccessColumn,\n isShowingAddToV2DownloadListColumn,\n isShowingDirectDownloadColumn,\n ],\n )\n\n // Transform our `columnsToShowInTable` to @tanstack/react-table's `VisibilityState`\n const columnVisibility: VisibilityState = useMemo(\n () =>\n selectColumns.reduce((prev: VisibilityState, curr) => {\n return {\n ...prev,\n [curr.name]: columnsToShowInTable.includes(curr.name),\n }\n }, prependColumnVisibility),\n [columnsToShowInTable, selectColumns, prependColumnVisibility],\n )\n\n const { dataHasBeenPrefetched } = usePrefetchResourcesInTable(rowSet)\n const renderTableDataPlaceholder = isLoadingNewPage || !dataHasBeenPrefetched\n\n const table = useReactTable({\n data: rowSet.rows,\n columns,\n defaultColumn: { minSize: 60 },\n getCoreRowModel: getCoreRowModel(),\n manualSorting: true,\n manualFiltering: true,\n onSortingChange: setSort,\n enableMultiSort: true,\n columnResizeMode: 'onChange',\n state: {\n sorting: sort,\n columnVisibility: columnVisibility,\n },\n meta: {\n rowSet,\n // make the rowEntityIDColumnIndex available to all cell renderers\n rowEntityIDColumnIndex,\n rowEntityVersionColumnIndex,\n renderPlaceholderData: renderTableDataPlaceholder,\n getWrapInExpandableTd: (cell: Cell<Row, unknown>) => {\n const selectColumn = selectColumns.find(\n cm => cm.name === cell.column.id,\n )\n return Boolean(\n selectColumn &&\n /* JSON handles its own overflow*/\n selectColumn.columnType !== ColumnTypeEnum.JSON,\n )\n },\n },\n })\n\n /**\n * Display the view\n */\n if (!rowSet) {\n return <></>\n }\n const hasResults = (rowSet.rows?.length ?? 0) > 0\n // Show the No Results UI if the current page has no rows, and this is the first page of data (offset === 0 or null/undefined).\n if (\n !hasResults &&\n (queryRequest.query.offset === 0 || queryRequest.query.offset == null)\n ) {\n return <NoContentPlaceholder />\n }\n\n return (\n <SynapseTableContext.Provider value={synapseTableContext}>\n <div>\n {isExportTableDownloadOpen && (\n <ModalDownload\n onClose={() => {\n setIsExportTableDownloadOpen(false)\n }}\n queryBundleRequest={queryRequest}\n />\n )}\n <StyledTanStackTable\n styledTableContainerProps={{\n className: 'SynapseTable',\n ['data-testid']: 'SynapseTable',\n density: 'default',\n }}\n table={table}\n fullWidth={false}\n autoColumnSizing={true}\n />\n </div>\n </SynapseTableContext.Provider>\n )\n}\n\n/**\n * If this is a view/dataset and rows have an ID, then rows represent individual objects in Synapse.\n * Presence of row IDs also indicates that the query is also necessarily not summary data, e.g. the query does\n * not include an operation like GROUP BY, DISTINCT, etc., that would cause rows to not map 1:1 to Synapse Entities\n */\nfunction allRowsHaveId(rowSet: RowSet): boolean {\n return Boolean(rowSet.rows?.every(row => !!row.rowId))\n}\n"],"names":["DEFAULT_CUSTOM_COLUMNS","getColumnMinSize","columnName","columnType","nameLower","ColumnTypeEnum","columnHelper","createColumnHelper","SynapseTable","props","showDownloadColumn","hideDownload","rowSet","isLoadingNewPage","customColumns","showAccessColumn","showExternalAccessIcon","showAccessColumnHeader","showDirectDownloadColumn","hideAddToDownloadListColumn","columnLinks","entityId","versionNumber","getCurrentQueryRequest","fileIdColumnName","fileVersionColumnName","useQueryContext","queryRequest","useMemo","selectColumns","entity","useGetEntity","columnsToShowInTable","NoContentPlaceholder","useQueryVisualizationContext","synapseTableContext","isAuthenticated","useSynapseContext","isExportTableDownloadOpen","setIsExportTableDownloadOpen","useState","sort","setSort","useTableSort","isRowSelectionVisible","useAtomValue","isRowSelectionVisibleAtom","isShowingAccessColumn","isEntityViewOrDatasetOrCollection","allRowsHaveId","rowsAreDownloadable","isFileViewOrDataset","isShowingDirectDownloadColumn","isShowingAddToV2DownloadListColumn","rowEntityIDColumnIndex","col","rowEntityVersionColumnIndex","columns","rowSelectionColumn","addToDownloadListColumn","directDownloadColumn","accessColumn","selectColumn","index","row","isSortableColumn","TableDataColumnHeader","TableDataCell","prependColumnVisibility","columnVisibility","prev","curr","dataHasBeenPrefetched","usePrefetchResourcesInTable","renderTableDataPlaceholder","table","useReactTable","getCoreRowModel","cell","cm","SynapseTableContext","jsx","ModalDownload","StyledTanStackTable","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAMA,KAAgD,CAAA;AAM/C,SAASC,GACdC,GACAC,GACQ;AACR,QAAMC,IAAYF,EAAW,YAAA;AAC7B,MAAIE,EAAU,SAAS,MAAM,KAAKA,EAAU,SAAS,aAAa;AAChE,WAAO;AAET,UAAQD,GAAA;AAAA,IACN,KAAKE,EAAe;AAAA,IACpB,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAClB,aAAO;AAAA,IACT,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAClB,aAAO;AAAA,IACT,KAAKA,EAAe;AAAA,IACpB,KAAKA,EAAe;AAClB,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EAAA;AAEb;AA8CA,MAAMC,KAAeC,GAAA;AAEd,SAASC,GAAaC,GAA0B;AACrD,QAAM,EAAE,oBAAAC,GAAoB,cAAAC,EAAA,IAAiBF,GACvC;AAAA,IACJ,QAAAG;AAAA,IACA,kBAAAC;AAAA,IACA,eAAAC,IAAgBd;AAAA,IAChB,kBAAAe;AAAA,IACA,wBAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,0BAAAC,IAA2BR;AAAA,IAC3B,6BAAAS,IAA8BR;AAAA,IAC9B,aAAAS;AAAA,EAAA,IACEX,GACE;AAAA,IACJ,UAAAY;AAAA,IACA,eAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,uBAAAC;AAAA,EAAA,IACEC,GAAA,GACEC,IAAeC;AAAA,IACnB,MAAML,EAAA;AAAA,IACN,CAACA,CAAsB;AAAA,EAAA,GAGnBM,IAAgBjB,EAAO,SAEvB,EAAE,MAAMkB,EAAA,IAAWC,GAAoBV,GAAUC,CAAa,GAE9D,EAAE,sBAAAU,GAAsB,sBAAAC,EAAA,IAC5BC,GAAA,GACIC,IAAsBP;AAAA,IAC1B,OAAO;AAAA,MACL,aAAAR;AAAA,MACA,wBAAAJ;AAAA,IAAA;AAAA,IAEF,CAACI,GAAaJ,CAAsB;AAAA,EAAA,GAEhC,EAAE,iBAAAoB,EAAA,IAAoBC,GAAA,GAEtB,CAACC,GAA2BC,CAA4B,IAC5DC,GAAS,EAAK,GAEV,EAAE,MAAAC,GAAM,SAAAC,EAAA,IAAYC,GAAA,GACpBC,IAAwBC,GAAaC,EAAyB,GAE9DC,IAAiC,GACrChC,KACEe,MACEkB,GAAkClB,CAAM,KAAKmB,EAAcrC,CAAM,KACjEY,KAEA0B,IACJpB,KACAM,MACEe,GAAoBrB,CAAM,KAAKmB,EAAcrC,CAAM,KAAMY,IAEvD4B,IAAgC,GACpCF,KAAuBhC,IAGnBmC,IAA8C,GAClDH,KACE,CAAC/B,KACD,CAACyB,IAECU,IAAyB9B,IAC3BZ,EAAO,QAAQ,UAAU,CAAA2C,MAAOA,EAAI,QAAQ/B,CAAgB,IAC5D,QACEgC,IAA8B/B,IAChCb,EAAO,QAAQ,UAAU,CAAA2C,MAAOA,EAAI,QAAQ9B,CAAqB,IACjE,QAEEgC,IAAU7B;AAAA,IACd,MAAM;AAAA,MACJ,GAAGd;AAAA,MACH4C;AAAA,MACAC;AAAA,MACAC;AAAA,MACA;AAAA,QACE,GAAGC;AAAA,QACH,QAAQ9C,KAAoBE,IAAyB,WAAW;AAAA,MAAA;AAAA,MAElE,GAAIY,EAAc,IAAI,CAACiC,GAAcC,MAC5BzD,GAAa,SAAS,CAAA0D,MAAOA,EAAI,OAAOD,CAAK,GAAG;AAAA,QACrD,IAAID,EAAa;AAAA,QACjB,eAAeG,GAAiBH,EAAa,UAAU;AAAA,QACvD,gBAAgB;AAAA,QAChB,SAAS7D;AAAA,UACP6D,EAAa;AAAA,UACbA,EAAa;AAAA,QAAA;AAAA,QAEf,QAAQI;AAAA,QACR,MAAMC;AAAA,MAAA,CACP,CACF,KAAK,CAAA;AAAA,IAAC;AAAA,IAET,CAACrD,GAAee,GAAed,GAAkBE,CAAsB;AAAA,EAAA,GAGnEmD,IAA2CxC;AAAA,IAC/C,OAAO;AAAA,MACL,CAAC8B,EAAmB,EAAY,GAAGd;AAAA,MACnC,CAACe,EAAwB,EAAY,GACnCN;AAAA,MACF,CAACO,EAAqB,EAAY,GAAGR;AAAA,MACrC,CAACS,EAAa,EAAY,GAAGd;AAAA,IAAA;AAAA,IAE/B;AAAA,MACEH;AAAA,MACAG;AAAA,MACAM;AAAA,MACAD;AAAA,IAAA;AAAA,EACF,GAIIiB,IAAoCzC;AAAA,IACxC,MACEC,EAAc,OAAO,CAACyC,GAAuBC,OACpC;AAAA,MACL,GAAGD;AAAA,MACH,CAACC,EAAK,IAAI,GAAGvC,EAAqB,SAASuC,EAAK,IAAI;AAAA,IAAA,IAErDH,CAAuB;AAAA,IAC5B,CAACpC,GAAsBH,GAAeuC,CAAuB;AAAA,EAAA,GAGzD,EAAE,uBAAAI,EAAA,IAA0BC,GAA4B7D,CAAM,GAC9D8D,IAA6B7D,KAAoB,CAAC2D,GAElDG,IAAQC,GAAc;AAAA,IAC1B,MAAMhE,EAAO;AAAA,IACb,SAAA6C;AAAA,IACA,eAAe,EAAE,SAAS,GAAA;AAAA,IAC1B,iBAAiBoB,GAAA;AAAA,IACjB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiBnC;AAAA,IACjB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,OAAO;AAAA,MACL,SAASD;AAAA,MACT,kBAAA4B;AAAA,IAAA;AAAA,IAEF,MAAM;AAAA,MACJ,QAAAzD;AAAA;AAAA,MAEA,wBAAA0C;AAAA,MACA,6BAAAE;AAAA,MACA,uBAAuBkB;AAAA,MACvB,uBAAuB,CAACI,MAA6B;AACnD,cAAMhB,IAAejC,EAAc;AAAA,UACjC,CAAAkD,MAAMA,EAAG,SAASD,EAAK,OAAO;AAAA,QAAA;AAEhC,eAAO,GACLhB;AAAA,QAEEA,EAAa,eAAezD,EAAe;AAAA,MAEjD;AAAA,IAAA;AAAA,EACF,CACD;AAKD,SAAKO,IAMH,GAHkBA,EAAO,MAAM,UAAU,KAAK,OAI7Ce,EAAa,MAAM,WAAW,KAAKA,EAAa,MAAM,UAAU,0BAEzDM,GAAA,EAAqB,sBAI5B+C,GAAoB,UAApB,EAA6B,OAAO7C,GACnC,4BAAC,OAAA,EACE,UAAA;AAAA,IAAAG,KACC,gBAAA2C;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAS,MAAM;AACb,UAAA3C,EAA6B,EAAK;AAAA,QACpC;AAAA,QACA,oBAAoBZ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGxB,gBAAAsD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,2BAA2B;AAAA,UACzB,WAAW;AAAA,UACV,eAAgB;AAAA,UACjB,SAAS;AAAA,QAAA;AAAA,QAEX,OAAAR;AAAA,QACA,WAAW;AAAA,QACX,kBAAkB;AAAA,MAAA;AAAA,IAAA;AAAA,EACpB,EAAA,CACF,EAAA,CACF,IAjCO,gBAAAM,EAAAG,GAAA,EAAE;AAmCb;AAOA,SAASnC,EAAcrC,GAAyB;AAC9C,SAAO,EAAQA,EAAO,MAAM,MAAM,OAAO,CAAC,CAACoD,EAAI,KAAK;AACtD;"}
@@ -0,0 +1 @@
1
+ ._labelRow_a4znl_1{display:flex;align-items:baseline;gap:6px;margin-bottom:4px}._inputLabel_a4znl_8{position:relative!important;font-weight:700;margin-bottom:0;pointer-events:unset}._helperText_a4znl_15{font-weight:500;color:var(--synapse-gray-600)}._charCount_a4znl_20{text-align:right;color:var(--synapse-gray-600);font-size:.75rem;margin-top:2px}
@@ -1,6 +1,7 @@
1
1
  import { TextFieldProps as MuiTextFieldProps } from '@mui/material';
2
- export type TextFieldProps = Pick<MuiTextFieldProps, 'autoComplete' | 'autoFocus' | 'disabled' | 'error' | 'fullWidth' | 'id' | 'inputProps' | 'label' | 'maxRows' | 'minRows' | 'multiline' | 'onBlur' | 'onChange' | 'placeholder' | 'required' | 'rows' | 'sx' | 'type' | 'value'> & {
2
+ export type TextFieldProps = Pick<MuiTextFieldProps, 'autoComplete' | 'autoFocus' | 'disabled' | 'error' | 'fullWidth' | 'helperText' | 'id' | 'inputProps' | 'label' | 'maxRows' | 'minRows' | 'multiline' | 'onBlur' | 'onChange' | 'placeholder' | 'required' | 'rows' | 'sx' | 'type' | 'value'> & {
3
3
  noWrapInFormControl?: boolean;
4
+ maxCharacterCount?: number;
4
5
  };
5
6
  /**
6
7
  * A styled text field built using MUI components and designed to match the Sage Design System (SDS) input fields.
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/TextField.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,cAAc,IAAI,iBAAiB,EACpC,MAAM,eAAe,CAAA;AAGtB,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,iBAAiB,EACf,cAAc,GACd,WAAW,GACX,UAAU,GACV,OAAO,GACP,WAAW,GACX,IAAI,GACJ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,UAAU,GACV,aAAa,GACb,UAAU,GACV,MAAM,GACN,IAAI,GACJ,MAAM,GACN,OAAO,CACV,GAAG;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAErC;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,cAAc,2CAoCtD"}
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/TextField.tsx"],"names":[],"mappings":"AACA,OAAO,EAIL,cAAc,IAAI,iBAAiB,EAEpC,MAAM,eAAe,CAAA;AAItB,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,iBAAiB,EACf,cAAc,GACd,WAAW,GACX,UAAU,GACV,OAAO,GACP,WAAW,GACX,YAAY,GACZ,IAAI,GACJ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,UAAU,GACV,aAAa,GACb,UAAU,GACV,MAAM,GACN,IAAI,GACJ,MAAM,GACN,OAAO,CACV,GAAG;IAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,KAAK,EAAE,cAAc,2CA2DtD"}
@@ -1,34 +1,48 @@
1
- import { jsx as t, Fragment as m, jsxs as d } from "react/jsx-runtime";
2
- import { StyledFormControl as a } from "../styled/StyledFormControl.js";
3
- import { InputLabel as c, InputBase as s } from "@mui/material";
4
- import { useId as u, useMemo as f } from "react";
5
- function I(e) {
6
- const n = u(), { noWrapInFormControl: o, label: h, ...l } = e, i = f(
7
- () => o ? (r) => /* @__PURE__ */ t(m, { children: r.children }) : (r) => /* @__PURE__ */ t(a, { fullWidth: !0, sx: { my: 1 }, children: r.children }),
8
- [o]
1
+ import { jsx as t, Fragment as x, jsxs as i } from "react/jsx-runtime";
2
+ import { StyledFormControl as f } from "../styled/StyledFormControl.js";
3
+ import { Box as b, InputLabel as y, Typography as d, InputBase as g } from "@mui/material";
4
+ import l from "./TextField.module.scss.js";
5
+ import { useId as v, useMemo as C } from "react";
6
+ function W(e) {
7
+ const s = v(), {
8
+ noWrapInFormControl: c,
9
+ label: F,
10
+ helperText: o,
11
+ maxCharacterCount: n,
12
+ inputProps: m,
13
+ ...a
14
+ } = e, u = n ? { ...m, maxLength: n } : m, h = typeof a.value == "string" ? a.value.length : 0, p = C(
15
+ () => c ? (r) => /* @__PURE__ */ t(x, { children: r.children }) : (r) => /* @__PURE__ */ t(f, { fullWidth: !0, sx: { my: 1 }, children: r.children }),
16
+ [c]
9
17
  );
10
- return /* @__PURE__ */ d(i, { children: [
11
- e.label && /* @__PURE__ */ t(
12
- c,
13
- {
14
- htmlFor: e.id || n,
15
- sx: {
16
- fontWeight: 700,
17
- mb: "4px",
18
- pointerEvents: "unset",
19
- "&::after": ({ palette: r }) => ({
20
- content: e.required ? '"*"' : void 0,
21
- marginLeft: "3px",
22
- color: r.secondary.main
23
- })
24
- },
25
- children: e.label
26
- }
27
- ),
28
- /* @__PURE__ */ t(s, { id: n, ...l })
18
+ return /* @__PURE__ */ i(p, { children: [
19
+ (e.label || o) && /* @__PURE__ */ i(b, { className: l.labelRow, children: [
20
+ e.label && /* @__PURE__ */ t(
21
+ y,
22
+ {
23
+ htmlFor: e.id || s,
24
+ className: l.inputLabel,
25
+ sx: {
26
+ "&::after": ({ palette: r }) => ({
27
+ content: e.required ? '"*"' : void 0,
28
+ marginLeft: "3px",
29
+ color: r.secondary.main
30
+ })
31
+ },
32
+ children: e.label
33
+ }
34
+ ),
35
+ o && /* @__PURE__ */ t(d, { variant: "body2", className: l.helperText, children: o })
36
+ ] }),
37
+ /* @__PURE__ */ t(g, { id: s, inputProps: u, ...a }),
38
+ n !== void 0 && /* @__PURE__ */ i(d, { variant: "body2", className: l.charCount, children: [
39
+ h,
40
+ "/",
41
+ n
42
+ ] })
29
43
  ] });
30
44
  }
31
45
  export {
32
- I as default
46
+ W as default
33
47
  };
34
48
  //# sourceMappingURL=TextField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.js","sources":["../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport {\n InputBase,\n InputLabel,\n TextFieldProps as MuiTextFieldProps,\n} from '@mui/material'\nimport { PropsWithChildren, useId, useMemo } from 'react'\n\nexport type TextFieldProps = Pick<\n MuiTextFieldProps,\n | 'autoComplete'\n | 'autoFocus'\n | 'disabled'\n | 'error'\n | 'fullWidth'\n | 'id'\n | 'inputProps'\n | 'label'\n | 'maxRows'\n | 'minRows'\n | 'multiline'\n | 'onBlur'\n | 'onChange'\n | 'placeholder'\n | 'required'\n | 'rows'\n | 'sx'\n | 'type'\n | 'value'\n> & { noWrapInFormControl?: boolean }\n\n/**\n * A styled text field built using MUI components and designed to match the Sage Design System (SDS) input fields.\n */\nexport default function TextField(props: TextFieldProps) {\n const id = useId()\n const { noWrapInFormControl, label, ...rest } = props\n const Wrapper = useMemo(\n () =>\n noWrapInFormControl\n ? (props: PropsWithChildren<object>) => <>{props.children}</>\n : (props: PropsWithChildren<object>) => (\n <StyledFormControl fullWidth sx={{ my: 1 }}>\n {props.children}\n </StyledFormControl>\n ),\n [noWrapInFormControl],\n )\n return (\n <Wrapper>\n {props.label && (\n <InputLabel\n htmlFor={props.id || id}\n sx={{\n fontWeight: 700,\n mb: '4px',\n pointerEvents: 'unset',\n '&::after': ({ palette }) => ({\n content: props.required ? '\"*\"' : undefined,\n marginLeft: '3px',\n color: palette.secondary.main,\n }),\n }}\n >\n {props.label}\n </InputLabel>\n )}\n <InputBase id={id} {...rest}></InputBase>\n </Wrapper>\n )\n}\n"],"names":["TextField","props","id","useId","noWrapInFormControl","label","rest","Wrapper","useMemo","StyledFormControl","jsx","InputLabel","palette","InputBase"],"mappings":";;;;AAkCA,SAAwBA,EAAUC,GAAuB;AACvD,QAAMC,IAAKC,EAAA,GACL,EAAE,qBAAAC,GAAqB,OAAAC,GAAO,GAAGC,MAASL,GAC1CM,IAAUC;AAAA,IACd,MACEJ,IACI,CAACH,6BAAwC,UAAAA,EAAM,UAAS,IACxD,CAACA,wBACEQ,GAAA,EAAkB,WAAS,IAAC,IAAI,EAAE,IAAI,KACpC,UAAAR,EAAM,SAAA,CACT;AAAA,IAER,CAACG,CAAmB;AAAA,EAAA;AAEtB,2BACGG,GAAA,EACE,UAAA;AAAA,IAAAN,EAAM,SACL,gBAAAS;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAASV,EAAM,MAAMC;AAAA,QACrB,IAAI;AAAA,UACF,YAAY;AAAA,UACZ,IAAI;AAAA,UACJ,eAAe;AAAA,UACf,YAAY,CAAC,EAAE,SAAAU,SAAe;AAAA,YAC5B,SAASX,EAAM,WAAW,QAAQ;AAAA,YAClC,YAAY;AAAA,YACZ,OAAOW,EAAQ,UAAU;AAAA,UAAA;AAAA,QAC3B;AAAA,QAGD,UAAAX,EAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAGX,gBAAAS,EAACG,GAAA,EAAU,IAAAX,GAAS,GAAGI,EAAA,CAAM;AAAA,EAAA,GAC/B;AAEJ;"}
1
+ {"version":3,"file":"TextField.js","sources":["../../../src/components/TextField/TextField.tsx"],"sourcesContent":["import StyledFormControl from '@/components/styled/StyledFormControl'\nimport {\n Box,\n InputBase,\n InputLabel,\n TextFieldProps as MuiTextFieldProps,\n Typography,\n} from '@mui/material'\nimport styles from './TextField.module.scss'\nimport { PropsWithChildren, useId, useMemo } from 'react'\n\nexport type TextFieldProps = Pick<\n MuiTextFieldProps,\n | 'autoComplete'\n | 'autoFocus'\n | 'disabled'\n | 'error'\n | 'fullWidth'\n | 'helperText'\n | 'id'\n | 'inputProps'\n | 'label'\n | 'maxRows'\n | 'minRows'\n | 'multiline'\n | 'onBlur'\n | 'onChange'\n | 'placeholder'\n | 'required'\n | 'rows'\n | 'sx'\n | 'type'\n | 'value'\n> & { noWrapInFormControl?: boolean; maxCharacterCount?: number }\n\n/**\n * A styled text field built using MUI components and designed to match the Sage Design System (SDS) input fields.\n */\nexport default function TextField(props: TextFieldProps) {\n const id = useId()\n const {\n noWrapInFormControl,\n label: _label,\n helperText,\n maxCharacterCount,\n inputProps: inputPropsProp,\n ...rest\n } = props\n const mergedInputProps = maxCharacterCount\n ? { ...inputPropsProp, maxLength: maxCharacterCount }\n : inputPropsProp\n const currentLength = typeof rest.value === 'string' ? rest.value.length : 0\n const Wrapper = useMemo(\n () =>\n noWrapInFormControl\n ? (props: PropsWithChildren<object>) => <>{props.children}</>\n : (props: PropsWithChildren<object>) => (\n <StyledFormControl fullWidth sx={{ my: 1 }}>\n {props.children}\n </StyledFormControl>\n ),\n [noWrapInFormControl],\n )\n return (\n <Wrapper>\n {(props.label || helperText) && (\n <Box className={styles.labelRow}>\n {props.label && (\n <InputLabel\n htmlFor={props.id || id}\n className={styles.inputLabel}\n sx={{\n '&::after': ({ palette }) => ({\n content: props.required ? '\"*\"' : undefined,\n marginLeft: '3px',\n color: palette.secondary.main,\n }),\n }}\n >\n {props.label}\n </InputLabel>\n )}\n {helperText && (\n <Typography variant=\"body2\" className={styles.helperText}>\n {helperText}\n </Typography>\n )}\n </Box>\n )}\n <InputBase id={id} inputProps={mergedInputProps} {...rest}></InputBase>\n {maxCharacterCount !== undefined && (\n <Typography variant=\"body2\" className={styles.charCount}>\n {currentLength}/{maxCharacterCount}\n </Typography>\n )}\n </Wrapper>\n )\n}\n"],"names":["TextField","props","id","useId","noWrapInFormControl","_label","helperText","maxCharacterCount","inputPropsProp","rest","mergedInputProps","currentLength","Wrapper","useMemo","StyledFormControl","jsxs","Box","styles","jsx","InputLabel","palette","Typography","InputBase"],"mappings":";;;;;AAsCA,SAAwBA,EAAUC,GAAuB;AACvD,QAAMC,IAAKC,EAAA,GACL;AAAA,IACJ,qBAAAC;AAAA,IACA,OAAOC;AAAA,IACP,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,YAAYC;AAAA,IACZ,GAAGC;AAAA,EAAA,IACDR,GACES,IAAmBH,IACrB,EAAE,GAAGC,GAAgB,WAAWD,MAChCC,GACEG,IAAgB,OAAOF,EAAK,SAAU,WAAWA,EAAK,MAAM,SAAS,GACrEG,IAAUC;AAAA,IACd,MACET,IACI,CAACH,6BAAwC,UAAAA,EAAM,UAAS,IACxD,CAACA,wBACEa,GAAA,EAAkB,WAAS,IAAC,IAAI,EAAE,IAAI,KACpC,UAAAb,EAAM,SAAA,CACT;AAAA,IAER,CAACG,CAAmB;AAAA,EAAA;AAEtB,2BACGQ,GAAA,EACG,UAAA;AAAA,KAAAX,EAAM,SAASK,MACf,gBAAAS,EAACC,GAAA,EAAI,WAAWC,EAAO,UACpB,UAAA;AAAA,MAAAhB,EAAM,SACL,gBAAAiB;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAASlB,EAAM,MAAMC;AAAA,UACrB,WAAWe,EAAO;AAAA,UAClB,IAAI;AAAA,YACF,YAAY,CAAC,EAAE,SAAAG,SAAe;AAAA,cAC5B,SAASnB,EAAM,WAAW,QAAQ;AAAA,cAClC,YAAY;AAAA,cACZ,OAAOmB,EAAQ,UAAU;AAAA,YAAA;AAAA,UAC3B;AAAA,UAGD,UAAAnB,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,MAGVK,uBACEe,GAAA,EAAW,SAAQ,SAAQ,WAAWJ,EAAO,YAC3C,UAAAX,EAAA,CACH;AAAA,IAAA,GAEJ;AAAA,sBAEDgB,GAAA,EAAU,IAAApB,GAAQ,YAAYQ,GAAmB,GAAGD,GAAM;AAAA,IAC1DF,MAAsB,UACrB,gBAAAQ,EAACM,GAAA,EAAW,SAAQ,SAAQ,WAAWJ,EAAO,WAC3C,UAAA;AAAA,MAAAN;AAAA,MAAc;AAAA,MAAEJ;AAAA,IAAA,EAAA,CACnB;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -0,0 +1,25 @@
1
+ .labelRow {
2
+ display: flex;
3
+ align-items: baseline;
4
+ gap: 6px;
5
+ margin-bottom: 4px;
6
+ }
7
+
8
+ .inputLabel {
9
+ position: relative !important;
10
+ font-weight: 700;
11
+ margin-bottom: 0;
12
+ pointer-events: unset;
13
+ }
14
+
15
+ .helperText {
16
+ font-weight: 500;
17
+ color: var(--synapse-gray-600);
18
+ }
19
+
20
+ .charCount {
21
+ text-align: right;
22
+ color: var(--synapse-gray-600);
23
+ font-size: 0.75rem;
24
+ margin-top: 2px;
25
+ }
@@ -0,0 +1,14 @@
1
+ import './TextField.css';const e = "_labelRow_a4znl_1", l = "_inputLabel_a4znl_8", t = "_helperText_a4znl_15", a = "_charCount_a4znl_20", n = {
2
+ labelRow: e,
3
+ inputLabel: l,
4
+ helperText: t,
5
+ charCount: a
6
+ };
7
+ export {
8
+ a as charCount,
9
+ n as default,
10
+ t as helperText,
11
+ l as inputLabel,
12
+ e as labelRow
13
+ };
14
+ //# sourceMappingURL=TextField.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -48,7 +48,6 @@ import "../../../assets/icons/account-validated.svg.js";
48
48
  import "../../../utils/functions/DateFormatter.js";
49
49
  import "@react-hookz/web";
50
50
  import "dayjs";
51
- import "../../../assets/ArcusBioIcon.svg.js";
52
51
  import "@mui/material/SvgIcon";
53
52
  import "../../../assets/icons/AccessPending.svg.js";
54
53
  import "../../../assets/icons/AccessPendingCloud.svg.js";
@@ -217,7 +216,7 @@ import "../../PortalAclEditor/PortalAclEditor.js";
217
216
  import "../../SynapseHomepageV2/HomepageStyles.js";
218
217
  import { DownloadConfirmationUI as D } from "../DownloadConfirmationUI.js";
219
218
  import { displayFilesWereAddedToDownloadListSuccess as L } from "../DownloadConfirmationUtils.js";
220
- function qi(p) {
219
+ function yi(p) {
221
220
  const { addToDownloadListRequest: t, onClose: o } = p, { downloadCartPageUrl: e } = u(), {
222
221
  data: r,
223
222
  isLoading: n,
@@ -246,6 +245,6 @@ function qi(p) {
246
245
  );
247
246
  }
248
247
  export {
249
- qi as default
248
+ yi as default
250
249
  };
251
250
  //# sourceMappingURL=AddToDownloadListConfirmationAlert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AddToDownloadListConfirmationAlert.js","sources":["../../../../src/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.tsx"],"sourcesContent":["import { displayToast } from '@/components/index'\nimport { ErrorBanner } from '@/components/error/ErrorBanner'\nimport {\n useAddToDownloadList,\n useGetAddToDownloadListStats,\n} from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils'\nimport { AddToDownloadListRequest } from '@sage-bionetworks/synapse-client'\nimport DownloadConfirmationUI from '../DownloadConfirmationUI'\nimport { displayFilesWereAddedToDownloadListSuccess } from '../DownloadConfirmationUtils'\n\nexport type AddToDownloadListConfirmationAlertProps = {\n /**\n * The \"AddToDownloadListRequest\" that would be used to add items to the download list.\n */\n addToDownloadListRequest: AddToDownloadListRequest\n /**\n * Invoked when the dialog is closed, either by cancelling or successfully adding to the download list.\n */\n onClose: () => void\n}\n\n/**\n * A component that displays a confirmation alert when adding multiple items to the download list though a container or\n * query.\n * @param props\n * @constructor\n */\nfunction AddToDownloadListConfirmationAlert(\n props: AddToDownloadListConfirmationAlertProps,\n) {\n const { addToDownloadListRequest, onClose } = props\n const { downloadCartPageUrl } = useSynapseContext()\n\n const {\n data,\n isLoading,\n error: statsError,\n } = useGetAddToDownloadListStats({\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListStatsRequest',\n request: addToDownloadListRequest,\n })\n\n const { mutate: addToDownloadList, isPending: isAddingToDownloadCart } =\n useAddToDownloadList({\n onSuccess: () => {\n displayFilesWereAddedToDownloadListSuccess(downloadCartPageUrl)\n onClose()\n },\n onError: error => {\n displayToast(error.reason, 'danger')\n onClose()\n },\n })\n\n const fileCount = data?.fileCount\n const fileSizeTotal = data?.fileSize\n\n if (statsError) {\n return <ErrorBanner error={statsError} />\n }\n\n return (\n <DownloadConfirmationUI\n onAddToDownloadCart={() => addToDownloadList(addToDownloadListRequest)}\n fileCount={fileCount}\n fileSize={fileSizeTotal}\n isAddingToDownloadCart={isAddingToDownloadCart}\n isLoadingStats={isLoading}\n onCancel={onClose}\n />\n )\n}\n\nexport default AddToDownloadListConfirmationAlert\n"],"names":["AddToDownloadListConfirmationAlert","props","addToDownloadListRequest","onClose","downloadCartPageUrl","useSynapseContext","data","isLoading","statsError","useGetAddToDownloadListStats","addToDownloadList","isAddingToDownloadCart","useAddToDownloadList","displayFilesWereAddedToDownloadListSuccess","error","displayToast","fileCount","fileSizeTotal","jsx","ErrorBanner","DownloadConfirmationUI"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAASA,GACPC,GACA;AACA,QAAM,EAAE,0BAAAC,GAA0B,SAAAC,EAAA,IAAYF,GACxC,EAAE,qBAAAG,EAAA,IAAwBC,EAAA,GAE1B;AAAA,IACJ,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAOC;AAAA,EAAA,IACLC,EAA6B;AAAA,IAC/B,cACE;AAAA,IACF,SAASP;AAAA,EAAA,CACV,GAEK,EAAE,QAAQQ,GAAmB,WAAWC,EAAA,IAC5CC,EAAqB;AAAA,IACnB,WAAW,MAAM;AACf,MAAAC,EAA2CT,CAAmB,GAC9DD,EAAA;AAAA,IACF;AAAA,IACA,SAAS,CAAAW,MAAS;AAChB,MAAAC,EAAaD,EAAM,QAAQ,QAAQ,GACnCX,EAAA;AAAA,IACF;AAAA,EAAA,CACD,GAEGa,IAAYV,GAAM,WAClBW,IAAgBX,GAAM;AAE5B,SAAIE,IACK,gBAAAU,EAACC,GAAA,EAAY,OAAOX,EAAA,CAAY,IAIvC,gBAAAU;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,qBAAqB,MAAMV,EAAkBR,CAAwB;AAAA,MACrE,WAAAc;AAAA,MACA,UAAUC;AAAA,MACV,wBAAAN;AAAA,MACA,gBAAgBJ;AAAA,MAChB,UAAUJ;AAAA,IAAA;AAAA,EAAA;AAGhB;"}
1
+ {"version":3,"file":"AddToDownloadListConfirmationAlert.js","sources":["../../../../src/components/download_list/AddToDownloadListConfirmationAlert/AddToDownloadListConfirmationAlert.tsx"],"sourcesContent":["import { displayToast } from '@/components/index'\nimport { ErrorBanner } from '@/components/error/ErrorBanner'\nimport {\n useAddToDownloadList,\n useGetAddToDownloadListStats,\n} from '@/synapse-queries/download/useDownloadList'\nimport { useSynapseContext } from '@/utils'\nimport { AddToDownloadListRequest } from '@sage-bionetworks/synapse-client'\nimport DownloadConfirmationUI from '../DownloadConfirmationUI'\nimport { displayFilesWereAddedToDownloadListSuccess } from '../DownloadConfirmationUtils'\n\nexport type AddToDownloadListConfirmationAlertProps = {\n /**\n * The \"AddToDownloadListRequest\" that would be used to add items to the download list.\n */\n addToDownloadListRequest: AddToDownloadListRequest\n /**\n * Invoked when the dialog is closed, either by cancelling or successfully adding to the download list.\n */\n onClose: () => void\n}\n\n/**\n * A component that displays a confirmation alert when adding multiple items to the download list though a container or\n * query.\n * @param props\n * @constructor\n */\nfunction AddToDownloadListConfirmationAlert(\n props: AddToDownloadListConfirmationAlertProps,\n) {\n const { addToDownloadListRequest, onClose } = props\n const { downloadCartPageUrl } = useSynapseContext()\n\n const {\n data,\n isLoading,\n error: statsError,\n } = useGetAddToDownloadListStats({\n concreteType:\n 'org.sagebionetworks.repo.model.download.AddToDownloadListStatsRequest',\n request: addToDownloadListRequest,\n })\n\n const { mutate: addToDownloadList, isPending: isAddingToDownloadCart } =\n useAddToDownloadList({\n onSuccess: () => {\n displayFilesWereAddedToDownloadListSuccess(downloadCartPageUrl)\n onClose()\n },\n onError: error => {\n displayToast(error.reason, 'danger')\n onClose()\n },\n })\n\n const fileCount = data?.fileCount\n const fileSizeTotal = data?.fileSize\n\n if (statsError) {\n return <ErrorBanner error={statsError} />\n }\n\n return (\n <DownloadConfirmationUI\n onAddToDownloadCart={() => addToDownloadList(addToDownloadListRequest)}\n fileCount={fileCount}\n fileSize={fileSizeTotal}\n isAddingToDownloadCart={isAddingToDownloadCart}\n isLoadingStats={isLoading}\n onCancel={onClose}\n />\n )\n}\n\nexport default AddToDownloadListConfirmationAlert\n"],"names":["AddToDownloadListConfirmationAlert","props","addToDownloadListRequest","onClose","downloadCartPageUrl","useSynapseContext","data","isLoading","statsError","useGetAddToDownloadListStats","addToDownloadList","isAddingToDownloadCart","useAddToDownloadList","displayFilesWereAddedToDownloadListSuccess","error","displayToast","fileCount","fileSizeTotal","jsx","ErrorBanner","DownloadConfirmationUI"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAASA,GACPC,GACA;AACA,QAAM,EAAE,0BAAAC,GAA0B,SAAAC,EAAA,IAAYF,GACxC,EAAE,qBAAAG,EAAA,IAAwBC,EAAA,GAE1B;AAAA,IACJ,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,OAAOC;AAAA,EAAA,IACLC,EAA6B;AAAA,IAC/B,cACE;AAAA,IACF,SAASP;AAAA,EAAA,CACV,GAEK,EAAE,QAAQQ,GAAmB,WAAWC,EAAA,IAC5CC,EAAqB;AAAA,IACnB,WAAW,MAAM;AACf,MAAAC,EAA2CT,CAAmB,GAC9DD,EAAA;AAAA,IACF;AAAA,IACA,SAAS,CAAAW,MAAS;AAChB,MAAAC,EAAaD,EAAM,QAAQ,QAAQ,GACnCX,EAAA;AAAA,IACF;AAAA,EAAA,CACD,GAEGa,IAAYV,GAAM,WAClBW,IAAgBX,GAAM;AAE5B,SAAIE,IACK,gBAAAU,EAACC,GAAA,EAAY,OAAOX,EAAA,CAAY,IAIvC,gBAAAU;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,qBAAqB,MAAMV,EAAkBR,CAAwB;AAAA,MACrE,WAAAc;AAAA,MACA,UAAUC;AAAA,MACV,wBAAAN;AAAA,MACA,gBAAgBJ;AAAA,MAChB,UAAUJ;AAAA,IAAA;AAAA,EAAA;AAGhB;"}
@@ -18,6 +18,7 @@ export * from './ChallengeSubmission';
18
18
  export * from './ChangePassword';
19
19
  export * from './ConfirmationDialog';
20
20
  export * from './CookiesNotification';
21
+ export * from './ColoredBulletListItem';
21
22
  export * from './CTASectionWrapper';
22
23
  export * from './DownloadCart';
23
24
  export * from './DynamicForm';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,kBAAkB,MAAM,mCAAmC,CAAA;AAElE;;;GAGG;AAEH,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,0BAA0B,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wCAAwC,CAAA;AACtD,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAGnE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,CAAA"}