synapse-react-client 4.0.20 → 4.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/CardContainer/CardConfiguration.d.ts +2 -0
  3. package/dist/components/CardContainer/CardConfiguration.d.ts.map +1 -1
  4. package/dist/components/CardContainer/CardContainer.d.ts.map +1 -1
  5. package/dist/components/CardContainer/CardContainer.js +3 -3
  6. package/dist/components/CardContainer/CardContainer.js.map +1 -1
  7. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts +1 -0
  8. package/dist/components/CardContainerLogic/CardContainerLogic.d.ts.map +1 -1
  9. package/dist/components/CardContainerLogic/CardContainerLogic.js.map +1 -1
  10. package/dist/components/DataExplorer/DataExplorer.css +1 -1
  11. package/dist/components/DataExplorer/DataExplorer.module.js +16 -16
  12. package/dist/components/DataExplorer/DataExplorer.module.js.map +1 -1
  13. package/dist/components/DataExplorer/DataExplorer.module.scss +26 -6
  14. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts +5 -3
  15. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.d.ts.map +1 -1
  16. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js +46 -47
  17. package/dist/components/DataGrid/components/ColumnHeaderWithTooltip.js.map +1 -1
  18. package/dist/components/DataGrid/hooks/useColumnResizeHandles.d.ts.map +1 -1
  19. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js +1 -1
  20. package/dist/components/DataGrid/hooks/useColumnResizeHandles.js.map +1 -1
  21. package/dist/components/DataGrid/utils/columnFactory.d.ts.map +1 -1
  22. package/dist/components/DataGrid/utils/columnFactory.js +1 -0
  23. package/dist/components/DataGrid/utils/columnFactory.js.map +1 -1
  24. package/dist/components/GenericCard/GenericCard.d.ts +2 -0
  25. package/dist/components/GenericCard/GenericCard.d.ts.map +1 -1
  26. package/dist/components/GenericCard/GenericCard.js +76 -64
  27. package/dist/components/GenericCard/GenericCard.js.map +1 -1
  28. package/dist/components/GenericCard/TableRowGenericCard.d.ts.map +1 -1
  29. package/dist/components/GenericCard/TableRowGenericCard.js +33 -25
  30. package/dist/components/GenericCard/TableRowGenericCard.js.map +1 -1
  31. package/dist/components/Plot/SynapseSankeyPlot.css +1 -0
  32. package/dist/components/Plot/SynapseSankeyPlot.d.ts +44 -2
  33. package/dist/components/Plot/SynapseSankeyPlot.d.ts.map +1 -1
  34. package/dist/components/Plot/SynapseSankeyPlot.js +343 -38
  35. package/dist/components/Plot/SynapseSankeyPlot.js.map +1 -1
  36. package/dist/components/Plot/SynapseSankeyPlot.module.js +15 -0
  37. package/dist/components/Plot/SynapseSankeyPlot.module.js.map +1 -0
  38. package/dist/components/Plot/SynapseSankeyPlot.module.scss +63 -0
  39. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts +13 -12
  40. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.d.ts.map +1 -1
  41. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js +88 -77
  42. package/dist/components/SearchQueryWrapper/SearchQueryUseQueryOptions.js.map +1 -1
  43. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.d.ts.map +1 -1
  44. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js +63 -74
  45. package/dist/components/SynapseTable/TopLevelControls/TopLevelControls.js.map +1 -1
  46. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.d.ts.map +1 -1
  47. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js +72 -68
  48. package/dist/components/TableColumnSchemaEditor/ColumnModelForm.js.map +1 -1
  49. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts +27 -1
  50. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.d.ts.map +1 -1
  51. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js +47 -36
  52. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaEditorUtils.js.map +1 -1
  53. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js +1 -1
  54. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaForm.js.map +1 -1
  55. package/dist/components/TableColumnSchemaEditor/TableColumnSchemaFormReducer.d.ts +12 -12
  56. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts +4 -1
  57. package/dist/components/TableColumnSchemaEditor/Validators/BooleanSchema.d.ts.map +1 -1
  58. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts +167 -517
  59. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.d.ts.map +1 -1
  60. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js +65 -65
  61. package/dist/components/TableColumnSchemaEditor/Validators/ColumnModelValidator.js.map +1 -1
  62. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts +1 -1
  63. package/dist/components/TableColumnSchemaEditor/Validators/DatetimeSchema.d.ts.map +1 -1
  64. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts +1 -1
  65. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.d.ts.map +1 -1
  66. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js +6 -13
  67. package/dist/components/TableColumnSchemaEditor/Validators/DoubleSchema.js.map +1 -1
  68. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts +1 -1
  69. package/dist/components/TableColumnSchemaEditor/Validators/EntityIdSchema.d.ts.map +1 -1
  70. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts +1 -1
  71. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.d.ts.map +1 -1
  72. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js +2 -2
  73. package/dist/components/TableColumnSchemaEditor/Validators/IntegerSchema.js.map +1 -1
  74. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts +1 -1
  75. package/dist/components/TableColumnSchemaEditor/Validators/OptionalStringSchema.d.ts.map +1 -1
  76. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts +2 -2
  77. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.d.ts.map +1 -1
  78. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js +15 -16
  79. package/dist/components/TableColumnSchemaEditor/Validators/getZodSchemaForColumnType.js.map +1 -1
  80. package/dist/mocks/mockSearchQueryData.js +2 -2
  81. package/dist/mocks/mockSearchQueryData.js.map +1 -1
  82. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts +1 -1
  83. package/dist/mocks/msw/handlers/searchQueryHandlers.d.ts.map +1 -1
  84. package/dist/mocks/msw/handlers/searchQueryHandlers.js +6 -3
  85. package/dist/mocks/msw/handlers/searchQueryHandlers.js.map +1 -1
  86. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts +13 -0
  87. package/dist/mocks/query/mockUserCardTableQueryResultBundle.d.ts.map +1 -1
  88. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js +27 -0
  89. package/dist/mocks/query/mockUserCardTableQueryResultBundle.js.map +1 -1
  90. package/dist/style/components/_cards.scss +10 -0
  91. package/dist/style/components/_data-grid-extra.css +1 -1
  92. package/dist/style/components/_data-grid-extra.scss +7 -1
  93. package/dist/style/main.css +1 -1
  94. package/dist/synapse-client/SynapseClient.d.ts.map +1 -1
  95. package/dist/synapse-client/SynapseClient.js +497 -495
  96. package/dist/synapse-client/SynapseClient.js.map +1 -1
  97. package/dist/tsconfig.build.tsbuildinfo +1 -1
  98. package/package.json +7 -5
@@ -1 +1 @@
1
- {"version":3,"file":"searchQueryHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/searchQueryHandlers.ts"],"sourcesContent":["import {\n SEARCH_QUERY_ASYNC_GET,\n SEARCH_QUERY_ASYNC_START,\n} from '@/utils/APIConstants'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport { QueryResultBundle } from '@sage-bionetworks/synapse-types'\nimport {\n SearchIndexQuery,\n SearchQueryResults,\n SearchSearchQuery,\n} from '@sage-bionetworks/synapse-client'\nimport { cloneDeep } from 'lodash-es'\nimport { HttpHandler } from 'msw'\nimport { generateAsyncJobHandlers } from './asyncJobHandlers'\nimport { mockSearchQueryResultBundle } from '@/mocks/mockSearchQueryData'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\n/**\n * A key derived from a SearchIndexQuery, excluding pagination fields.\n * Used to match registered bindings against incoming requests.\n */\ntype SearchIndexQueryKey = Omit<SearchIndexQuery, 'searchQuery'> & {\n searchQuery?: Omit<SearchSearchQuery, 'limit' | 'offset'>\n}\n\ntype SearchQueryBinding = {\n id: string\n queryKey: SearchIndexQueryKey\n result: QueryResultBundle\n}\n\nconst mockSearchQueryService = new BasicMockedCrudService<\n SearchQueryBinding,\n 'id'\n>({\n idField: 'id',\n autoGenerateId: true,\n})\n\nfunction applyLimitOffset(\n bundle: QueryResultBundle,\n limit = 25,\n offset = 0,\n): QueryResultBundle {\n const result = cloneDeep(bundle)\n if (result.queryResult?.queryResults.rows) {\n result.queryResult.queryResults.rows =\n result.queryResult.queryResults.rows.slice(offset, offset + limit)\n }\n return result\n}\n\nfunction processSearchRequest(\n request: SearchIndexQuery,\n baseBundle: QueryResultBundle,\n): QueryResultBundle {\n return applyLimitOffset(\n baseBundle,\n request.searchQuery?.limit,\n request.searchQuery?.offset,\n )\n}\n\n/**\n * Register a specific query binding for the mock search service.\n * If a binding for the same query key (ignoring limit/offset) already exists, it is updated.\n */\nexport function registerSearchQueryResult(\n queryKey: SearchIndexQueryKey,\n result: QueryResultBundle,\n) {\n const existing = mockSearchQueryService.getOneByField('queryKey', queryKey)\n if (existing) {\n mockSearchQueryService.update(existing.id, { ...existing, result })\n } else {\n mockSearchQueryService.create({ queryKey, result })\n }\n}\n\nfunction getSearchQueryResult(request: SearchIndexQuery): QueryResultBundle {\n const requestCopy = cloneDeep(request)\n if (requestCopy.searchQuery) {\n delete requestCopy.searchQuery.limit\n delete requestCopy.searchQuery.offset\n }\n const queryKey = requestCopy as SearchIndexQueryKey\n\n const binding = mockSearchQueryService.getOneByField('queryKey', queryKey)\n const baseBundle = binding?.result ?? mockSearchQueryResultBundle\n\n return processSearchRequest(request, baseBundle)\n}\n\n/**\n * Adapts the QueryResultBundle mock result into the SearchQueryResults shape\n * that the real SearchQueryServicesApi returns.\n */\nfunction toSearchQueryResults(bundle: QueryResultBundle): SearchQueryResults {\n const headers = bundle.queryResult?.queryResults.headers ?? []\n\n const hits = (bundle.queryResult?.queryResults.rows ?? []).map(row => ({\n rowId: row.rowId,\n rowVersion: row.versionNumber,\n fields: headers.map((header, i) => ({\n name: header.name,\n value: row.values[i] ?? undefined,\n })),\n }))\n\n const selectColumns = headers.map(header => ({\n name: header.name,\n columnType: header.columnType,\n id: header.id,\n }))\n\n return {\n concreteType:\n 'org.sagebionetworks.repo.model.search.SearchQueryResults' as const,\n totalHits: bundle.queryCount,\n hits,\n selectColumns,\n facets: bundle.facets as SearchQueryResults['facets'],\n offset: bundle.queryResult?.queryResults.rows?.length ? 0 : undefined,\n }\n}\n\n/**\n * Returns MSW handlers for the SearchQueryServicesApi endpoints.\n * Uses the default mock data from mockSearchQueryData.ts unless overridden via registerSearchQueryResult().\n */\nexport function getHandlersForSearchQuery(\n backendOrigin = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT),\n): HttpHandler[] {\n return generateAsyncJobHandlers<SearchIndexQuery, SearchQueryResults>(\n SEARCH_QUERY_ASYNC_START,\n tokenParam => SEARCH_QUERY_ASYNC_GET(tokenParam),\n request => toSearchQueryResults(getSearchQueryResult(request)),\n backendOrigin,\n )\n}\n"],"mappings":";;;;;;;AAkCA,IAAM,IAAyB,IAAI,EAGjC;CACA,SAAS;CACT,gBAAgB;AAClB,CAAC;AAED,SAAS,EACP,GACA,IAAQ,IACR,IAAS,GACU;CACnB,IAAM,IAAS,EAAU,CAAM;CAK/B,OAJI,EAAO,aAAa,aAAa,SACnC,EAAO,YAAY,aAAa,OAC9B,EAAO,YAAY,aAAa,KAAK,MAAM,GAAQ,IAAS,CAAK,IAE9D;AACT;AAEA,SAAS,EACP,GACA,GACmB;CACnB,OAAO,EACL,GACA,EAAQ,aAAa,OACrB,EAAQ,aAAa,MACvB;AACF;AAMA,SAAgB,EACd,GACA,GACA;CACA,IAAM,IAAW,EAAuB,cAAc,YAAY,CAAQ;CAC1E,AAAI,IACF,EAAuB,OAAO,EAAS,IAAI;EAAE,GAAG;EAAU;CAAO,CAAC,IAElE,EAAuB,OAAO;EAAE;EAAU;CAAO,CAAC;AAEtD;AAEA,SAAS,EAAqB,GAA8C;CAC1E,IAAM,IAAc,EAAU,CAAO;CACrC,AAAI,EAAY,gBACd,OAAO,EAAY,YAAY,OAC/B,OAAO,EAAY,YAAY;CAEjC,IAAM,IAAW;CAKjB,OAAO,EAAqB,GAHZ,EAAuB,cAAc,YAAY,CAC9C,GAAS,UAAU,CAES;AACjD;AAMA,SAAS,EAAqB,GAA+C;CAC3E,IAAM,IAAU,EAAO,aAAa,aAAa,WAAW,CAAC,GAEvD,KAAQ,EAAO,aAAa,aAAa,QAAQ,CAAC,GAAG,KAAI,OAAQ;EACrE,OAAO,EAAI;EACX,YAAY,EAAI;EAChB,QAAQ,EAAQ,KAAK,GAAQ,OAAO;GAClC,MAAM,EAAO;GACb,OAAO,EAAI,OAAO,MAAM,KAAA;EAC1B,EAAE;CACJ,EAAE,GAEI,IAAgB,EAAQ,KAAI,OAAW;EAC3C,MAAM,EAAO;EACb,YAAY,EAAO;EACnB,IAAI,EAAO;CACb,EAAE;CAEF,OAAO;EACL,cACE;EACF,WAAW,EAAO;EAClB;EACA;EACA,QAAQ,EAAO;EACf,QAAQ,EAAO,aAAa,aAAa,MAAM,SAAS,IAAI,KAAA;CAC9D;AACF;AAMA,SAAgB,EACd,IAAgB,EAAY,EAAuB,aAAa,GACjD;CACf,OAAO,EACL,IACA,MAAc,EAAuB,CAAU,IAC/C,MAAW,EAAqB,EAAqB,CAAO,CAAC,GAC7D,CACF;AACF"}
1
+ {"version":3,"file":"searchQueryHandlers.js","names":[],"sources":["../../../../src/mocks/msw/handlers/searchQueryHandlers.ts"],"sourcesContent":["import {\n SEARCH_QUERY_ASYNC_GET,\n SEARCH_QUERY_ASYNC_START,\n} from '@/utils/APIConstants'\nimport {\n BackendDestinationEnum,\n getEndpoint,\n} from '@/utils/functions/getEndpoint'\nimport {\n FacetColumnResultValues,\n QueryResultBundle,\n} from '@sage-bionetworks/synapse-types'\nimport {\n SearchIndexQuery,\n SearchQueryResults,\n SearchSearchQuery,\n} from '@sage-bionetworks/synapse-client'\nimport { cloneDeep } from 'lodash-es'\nimport { HttpHandler } from 'msw'\nimport { generateAsyncJobHandlers } from './asyncJobHandlers'\nimport { mockSearchQueryResultBundle } from '@/mocks/mockSearchQueryData'\nimport BasicMockedCrudService from '../util/BasicMockedCrudService'\n\n/**\n * A key derived from a SearchIndexQuery, excluding pagination fields.\n * Used to match registered bindings against incoming requests.\n */\ntype SearchIndexQueryKey = Omit<SearchIndexQuery, 'searchQuery'> & {\n searchQuery?: Omit<SearchSearchQuery, 'size' | 'from'>\n}\n\ntype SearchQueryBinding = {\n id: string\n queryKey: SearchIndexQueryKey\n result: QueryResultBundle\n}\n\nconst mockSearchQueryService = new BasicMockedCrudService<\n SearchQueryBinding,\n 'id'\n>({\n idField: 'id',\n autoGenerateId: true,\n})\n\nfunction applyLimitOffset(\n bundle: QueryResultBundle,\n limit = 25,\n offset = 0,\n): QueryResultBundle {\n const result = cloneDeep(bundle)\n if (result.queryResult?.queryResults.rows) {\n result.queryResult.queryResults.rows =\n result.queryResult.queryResults.rows.slice(offset, offset + limit)\n }\n return result\n}\n\nfunction processSearchRequest(\n request: SearchIndexQuery,\n baseBundle: QueryResultBundle,\n): QueryResultBundle {\n return applyLimitOffset(\n baseBundle,\n request.searchQuery?.size,\n request.searchQuery?.from,\n )\n}\n\n/**\n * Register a specific query binding for the mock search service.\n * If a binding for the same query key (ignoring limit/offset) already exists, it is updated.\n */\nexport function registerSearchQueryResult(\n queryKey: SearchIndexQueryKey,\n result: QueryResultBundle,\n) {\n const existing = mockSearchQueryService.getOneByField('queryKey', queryKey)\n if (existing) {\n mockSearchQueryService.update(existing.id, { ...existing, result })\n } else {\n mockSearchQueryService.create({ queryKey, result })\n }\n}\n\nfunction getSearchQueryResult(request: SearchIndexQuery): QueryResultBundle {\n const requestCopy = cloneDeep(request)\n if (requestCopy.searchQuery) {\n delete requestCopy.searchQuery.size\n delete requestCopy.searchQuery.from\n }\n const queryKey = requestCopy as SearchIndexQueryKey\n\n const binding = mockSearchQueryService.getOneByField('queryKey', queryKey)\n const baseBundle = binding?.result ?? mockSearchQueryResultBundle\n\n return processSearchRequest(request, baseBundle)\n}\n\n/**\n * Adapts the QueryResultBundle mock result into the SearchQueryResults shape\n * that the real SearchQueryServicesApi returns.\n */\nfunction toSearchQueryResults(bundle: QueryResultBundle): SearchQueryResults {\n const headers = bundle.queryResult?.queryResults.headers ?? []\n\n const hits = (bundle.queryResult?.queryResults.rows ?? []).map(row => ({\n rowId: row.rowId,\n rowVersion: row.versionNumber,\n fields: headers.map((header, i) => ({\n name: header.name,\n value: row.values[i] ?? undefined,\n })),\n }))\n\n const selectColumns = headers.map(header => ({\n name: header.name,\n columnType: header.columnType,\n id: header.id,\n }))\n\n return {\n concreteType:\n 'org.sagebionetworks.repo.model.search.SearchQueryResults' as const,\n totalHits: bundle.queryCount,\n hits,\n selectColumns,\n // Convert FacetColumnResultValues[] → aggregationResults (OpenSearch terms agg shape)\n // so that searchQueryResultsToQueryResultBundle can parse facet data from mock responses.\n aggregationResults: Object.fromEntries(\n (bundle.facets ?? [])\n .filter(\n (f): f is FacetColumnResultValues =>\n f.concreteType ===\n 'org.sagebionetworks.repo.model.table.FacetColumnResultValues',\n )\n .map(f => [\n f.columnName,\n {\n buckets: (f.facetValues ?? []).map(fv => ({\n key: fv.value,\n doc_count: fv.count,\n })),\n },\n ]),\n ),\n offset: bundle.queryResult?.queryResults.rows?.length ? 0 : undefined,\n }\n}\n\n/**\n * Returns MSW handlers for the SearchQueryServicesApi endpoints.\n * Uses the default mock data from mockSearchQueryData.ts unless overridden via registerSearchQueryResult().\n */\nexport function getHandlersForSearchQuery(\n backendOrigin = getEndpoint(BackendDestinationEnum.REPO_ENDPOINT),\n): HttpHandler[] {\n return generateAsyncJobHandlers<SearchIndexQuery, SearchQueryResults>(\n SEARCH_QUERY_ASYNC_START,\n tokenParam => SEARCH_QUERY_ASYNC_GET(tokenParam),\n request => toSearchQueryResults(getSearchQueryResult(request)),\n backendOrigin,\n )\n}\n"],"mappings":";;;;;;;AAqCA,IAAM,IAAyB,IAAI,EAGjC;CACA,SAAS;CACT,gBAAgB;AAClB,CAAC;AAED,SAAS,EACP,GACA,IAAQ,IACR,IAAS,GACU;CACnB,IAAM,IAAS,EAAU,CAAM;CAK/B,OAJI,EAAO,aAAa,aAAa,SACnC,EAAO,YAAY,aAAa,OAC9B,EAAO,YAAY,aAAa,KAAK,MAAM,GAAQ,IAAS,CAAK,IAE9D;AACT;AAEA,SAAS,EACP,GACA,GACmB;CACnB,OAAO,EACL,GACA,EAAQ,aAAa,MACrB,EAAQ,aAAa,IACvB;AACF;AAMA,SAAgB,EACd,GACA,GACA;CACA,IAAM,IAAW,EAAuB,cAAc,YAAY,CAAQ;CAC1E,AAAI,IACF,EAAuB,OAAO,EAAS,IAAI;EAAE,GAAG;EAAU;CAAO,CAAC,IAElE,EAAuB,OAAO;EAAE;EAAU;CAAO,CAAC;AAEtD;AAEA,SAAS,EAAqB,GAA8C;CAC1E,IAAM,IAAc,EAAU,CAAO;CACrC,AAAI,EAAY,gBACd,OAAO,EAAY,YAAY,MAC/B,OAAO,EAAY,YAAY;CAEjC,IAAM,IAAW;CAKjB,OAAO,EAAqB,GAHZ,EAAuB,cAAc,YAAY,CAC9C,GAAS,UAAU,CAES;AACjD;AAMA,SAAS,EAAqB,GAA+C;CAC3E,IAAM,IAAU,EAAO,aAAa,aAAa,WAAW,CAAC,GAEvD,KAAQ,EAAO,aAAa,aAAa,QAAQ,CAAC,GAAG,KAAI,OAAQ;EACrE,OAAO,EAAI;EACX,YAAY,EAAI;EAChB,QAAQ,EAAQ,KAAK,GAAQ,OAAO;GAClC,MAAM,EAAO;GACb,OAAO,EAAI,OAAO,MAAM,KAAA;EAC1B,EAAE;CACJ,EAAE,GAEI,IAAgB,EAAQ,KAAI,OAAW;EAC3C,MAAM,EAAO;EACb,YAAY,EAAO;EACnB,IAAI,EAAO;CACb,EAAE;CAEF,OAAO;EACL,cACE;EACF,WAAW,EAAO;EAClB;EACA;EAGA,oBAAoB,OAAO,aACxB,EAAO,UAAU,CAAC,GAChB,QACE,MACC,EAAE,iBACF,8DACJ,EACC,KAAI,MAAK,CACR,EAAE,YACF,EACE,UAAU,EAAE,eAAe,CAAC,GAAG,KAAI,OAAO;GACxC,KAAK,EAAG;GACR,WAAW,EAAG;EAChB,EAAE,EACJ,CACF,CAAC,CACL;EACA,QAAQ,EAAO,aAAa,aAAa,MAAM,SAAS,IAAI,KAAA;CAC9D;AACF;AAMA,SAAgB,EACd,IAAgB,EAAY,EAAuB,aAAa,GACjD;CACf,OAAO,EACL,IACA,MAAc,EAAuB,CAAU,IAC/C,MAAW,EAAqB,EAAqB,CAAO,CAAC,GAC7D,CACF;AACF"}
@@ -1,5 +1,18 @@
1
1
  declare const queryResultBundle: {
2
2
  concreteType: "org.sagebionetworks.repo.model.table.QueryResultBundle";
3
+ columnModels: ({
4
+ id: string;
5
+ name: string;
6
+ columnType: "STRING";
7
+ } | {
8
+ id: string;
9
+ name: string;
10
+ columnType: "USERID";
11
+ } | {
12
+ id: string;
13
+ name: string;
14
+ columnType: "STRING_LIST";
15
+ })[];
3
16
  queryResult: {
4
17
  concreteType: "org.sagebionetworks.repo.model.table.QueryResult";
5
18
  queryResults: {
@@ -1 +1 @@
1
- {"version":3,"file":"mockUserCardTableQueryResultBundle.d.ts","sourceRoot":"","sources":["../../../src/mocks/query/mockUserCardTableQueryResultBundle.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DM,CAAA;AAE7B,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"mockUserCardTableQueryResultBundle.d.ts","sourceRoot":"","sources":["../../../src/mocks/query/mockUserCardTableQueryResultBundle.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEM,CAAA;AAE7B,eAAe,iBAAiB,CAAA"}
@@ -2,6 +2,33 @@ import "../user/mock_user_profile.js";
2
2
  //#region src/mocks/query/mockUserCardTableQueryResultBundle.ts
3
3
  var e = {
4
4
  concreteType: "org.sagebionetworks.repo.model.table.QueryResultBundle",
5
+ columnModels: [
6
+ {
7
+ id: "124219",
8
+ name: "firstName",
9
+ columnType: "STRING"
10
+ },
11
+ {
12
+ id: "124220",
13
+ name: "lastName",
14
+ columnType: "STRING"
15
+ },
16
+ {
17
+ id: "124221",
18
+ name: "institution",
19
+ columnType: "STRING"
20
+ },
21
+ {
22
+ id: "124214",
23
+ name: "ownerID",
24
+ columnType: "USERID"
25
+ },
26
+ {
27
+ id: "151844",
28
+ name: "Program",
29
+ columnType: "STRING_LIST"
30
+ }
31
+ ],
5
32
  queryResult: {
6
33
  concreteType: "org.sagebionetworks.repo.model.table.QueryResult",
7
34
  queryResults: {
@@ -1 +1 @@
1
- {"version":3,"file":"mockUserCardTableQueryResultBundle.js","names":[],"sources":["../../../src/mocks/query/mockUserCardTableQueryResultBundle.ts"],"sourcesContent":["import { QueryResultBundle } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID } from '../user/mock_user_profile'\n\nconst queryResultBundle = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryResultBundle',\n queryResult: {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryResult',\n queryResults: {\n concreteType: 'org.sagebionetworks.repo.model.table.RowSet',\n tableId: 'syn13897207',\n etag: '593afe35-0e97-436d-b7f3-ad00289b0ac0',\n headers: [\n {\n name: 'firstName',\n columnType: 'STRING',\n id: '124219',\n },\n {\n name: 'lastName',\n columnType: 'STRING',\n id: '124220',\n },\n {\n name: 'institution',\n columnType: 'STRING',\n id: '124221',\n },\n {\n name: 'ownerID',\n columnType: 'USERID',\n id: '124214',\n },\n {\n name: 'Program',\n columnType: 'STRING_LIST',\n id: '151844',\n },\n ],\n rows: [\n {\n rowId: 262,\n versionNumber: 406,\n values: [\n 'John',\n 'Doe',\n 'Sage Bionetworks',\n MOCK_USER_ID.toString(),\n '[\"My-program\"]',\n ],\n },\n {\n rowId: 508,\n versionNumber: 541,\n values: [\n 'FakeFirst',\n 'FakeLast',\n 'Fake institution',\n null,\n '[\"Extra-data\"]',\n ],\n },\n ],\n },\n },\n} satisfies QueryResultBundle\n\nexport default queryResultBundle\n"],"mappings":";;AAGA,IAAM,IAAoB;CACxB,cAAc;CACd,aAAa;EACX,cAAc;EACd,cAAc;GACZ,cAAc;GACd,SAAS;GACT,MAAM;GACN,SAAS;IACP;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;GACF;GACA,MAAM,CACJ;IACE,OAAO;IACP,eAAe;IACf,QAAQ;KACN;KACA;KACA;;KAEA;IACF;GACF,GACA;IACE,OAAO;IACP,eAAe;IACf,QAAQ;KACN;KACA;KACA;KACA;KACA;IACF;GACF,CACF;EACF;CACF;AACF"}
1
+ {"version":3,"file":"mockUserCardTableQueryResultBundle.js","names":[],"sources":["../../../src/mocks/query/mockUserCardTableQueryResultBundle.ts"],"sourcesContent":["import { QueryResultBundle } from '@sage-bionetworks/synapse-types'\nimport { MOCK_USER_ID } from '../user/mock_user_profile'\n\nconst queryResultBundle = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryResultBundle',\n columnModels: [\n { id: '124219', name: 'firstName', columnType: 'STRING' },\n { id: '124220', name: 'lastName', columnType: 'STRING' },\n { id: '124221', name: 'institution', columnType: 'STRING' },\n { id: '124214', name: 'ownerID', columnType: 'USERID' },\n { id: '151844', name: 'Program', columnType: 'STRING_LIST' },\n ],\n queryResult: {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryResult',\n queryResults: {\n concreteType: 'org.sagebionetworks.repo.model.table.RowSet',\n tableId: 'syn13897207',\n etag: '593afe35-0e97-436d-b7f3-ad00289b0ac0',\n headers: [\n {\n name: 'firstName',\n columnType: 'STRING',\n id: '124219',\n },\n {\n name: 'lastName',\n columnType: 'STRING',\n id: '124220',\n },\n {\n name: 'institution',\n columnType: 'STRING',\n id: '124221',\n },\n {\n name: 'ownerID',\n columnType: 'USERID',\n id: '124214',\n },\n {\n name: 'Program',\n columnType: 'STRING_LIST',\n id: '151844',\n },\n ],\n rows: [\n {\n rowId: 262,\n versionNumber: 406,\n values: [\n 'John',\n 'Doe',\n 'Sage Bionetworks',\n MOCK_USER_ID.toString(),\n '[\"My-program\"]',\n ],\n },\n {\n rowId: 508,\n versionNumber: 541,\n values: [\n 'FakeFirst',\n 'FakeLast',\n 'Fake institution',\n null,\n '[\"Extra-data\"]',\n ],\n },\n ],\n },\n },\n} satisfies QueryResultBundle\n\nexport default queryResultBundle\n"],"mappings":";;AAGA,IAAM,IAAoB;CACxB,cAAc;CACd,cAAc;EACZ;GAAE,IAAI;GAAU,MAAM;GAAa,YAAY;EAAS;EACxD;GAAE,IAAI;GAAU,MAAM;GAAY,YAAY;EAAS;EACvD;GAAE,IAAI;GAAU,MAAM;GAAe,YAAY;EAAS;EAC1D;GAAE,IAAI;GAAU,MAAM;GAAW,YAAY;EAAS;EACtD;GAAE,IAAI;GAAU,MAAM;GAAW,YAAY;EAAc;CAC7D;CACA,aAAa;EACX,cAAc;EACd,cAAc;GACZ,cAAc;GACd,SAAS;GACT,MAAM;GACN,SAAS;IACP;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;IACA;KACE,MAAM;KACN,YAAY;KACZ,IAAI;IACN;GACF;GACA,MAAM,CACJ;IACE,OAAO;IACP,eAAe;IACf,QAAQ;KACN;KACA;KACA;;KAEA;IACF;GACF,GACA;IACE,OAAO;IACP,eAAe;IACf,QAAQ;KACN;KACA;KACA;KACA;KACA;IACF;GACF,CACF;EACF;CACF;AACF"}
@@ -261,11 +261,21 @@
261
261
  flex-direction: row;
262
262
  align-items: flex-start;
263
263
  gap: var(--baseline-grid);
264
+
264
265
  @media (max-width: map.get(SRC.$breakpoints, 'medium')) {
265
266
  flex-direction: column;
266
267
  }
267
268
  }
268
269
 
270
+ .SRC-cardTitleArea--ctaRight {
271
+ align-items: center;
272
+ gap: 30px;
273
+ }
274
+
275
+ &.SRC-cardContent--ctaRight {
276
+ max-width: none;
277
+ }
278
+
269
279
  .SRC-cardTitleAreaDetails {
270
280
  display: flex;
271
281
  flex: 0 0 25%;
@@ -1 +1 @@
1
- .dsg-input{font-size:inherit;color:#353a3f}.dsg-cell-disabled input{color:#71767f}.row-deleted .dsg-cell,.row-deleted .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fff1f0}.row-created .dsg-cell,.row-created .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#f6ffed}.row-updated .dsg-cell,.row-updated .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fff7e6}.row-valid .dsg-cell-gutter,.row-valid .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#def0dd}.row-invalid .dsg-cell-gutter,.row-invalid .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fccfcc}.row-unknown .dsg-cell-gutter{background:#fdfeeb}.row-unknown .dsg-cell-gutter:after{content:"";z-index:1;border:2px solid #e6c200;border-top-color:#0000;border-radius:50%;width:16px;height:16px;margin:-8px 0 0 -8px;animation:1s linear infinite spin;display:block;position:absolute;top:50%;left:50%}.row-unknown .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fdfeeb}.dsg-cell.cell-invalid,.dsg-cell.cell-invalid.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fccfcc}.dsg-cell.cell-valid.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#def0dd}.dsg-cell.cell-unknown,.dsg-cell.cell-unknown.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fdfeeb}.dsg-cell.dsg-cell-sticky-left:not(.cell-invalid):not(.cell-valid):not(.cell-unknown):not(.dsg-cell-header):not(.dsg-cell-gutter){background:var(--dsg-cell-background-color,white)}@keyframes spin{to{transform:rotate(360deg)}}.dsg-cell-header.header-cell-required{color:#fff;background-color:#395979;font-weight:700}.multi-value-cell{min-height:40px}.multi-value-cell-large{min-height:80px}.dsg-expand-rows-rect{z-index:50;background:#4580e614;box-shadow:inset 0 0 0 1px #4580e6}.dsg-expand-rows-indicator{z-index:1001;overflow:visible}.dsg-expand-rows-indicator:before{content:"";cursor:crosshair;position:absolute;inset:-4px}.cell-selected{border:1px solid #1976d2}.dsg-container:not(:focus-within) .cell-selected{z-index:25;background-color:#1976d20d;border:1px solid #1976d2}.dsg-container{position:relative}.column-resize-handle{cursor:col-resize;-webkit-user-select:none;user-select:none;z-index:100;background-color:#0000;width:8px;transition:background-color .15s;position:absolute}.column-resize-handle:before{content:"";background:0 0;border-left:1px solid #0000;border-right:1px solid #0000;width:4px;height:16px;transition:border-color .15s;position:absolute;top:8px;left:50%;transform:translate(-50%)}.column-resize-handle:hover{background-color:#80808026}.column-resize-handle:hover:before{border-left-color:#80808080;border-right-color:#80808080}.column-resize-handle.is-resizing{background-color:#8080804d}.column-resize-handle.is-resizing:before{border-left-color:#646464cc;border-right-color:#646464cc}body.col-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.col-resizing .dsg-container,body.col-resizing .dsg-container *{cursor:col-resize}.dsg-cell.cell-changed--self:after{content:"";z-index:20;pointer-events:none;border-top:0 solid #0000;border-bottom:7px solid #0000;border-left:0 solid #0000;border-right:7px solid #52c41a;width:0;height:0;position:absolute;top:0;right:0}.dsg-cell.cell-changed--other-user:after{content:"";z-index:20;pointer-events:none;border-top:0 solid #0000;border-bottom:7px solid #0000;border-left:0 solid #0000;border-right:7px solid #1677ff;width:0;height:0;position:absolute;top:0;right:0}.dsg-cell.cell-remote-selected--color-0{box-shadow:inset 0 0 0 1px #1677ff66;background-color:#1677ff1f!important}.dsg-cell.cell-remote-selected--color-1{box-shadow:inset 0 0 0 1px #52c41a66;background-color:#52c41a1f!important}.dsg-cell.cell-remote-selected--color-2{box-shadow:inset 0 0 0 1px #fa8c1666;background-color:#fa8c161f!important}.dsg-cell.cell-remote-selected--color-3{box-shadow:inset 0 0 0 1px #eb2f9666;background-color:#eb2f961f!important}.dsg-cell.cell-remote-selected--color-4{box-shadow:inset 0 0 0 1px #13c2c266;background-color:#13c2c21f!important}.dsg-cell.cell-remote-selected--color-5{box-shadow:inset 0 0 0 1px #9254de66;background-color:#9254de1f!important}.dsg-cell.cell-remote-selected--color-6{box-shadow:inset 0 0 0 1px #f5222d66;background-color:#f5222d1f!important}.dsg-cell.cell-remote-selected--color-7{box-shadow:inset 0 0 0 1px #faad1466;background-color:#faad141f!important}
1
+ .dsg-input{font-size:inherit;color:#353a3f}.dsg-cell-disabled input{color:#71767f}.row-deleted .dsg-cell,.row-deleted .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fff1f0}.row-created .dsg-cell,.row-created .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#f6ffed}.row-updated .dsg-cell,.row-updated .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fff7e6}.row-valid .dsg-cell-gutter,.row-valid .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#def0dd}.row-invalid .dsg-cell-gutter,.row-invalid .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fccfcc}.row-unknown .dsg-cell-gutter{background:#fdfeeb}.row-unknown .dsg-cell-gutter:after{content:"";z-index:1;border:2px solid #e6c200;border-top-color:#0000;border-radius:50%;width:16px;height:16px;margin:-8px 0 0 -8px;animation:1s linear infinite spin;display:block;position:absolute;top:50%;left:50%}.row-unknown .dsg-cell.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fdfeeb}.dsg-cell.cell-invalid,.dsg-cell.cell-invalid.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fccfcc}.dsg-cell.cell-valid.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#def0dd}.dsg-cell.cell-unknown,.dsg-cell.cell-unknown.dsg-cell-sticky-left:not(.dsg-cell-header):not(.dsg-cell-gutter){background:#fdfeeb}.dsg-cell.dsg-cell-sticky-left:not(.cell-invalid):not(.cell-valid):not(.cell-unknown):not(.dsg-cell-header):not(.dsg-cell-gutter){background:var(--dsg-cell-background-color,white)}@keyframes spin{to{transform:rotate(360deg)}}.dsg-cell-header:not(.dsg-cell-gutter){color:#000;background-color:#dbdde1;font-weight:700}.dsg-cell-header.header-upsert-key{color:#fff;background-color:#395979;font-weight:700}.multi-value-cell{min-height:40px}.multi-value-cell-large{min-height:80px}.dsg-expand-rows-rect{z-index:50;background:#4580e614;box-shadow:inset 0 0 0 1px #4580e6}.dsg-expand-rows-indicator{z-index:1001;overflow:visible}.dsg-expand-rows-indicator:before{content:"";cursor:crosshair;position:absolute;inset:-4px}.cell-selected{border:1px solid #1976d2}.dsg-container:not(:focus-within) .cell-selected{z-index:25;background-color:#1976d20d;border:1px solid #1976d2}.dsg-container{position:relative}.column-resize-handle{cursor:col-resize;-webkit-user-select:none;user-select:none;z-index:100;background-color:#0000;width:8px;transition:background-color .15s;position:absolute}.column-resize-handle:before{content:"";background:0 0;border-left:1px solid #0000;border-right:1px solid #0000;width:4px;height:16px;transition:border-color .15s;position:absolute;top:8px;left:50%;transform:translate(-50%)}.column-resize-handle:hover{background-color:#80808026}.column-resize-handle:hover:before{border-left-color:#80808080;border-right-color:#80808080}.column-resize-handle.is-resizing{background-color:#8080804d}.column-resize-handle.is-resizing:before{border-left-color:#646464cc;border-right-color:#646464cc}body.col-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}body.col-resizing .dsg-container,body.col-resizing .dsg-container *{cursor:col-resize}.dsg-cell.cell-changed--self:after{content:"";z-index:20;pointer-events:none;border-top:0 solid #0000;border-bottom:7px solid #0000;border-left:0 solid #0000;border-right:7px solid #52c41a;width:0;height:0;position:absolute;top:0;right:0}.dsg-cell.cell-changed--other-user:after{content:"";z-index:20;pointer-events:none;border-top:0 solid #0000;border-bottom:7px solid #0000;border-left:0 solid #0000;border-right:7px solid #1677ff;width:0;height:0;position:absolute;top:0;right:0}.dsg-cell.cell-remote-selected--color-0{box-shadow:inset 0 0 0 1px #1677ff66;background-color:#1677ff1f!important}.dsg-cell.cell-remote-selected--color-1{box-shadow:inset 0 0 0 1px #52c41a66;background-color:#52c41a1f!important}.dsg-cell.cell-remote-selected--color-2{box-shadow:inset 0 0 0 1px #fa8c1666;background-color:#fa8c161f!important}.dsg-cell.cell-remote-selected--color-3{box-shadow:inset 0 0 0 1px #eb2f9666;background-color:#eb2f961f!important}.dsg-cell.cell-remote-selected--color-4{box-shadow:inset 0 0 0 1px #13c2c266;background-color:#13c2c21f!important}.dsg-cell.cell-remote-selected--color-5{box-shadow:inset 0 0 0 1px #9254de66;background-color:#9254de1f!important}.dsg-cell.cell-remote-selected--color-6{box-shadow:inset 0 0 0 1px #f5222d66;background-color:#f5222d1f!important}.dsg-cell.cell-remote-selected--color-7{box-shadow:inset 0 0 0 1px #faad1466;background-color:#faad141f!important}
@@ -154,7 +154,13 @@ $remote-selection-colors:
154
154
  }
155
155
 
156
156
  // Header & selection styles
157
- .dsg-cell-header.header-cell-required {
157
+ .dsg-cell-header:not(.dsg-cell-gutter) {
158
+ background-color: #dbdde1;
159
+ font-weight: bold;
160
+ color: black;
161
+ }
162
+
163
+ .dsg-cell-header.header-upsert-key {
158
164
  background-color: #395979;
159
165
  color: white;
160
166
  font-weight: bold;