@gen3/frontend 0.11.16 → 0.11.18

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 (95) hide show
  1. package/dist/cjs/index.js +454 -299
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/dts/components/Content/TextContent.d.ts.map +1 -1
  4. package/dist/dts/components/Content/TextContent.js +7 -8
  5. package/dist/dts/components/Content/TextContent.js.map +1 -1
  6. package/dist/dts/components/Layout/TexturedSidePanel.js +1 -1
  7. package/dist/dts/components/Layout/TexturedSidePanel.js.map +1 -1
  8. package/dist/dts/components/Protected/ProtectedContent.d.ts.map +1 -1
  9. package/dist/dts/components/Protected/ProtectedContent.js +11 -3
  10. package/dist/dts/components/Protected/ProtectedContent.js.map +1 -1
  11. package/dist/dts/components/Providers/Gen3Provider.d.ts +21 -21
  12. package/dist/dts/components/charts/utils.d.ts +16 -0
  13. package/dist/dts/components/charts/utils.d.ts.map +1 -1
  14. package/dist/dts/components/charts/utils.js +28 -1
  15. package/dist/dts/components/charts/utils.js.map +1 -1
  16. package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +6 -6
  17. package/dist/dts/features/CohortBuilder/CohortBuilder.d.ts +2 -1
  18. package/dist/dts/features/CohortBuilder/CohortBuilder.d.ts.map +1 -1
  19. package/dist/dts/features/CohortBuilder/CohortBuilder.js +5 -3
  20. package/dist/dts/features/CohortBuilder/CohortBuilder.js.map +1 -1
  21. package/dist/dts/features/CohortBuilder/CohortPanel.d.ts.map +1 -1
  22. package/dist/dts/features/CohortBuilder/CohortPanel.js +24 -2
  23. package/dist/dts/features/CohortBuilder/CohortPanel.js.map +1 -1
  24. package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.d.ts.map +1 -1
  25. package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.js +58 -26
  26. package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/QueryRowDetailsPanel.js.map +1 -1
  27. package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/types.d.ts +3 -0
  28. package/dist/dts/features/CohortBuilder/ExplorerTable/ExploreTableDetails/types.d.ts.map +1 -1
  29. package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.d.ts.map +1 -1
  30. package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.js +39 -26
  31. package/dist/dts/features/CohortBuilder/ExplorerTable/ExplorerTable.js.map +1 -1
  32. package/dist/dts/features/CohortBuilder/index.d.ts +1 -1
  33. package/dist/dts/features/CohortBuilder/index.d.ts.map +1 -1
  34. package/dist/dts/features/CohortBuilder/index.js +1 -1
  35. package/dist/dts/features/CohortBuilder/index.js.map +1 -1
  36. package/dist/dts/features/CohortBuilder/types.d.ts +1 -0
  37. package/dist/dts/features/CohortBuilder/types.d.ts.map +1 -1
  38. package/dist/dts/features/CohortBuilder/types.js.map +1 -1
  39. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.d.ts +1 -1
  40. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.d.ts.map +1 -1
  41. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js +21 -14
  42. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManager.js.map +1 -1
  43. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.d.ts.map +1 -1
  44. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.js +1 -0
  45. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerMiddleware.js.map +1 -1
  46. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.d.ts +11 -10
  47. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.d.ts.map +1 -1
  48. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.js +9 -5
  49. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSelectors.js.map +1 -1
  50. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.d.ts +1 -0
  51. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.d.ts.map +1 -1
  52. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.js +21 -6
  53. package/dist/dts/features/CohortDiscovery/CohortManagment/CohortManagerSlice.js.map +1 -1
  54. package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.d.ts.map +1 -1
  55. package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js +1 -1
  56. package/dist/dts/features/CohortDiscovery/SavedCohorts/SavedCohortsTable.js.map +1 -1
  57. package/dist/dts/features/CohortDiscovery/appApi.js +1 -1
  58. package/dist/dts/features/CohortDiscovery/appApi.js.map +1 -1
  59. package/dist/dts/features/CohortDiscovery/constants.d.ts +2 -0
  60. package/dist/dts/features/CohortDiscovery/constants.d.ts.map +1 -1
  61. package/dist/dts/features/CohortDiscovery/constants.js +11 -0
  62. package/dist/dts/features/CohortDiscovery/constants.js.map +1 -1
  63. package/dist/dts/features/DataLibrary/tables/SelectedItemsTable.d.ts.map +1 -1
  64. package/dist/dts/features/DataLibrary/tables/SelectedItemsTable.js +4 -2
  65. package/dist/dts/features/DataLibrary/tables/SelectedItemsTable.js.map +1 -1
  66. package/dist/dts/features/Dictionary/metadata/MetadataDictionary.d.ts.map +1 -1
  67. package/dist/dts/features/Dictionary/metadata/MetadataDictionary.js +2 -1
  68. package/dist/dts/features/Dictionary/metadata/MetadataDictionary.js.map +1 -1
  69. package/dist/dts/features/Dictionary/metadata/types.d.ts +1 -0
  70. package/dist/dts/features/Dictionary/metadata/types.d.ts.map +1 -1
  71. package/dist/dts/features/Discovery/Discovery.d.ts.map +1 -1
  72. package/dist/dts/features/Discovery/Discovery.js +3 -2
  73. package/dist/dts/features/Discovery/Discovery.js.map +1 -1
  74. package/dist/dts/features/Discovery/types.d.ts +1 -0
  75. package/dist/dts/features/Discovery/types.d.ts.map +1 -1
  76. package/dist/dts/features/Discovery/types.js.map +1 -1
  77. package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.d.ts.map +1 -1
  78. package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js +28 -1
  79. package/dist/dts/features/StaticNotebook/StaticNotebookIFrame.js.map +1 -1
  80. package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.d.ts.map +1 -1
  81. package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js +7 -0
  82. package/dist/dts/features/StaticNotebook/api/staticNotebookAPI.js.map +1 -1
  83. package/dist/dts/lib/common/staticProps.d.ts.map +1 -1
  84. package/dist/dts/lib/common/staticProps.js +11 -23
  85. package/dist/dts/lib/common/staticProps.js.map +1 -1
  86. package/dist/dts/lib/content/filesystem.js +1 -1
  87. package/dist/dts/lib/content/filesystem.js.map +1 -1
  88. package/dist/dts/pages/Explorer/Explorer.d.ts.map +1 -1
  89. package/dist/dts/pages/Explorer/Explorer.js +4 -1
  90. package/dist/dts/pages/Explorer/Explorer.js.map +1 -1
  91. package/dist/esm/index.js +454 -300
  92. package/dist/esm/index.js.map +1 -1
  93. package/dist/index.d.ts +220 -200
  94. package/dist/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +3 -3
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { createContext, useState, useMemo, useEffect, useCallback, useContext, useRef, createElement, forwardRef, useReducer } from 'react';
4
- import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, isOperationWithField, selectShouldShareFilters, selectSharedFilters, updateCohortFilter as updateCohortFilter$1, selectIndexedFilterByName, isUnion, isOperatorWithFieldAndArrayOfOperands, extractEnumFilterValue, removeCohortFilter as removeCohortFilter$1, trimFirstFieldNameToTitle, selectAllCohortFiltersCollapsed, Accessibility, toggleCohortBuilderAllFilters, setShouldShareFilters, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, DataLibraryStoreMode, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, setCohortFilter as setCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, selectAvailableCohorts, selectCurrentCohortId as selectCurrentCohortId$1, selectCohortFilters, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, setActiveCohort, setCohortFilterCombineMode, selectCohortFilterCombineMode, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, selectCurrentCohortName as selectCurrentCohortName$1, useGeneralGQLQuery, selectIndexFilters, useGetRawDataAndTotalCountsQuery, isJSONValue, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, usePrevious, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_API, GEN3_COMMONS_NAME, getTimestamp, createAppStore, getRemoteSupportServiceRegistry, isHttpStatusError, MissingServiceConfigurationError, useLazyGetAggsNoFilterSelfQuery, useCreateRequestMutation, buildGetAggregationQuery, processHistogramResponse, roundHistogramResponse, selectCSRFToken, useUserRequestQuery, getGen3AppId, createGen3AppWithOwnStore, createAppApiForRTKQ, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, getFederatedLoginStatus, queryMultipleMDSRecords, GEN3_MANIFEST_API, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery } from '@gen3/core';
4
+ import { useUserAuth, useCoreSelector, selectUserDetails, useGetAuthzMappingsQuery, fetchFence, isFetchError, WorkspaceStatus, useGetWorkspaceStatusQuery, useGetWorkspacePayModelsQuery, useTerminateWorkspaceMutation, selectRequestedWorkspaceStatus, selectRequestedWorkspaceStatusTimestamp, useCoreDispatch, setActiveWorkspaceStatus, RequestedWorkspaceStatus, setRequestedWorkspaceStatus, isTimeGreaterThan, useGetCSRFQuery, useLazyFetchUserDetailsQuery, selectUserAuthStatus, GEN3_REDIRECT_URL, GEN3_FENCE_API, showModal, Modals, isAuthenticated, useGetLoginProvidersQuery, hideModal, selectCurrentModal, fieldNameToTitle, isOperationWithField, extractEnumFilterValue, selectIndexedFilterByName, selectShouldShareFilters, selectSharedFilters, updateCohortFilter as updateCohortFilter$1, isOperatorWithFieldAndArrayOfOperands, isUnion, removeCohortFilter as removeCohortFilter$1, trimFirstFieldNameToTitle, selectAllCohortFiltersCollapsed, Accessibility, toggleCohortBuilderAllFilters, setShouldShareFilters, useIsUserLoggedIn, GEN3_DOMAIN, useDataLibrary, DataLibraryStoreMode, buildListItemsGroupedByDataset, extractFileDatasetsInRecords, useGetMDSQuery, selectAuthzMappingData, useGetAggMDSQuery, useAskQuestionMutation, useGetIndexAggMDSQuery, useGetTagsQuery, setCohortFilter as setCohortFilter$1, clearCohortFilters as clearCohortFilters$1, handleOperation, selectAvailableCohorts, selectCurrentCohortId as selectCurrentCohortId$1, selectCohortFilters, selectCurrentCohortModified, selectCurrentCohortSaved, setCohortIndexFilters, setActiveCohort, toggleCohortBuilderCategoryFilter, selectCohortFilterExpanded, setCohortFilterCombineMode, selectCohortFilterCombineMode, selectCurrentCohortName as selectCurrentCohortName$1, useGetRawDataAndTotalCountsQuery, selectIndexFilters, isJSONValue, downloadFromGuppyToBlob, downloadJSONDataFromGuppy, useGetAggsQuery, useGetAggsNoFilterSelfQuery, isIntersection, useGetCountsQuery, setSharedFilters, usePrevious, selectHeadersWithCSRFToken, GEN3_GUPPY_API, useLaunchWorkspaceMutation, selectActiveWorkspaceStatus, isFetchBaseQueryError, setActiveWorkspace, getCurrentTimestamp, selectWorkspaceStatusFromService, selectActiveWorkspaceId, useGetWorkspaceOptionsQuery, GEN3_WORKSPACE_API, useGetExternalLoginsQuery, useSetCurrentPayModelMutation, PodStatus, PodConditionType, isWorkspaceRunningOrStopping, GEN3_API, GEN3_COMMONS_NAME, getTimestamp, createAppStore, getRemoteSupportServiceRegistry, isHttpStatusError, MissingServiceConfigurationError, useLazyGetAggsNoFilterSelfQuery, useCreateRequestMutation, buildGetAggregationQuery, processHistogramResponse, roundHistogramResponse, selectCSRFToken, useUserRequestQuery, getGen3AppId, createGen3AppWithOwnStore, useGeneralGQLQuery, createAppApiForRTKQ, useGetDictionaryQuery, useGetMetadataByIdQuery, createGen3App, CoreProvider, fetchJSONDataFromURL, HttpMethod, groupSharedFields, useGetCredentialsQuery, useRemoveCredentialMutation, useAddNewCredentialMutation, useGetProjectsDetailsQuery, useGetSubmissionsQuery, isCohortItem, isFileItem, fetchFencePresignedURL, HTTPError, getFederatedLoginStatus, queryMultipleMDSRecords, GEN3_MANIFEST_API, extractIndexFromDataLibraryCohort, isFilterSet, getNumberOfItemsInDatalist, isAdditionalDataItem, useLazyGetCrosswalkDataQuery } from '@gen3/core';
5
5
  import { LoadingOverlay, Card, Group, Avatar, Text, Checkbox, Stack, Center, Loader, Tooltip, UnstyledButton, ThemeIcon, Box, Select, Button, Divider, Textarea, FileButton, Anchor, Modal, Grid, Table, ColorSwatch, useMantineTheme, Accordion, Switch, SegmentedControl as SegmentedControl$1, ActionIcon, Badge, TextInput, NumberInput, RangeSlider, MultiSelect, Tabs, SimpleGrid, Highlight, MantineProvider, Flex, Menu, Alert, Drawer, CopyButton, factory, useProps, getStyleObject, Paper, useCombobox, Combobox, ScrollArea, Autocomplete, Title, Transition, rem, Stepper, Spoiler, Image as Image$1, NavLink, List, createTheme, Pagination, FileInput, CloseButton } from '@mantine/core';
6
6
  import { useDeepCompareEffect, useDeepCompareMemo, useDeepCompareCallback } from 'use-deep-compare';
7
7
  import { useRouter } from 'next/router';
@@ -1285,11 +1285,11 @@ const LoginProvidersPanel = ({ handleLoginSelected })=>{
1285
1285
 
1286
1286
  const TexturedSidePanel = ({ url })=>{
1287
1287
  return /*#__PURE__*/ jsx("div", {
1288
- "aria-label": 'background image',
1288
+ "aria-hidden": "true",
1289
1289
  style: {
1290
1290
  backgroundImage: `url(${url})`
1291
1291
  },
1292
- className: "flex h-screen w-full bg-left bg-repeat-y last:-scale-x-100"
1292
+ className: "bg-contain flex h-full w-full bg-repeat-y last:-scale-x-100"
1293
1293
  });
1294
1294
  };
1295
1295
 
@@ -1459,8 +1459,7 @@ function hashCode(str) {
1459
1459
  className: className,
1460
1460
  dangerouslySetInnerHTML: {
1461
1461
  __html: textString
1462
- },
1463
- "aria-label": "HTML content"
1462
+ }
1464
1463
  });
1465
1464
  }
1466
1465
  case "textArray":
@@ -1468,22 +1467,29 @@ function hashCode(str) {
1468
1467
  const textArray = !Array.isArray(text) ? [
1469
1468
  text
1470
1469
  ] : text;
1471
- return /*#__PURE__*/ jsx("div", {
1470
+ return /*#__PURE__*/ jsxs("div", {
1472
1471
  className: className,
1473
1472
  role: "list",
1474
- "aria-label": "Text array",
1475
- children: textArray.map((item)=>/*#__PURE__*/ jsx("p", {
1476
- className: "my-2",
1477
- role: "listitem",
1478
- children: item
1479
- }, hashCode(item)))
1473
+ children: [
1474
+ /*#__PURE__*/ jsxs("style", {
1475
+ children: [
1476
+ "@source inline(",
1477
+ className,
1478
+ ");"
1479
+ ]
1480
+ }),
1481
+ textArray.map((item)=>/*#__PURE__*/ jsx("p", {
1482
+ className: "my-2",
1483
+ role: "listitem",
1484
+ children: item
1485
+ }, hashCode(item)))
1486
+ ]
1480
1487
  });
1481
1488
  }
1482
1489
  case "markdown":
1483
1490
  {
1484
1491
  const textString = Array.isArray(text) ? text.join('') : text;
1485
1492
  return /*#__PURE__*/ jsx("div", {
1486
- "aria-label": "Markdown content",
1487
1493
  children: /*#__PURE__*/ jsx(Markdown, {
1488
1494
  remarkPlugins: [
1489
1495
  remarkGfm
@@ -1527,21 +1533,29 @@ function hashCode(str) {
1527
1533
  const DEFAULT_STYLE = 'inline text-base-contrast-max font-medium margin-block-start-1 margin-block-end-1';
1528
1534
  const mergedClassname = className ? twMerge(DEFAULT_STYLE, className) : DEFAULT_STYLE;
1529
1535
  const textString = Array.isArray(text) ? text.join('') : text;
1530
- return /*#__PURE__*/ jsx("div", {
1536
+ return /*#__PURE__*/ jsxs("div", {
1531
1537
  className: mergedClassname,
1532
- children: /*#__PURE__*/ jsxs("span", {
1533
- children: [
1534
- textString,
1535
- email && /*#__PURE__*/ jsx(Anchor, {
1536
- classNames: {
1537
- root: mergedClassname
1538
- },
1539
- href: `mailto:${email}`,
1540
- "aria-label": `Send an email to ${email}`,
1541
- children: ` ${email}.`
1542
- })
1543
- ]
1544
- })
1538
+ children: [
1539
+ /*#__PURE__*/ jsxs("style", {
1540
+ children: [
1541
+ "@source inline(",
1542
+ className,
1543
+ ");"
1544
+ ]
1545
+ }),
1546
+ /*#__PURE__*/ jsxs("span", {
1547
+ children: [
1548
+ textString,
1549
+ email && /*#__PURE__*/ jsx(Anchor, {
1550
+ classNames: {
1551
+ root: mergedClassname
1552
+ },
1553
+ href: `mailto:${email}`,
1554
+ children: ` ${email}.`
1555
+ })
1556
+ ]
1557
+ })
1558
+ ]
1545
1559
  });
1546
1560
  }
1547
1561
  case "textWithLink":
@@ -1552,35 +1566,50 @@ function hashCode(str) {
1552
1566
  if (!link) {
1553
1567
  return /*#__PURE__*/ jsx("div", {
1554
1568
  className: mergedClassname,
1555
- "aria-label": "No link defined",
1556
1569
  children: "Link is not defined."
1557
1570
  });
1558
1571
  }
1559
- return /*#__PURE__*/ jsx("div", {
1572
+ return /*#__PURE__*/ jsxs("div", {
1560
1573
  className: mergedClassname,
1561
- children: /*#__PURE__*/ jsxs("span", {
1562
- children: [
1563
- textString,
1564
- link && /*#__PURE__*/ jsx(Anchor, {
1565
- classNames: {
1566
- root: mergedClassname
1567
- },
1568
- href: link,
1569
- "aria-label": `Visit the link: ${linkText || link}`,
1570
- children: ` ${linkText ?? link}.`
1571
- })
1572
- ]
1573
- })
1574
+ children: [
1575
+ /*#__PURE__*/ jsxs("style", {
1576
+ children: [
1577
+ "@source inline(",
1578
+ className,
1579
+ ");"
1580
+ ]
1581
+ }),
1582
+ /*#__PURE__*/ jsxs("span", {
1583
+ children: [
1584
+ textString,
1585
+ link && /*#__PURE__*/ jsx(Anchor, {
1586
+ classNames: {
1587
+ root: mergedClassname
1588
+ },
1589
+ href: link,
1590
+ children: ` ${linkText ?? link}.`
1591
+ })
1592
+ ]
1593
+ })
1594
+ ]
1574
1595
  });
1575
1596
  }
1576
1597
  case "text":
1577
1598
  default:
1578
- return /*#__PURE__*/ jsx("div", {
1599
+ return /*#__PURE__*/ jsxs("div", {
1579
1600
  className: className,
1580
- "aria-label": "Plain text content",
1581
- children: /*#__PURE__*/ jsx("p", {
1582
- children: text.toString()
1583
- })
1601
+ children: [
1602
+ /*#__PURE__*/ jsxs("style", {
1603
+ children: [
1604
+ "@source inline(",
1605
+ className,
1606
+ ");"
1607
+ ]
1608
+ }),
1609
+ /*#__PURE__*/ jsx("p", {
1610
+ children: text.toString()
1611
+ })
1612
+ ]
1584
1613
  });
1585
1614
  }
1586
1615
  };
@@ -2074,7 +2103,6 @@ const Gen3ModalsProvider = ({ config, children })=>{
2074
2103
  });
2075
2104
  };
2076
2105
 
2077
- // import { BinGuru } from 'binguru';
2078
2106
  const capitalize = (original)=>{
2079
2107
  if (original === undefined) {
2080
2108
  throw new Error('capitalize: original is undefined');
@@ -2113,6 +2141,30 @@ const processRangeKeyLabel = (key)=>{
2113
2141
  spans = spans.concat(new Array(numLastRow).fill(Math.floor(12 / numLastRow)));
2114
2142
  return spans;
2115
2143
  };
2144
+ /**
2145
+ * Filters the keys from the provided aggregation data based on a given list of keys to remove.
2146
+ *
2147
+ * This function processes an `AggregationsData` object by iterating through its properties.
2148
+ * It removes elements from the data that match any of the keys specified in the `keysToRemove` array.
2149
+ * The filtering applies specifically to elements with a valid `key` property of type == string.
2150
+ * If the `key` is empty or matches one of the `keysToRemove`, it is excluded from the resulting object.
2151
+ *
2152
+ * @param {AggregationsData} data - The aggregation data object to filter. Expected to have properties that
2153
+ * are arrays of items containing a `key` property.
2154
+ * @param {Array<string>} keysToRemove - Array of string keys that should be removed from the aggregation data.
2155
+ * @returns {AggregationsData} A new `AggregationsData` object with filtered entries,
2156
+ * omitting the specified keys.
2157
+ */ const filterAggregationsDataKeys = (data, keysToRemove)=>{
2158
+ if (!data || typeof data !== 'object') {
2159
+ return {};
2160
+ }
2161
+ return Object.entries(data).reduce((acc, [key, chartData])=>{
2162
+ if (Array.isArray(chartData)) {
2163
+ acc[key] = chartData.filter((x)=>x && typeof x.key === 'string' && !keysToRemove.includes(x.key));
2164
+ }
2165
+ return acc;
2166
+ }, {});
2167
+ };
2116
2168
 
2117
2169
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2118
2170
  function DefaultItemRenderer(_props) {
@@ -5614,8 +5666,19 @@ const ProtectedContent = ({ children, referer })=>{
5614
5666
  onUnauthenticated();
5615
5667
  }, 2000);
5616
5668
  };
5669
+ const [stableStatus, setStableStatus] = useState();
5617
5670
  const { status, pending } = useSession(true, delayRedirect);
5618
- if (status !== 'issued') {
5671
+ useEffect(()=>{
5672
+ if (!pending && stableStatus !== status) {
5673
+ // only update stableStatus if session is not pending
5674
+ // this prevents flickering of the status
5675
+ setStableStatus(status);
5676
+ }
5677
+ }, [
5678
+ status,
5679
+ pending
5680
+ ]);
5681
+ if (stableStatus !== 'issued') {
5619
5682
  // not logged in
5620
5683
  if (pending) return /*#__PURE__*/ jsx("div", {
5621
5684
  className: "flex justify-center w-full mt-10",
@@ -11290,160 +11353,6 @@ const CohortManager$1 = ({ index })=>{
11290
11353
  });
11291
11354
  };
11292
11355
 
11293
- function isQueryResponse(obj) {
11294
- // Considering that the data property can be optional
11295
- return typeof obj === 'object' && (obj.data === undefined || typeof obj.data === 'object');
11296
- }
11297
- const ExtractData = (data, index)=>{
11298
- if (data === undefined || data === null) return {};
11299
- if (data.data === undefined || data.data === null) return {};
11300
- return Array.isArray(data.data[index]) && data.data[index].length > 0 ? data.data[index][0] : {};
11301
- };
11302
- const QueryRowDetailsPanel = ({ id, index, tableConfig, accessibility })=>{
11303
- //const [queryGuppy, { data, isLoading, isError }] = useLazyGeneralGQLQuery();
11304
- const idField = tableConfig.detailsConfig?.idField;
11305
- const { data, isLoading, isError } = useGeneralGQLQuery({
11306
- query: `query ($filter: JSON) {
11307
- ${index} (filter: $filter, accessibility: all) {
11308
- ${tableConfig.fields}
11309
- }
11310
- }`,
11311
- variables: {
11312
- filter: {
11313
- AND: [
11314
- {
11315
- IN: {
11316
- [idField ?? 0]: [
11317
- id
11318
- ]
11319
- }
11320
- }
11321
- ]
11322
- }
11323
- }
11324
- });
11325
- if (!idField) {
11326
- return /*#__PURE__*/ jsx(ErrorCard, {
11327
- message: 'idField not configure in Tables Details Config'
11328
- });
11329
- }
11330
- if (isError) {
11331
- return /*#__PURE__*/ jsx(ErrorCard, {
11332
- message: 'Error occurred while fetching data'
11333
- });
11334
- }
11335
- const queryData = isQueryResponse(data) ? ExtractData(data, index) : {};
11336
- const rows = Object.entries(queryData).map(([field, value])=>/*#__PURE__*/ jsxs("tr", {
11337
- children: [
11338
- /*#__PURE__*/ jsx("td", {
11339
- children: /*#__PURE__*/ jsx(Text, {
11340
- fw: "bold",
11341
- children: field
11342
- })
11343
- }),
11344
- /*#__PURE__*/ jsx("td", {
11345
- children: /*#__PURE__*/ jsx(Text, {
11346
- children: value ? value : ''
11347
- })
11348
- })
11349
- ]
11350
- }, field));
11351
- return /*#__PURE__*/ jsxs(Stack, {
11352
- children: [
11353
- /*#__PURE__*/ jsx(LoadingOverlay, {
11354
- visible: isLoading
11355
- }),
11356
- /*#__PURE__*/ jsxs(Text, {
11357
- c: "primary.4",
11358
- children: [
11359
- "Results for ",
11360
- id
11361
- ]
11362
- }),
11363
- /*#__PURE__*/ jsxs(Table, {
11364
- withTableBorder: true,
11365
- withColumnBorders: true,
11366
- children: [
11367
- /*#__PURE__*/ jsx("thead", {
11368
- children: /*#__PURE__*/ jsxs("tr", {
11369
- children: [
11370
- /*#__PURE__*/ jsx("th", {
11371
- children: "Field"
11372
- }),
11373
- /*#__PURE__*/ jsx("th", {
11374
- children: "Value"
11375
- })
11376
- ]
11377
- })
11378
- }),
11379
- /*#__PURE__*/ jsx("tbody", {
11380
- children: rows
11381
- })
11382
- ]
11383
- })
11384
- ]
11385
- });
11386
- };
11387
-
11388
- const RowTableDetailsPanel = ({ row })=>{
11389
- const rowData = row?.original ?? {};
11390
- const rows = Object.entries(rowData).map(([field, value])=>/*#__PURE__*/ jsxs(Table.Tr, {
11391
- children: [
11392
- /*#__PURE__*/ jsx(Table.Td, {
11393
- children: /*#__PURE__*/ jsx(Text, {
11394
- fw: "bold",
11395
- children: field
11396
- })
11397
- }),
11398
- /*#__PURE__*/ jsx(Table.Td, {
11399
- children: /*#__PURE__*/ jsx(Text, {
11400
- children: value ? value : ''
11401
- })
11402
- })
11403
- ]
11404
- }, field));
11405
- return /*#__PURE__*/ jsxs(Table, {
11406
- striped: true,
11407
- highlightOnHover: true,
11408
- withTableBorder: true,
11409
- withColumnBorders: true,
11410
- children: [
11411
- /*#__PURE__*/ jsx(Table.Thead, {
11412
- children: /*#__PURE__*/ jsxs(Table.Tr, {
11413
- children: [
11414
- /*#__PURE__*/ jsx(Table.Th, {
11415
- children: "Field"
11416
- }),
11417
- /*#__PURE__*/ jsx(Table.Th, {
11418
- children: "Value"
11419
- })
11420
- ]
11421
- })
11422
- }),
11423
- /*#__PURE__*/ jsx(Table.Tbody, {
11424
- children: rows
11425
- })
11426
- ]
11427
- });
11428
- };
11429
-
11430
- let instance$2;
11431
- const DefaultRendererCatalog$1 = {
11432
- tableDetails: {
11433
- default: RowTableDetailsPanel,
11434
- queryRowDetails: QueryRowDetailsPanel
11435
- }
11436
- };
11437
- const ExplorerTableDetailsPanelFactory = ()=>{
11438
- if (!instance$2) {
11439
- instance$2 = new RenderFactoryTypedInstance();
11440
- }
11441
- return instance$2;
11442
- };
11443
- const registerCohortBuilderDefaultPreviewRenderers = ()=>{
11444
- ExplorerTableDetailsPanelFactory().registerRendererCatalog(DefaultRendererCatalog$1);
11445
- };
11446
-
11447
11356
  const DEFAULT_PROPS = {
11448
11357
  body: 'bg-base-max',
11449
11358
  header: '!bg-primary !pb-9 !mb-9',
@@ -11586,12 +11495,12 @@ const LinkCellFunctionCatalog = {
11586
11495
  default: RenderLinkCell,
11587
11496
  linkWithValueMap: RenderLinkCellUsingValueMap
11588
11497
  };
11589
- let instance$1;
11498
+ let instance$2;
11590
11499
  const ExplorerTableCellRendererFactory = ()=>{
11591
- if (!instance$1) {
11592
- instance$1 = new RenderFactoryTypedInstance();
11500
+ if (!instance$2) {
11501
+ instance$2 = new RenderFactoryTypedInstance();
11593
11502
  }
11594
- return instance$1;
11503
+ return instance$2;
11595
11504
  };
11596
11505
  // register default cell renderers
11597
11506
  const registerExplorerDefaultCellRenderers = ()=>{
@@ -11858,6 +11767,91 @@ const SubtableStack = ({ subTables, data })=>{
11858
11767
  });
11859
11768
  };
11860
11769
 
11770
+ function isQueryResponse(obj) {
11771
+ // Considering that the data property can be optional
11772
+ return typeof obj === 'object' && (obj.data === undefined || typeof obj.data === 'object');
11773
+ }
11774
+ const ExtractData = (data, index, path)=>{
11775
+ if (data === undefined || data === null) return {};
11776
+ if (data.data === undefined || data.data === null) return {};
11777
+ if (!isArray(data.data[index])) return {};
11778
+ let rowData = data.data[index][0];
11779
+ if (path) {
11780
+ const tmp = JSONPath({
11781
+ path: path,
11782
+ json: data.data[index][0]
11783
+ });
11784
+ if (!isArray(tmp)) {
11785
+ return {};
11786
+ }
11787
+ if (tmp.length > 0) {
11788
+ rowData = tmp[0];
11789
+ }
11790
+ }
11791
+ return rowData;
11792
+ };
11793
+ const QueryRowDetailsPanel = ({ id, index, tableConfig, accessibility })=>{
11794
+ //const [queryGuppy, { data, isLoading, isError }] = useLazyGeneralGQLQuery();
11795
+ const idField = tableConfig.detailsConfig?.idField;
11796
+ const simpleDetailsView = tableConfig.detailsConfig?.simpleDetailsView;
11797
+ const { setStudyDetails } = useStudyContext();
11798
+ const [opened, { open, close }] = useDisclosure(false);
11799
+ const { data, isError, isFetching } = useGetRawDataAndTotalCountsQuery({
11800
+ type: index,
11801
+ fields: tableConfig.fields,
11802
+ filters: {
11803
+ mode: 'and',
11804
+ root: {
11805
+ [idField]: buildNested(idField, {
11806
+ operator: '=',
11807
+ field: idField,
11808
+ operand: id
11809
+ })
11810
+ }
11811
+ },
11812
+ offset: 0,
11813
+ size: 1,
11814
+ accessibility: accessibility
11815
+ }, {
11816
+ skip: !idField || !id
11817
+ });
11818
+ const queryData = useMemo(()=>isQueryResponse(data) ? ExtractData(data, index, tableConfig?.detailsConfig?.dataPath) : {}, [
11819
+ data,
11820
+ index,
11821
+ tableConfig?.detailsConfig?.dataPath
11822
+ ]);
11823
+ useEffect(()=>{
11824
+ setStudyDetails(queryData);
11825
+ }, [
11826
+ queryData,
11827
+ setStudyDetails
11828
+ ]);
11829
+ if (!idField) {
11830
+ return /*#__PURE__*/ jsx(ErrorCard, {
11831
+ message: 'idField not configure in Tables Details Config'
11832
+ });
11833
+ }
11834
+ if (isError) {
11835
+ return /*#__PURE__*/ jsx(ErrorCard, {
11836
+ message: 'Error occurred while fetching data'
11837
+ });
11838
+ }
11839
+ // Inital attempt at using Study Details component
11840
+ return /*#__PURE__*/ jsxs(Stack, {
11841
+ children: [
11842
+ /*#__PURE__*/ jsx(LoadingOverlay, {
11843
+ visible: isFetching
11844
+ }),
11845
+ simpleDetailsView ? /*#__PURE__*/ jsx(SinglePageStudyDetailsPanel, {
11846
+ data: queryData ?? {},
11847
+ studyConfig: simpleDetailsView
11848
+ }) : /*#__PURE__*/ jsx("div", {
11849
+ children: "Study Details Panel not configured"
11850
+ })
11851
+ ]
11852
+ });
11853
+ };
11854
+
11861
11855
  const DEFAULT_PAGE_LIMIT_LABEL = 'Rows per Page (Limited to 10,0000):';
11862
11856
  const DEFAULT_PAGE_LIMIT = 10000;
11863
11857
  /**
@@ -11876,9 +11870,15 @@ const DEFAULT_PAGE_LIMIT = 10000;
11876
11870
  const [sorting, setSorting] = useState([]);
11877
11871
  const [rowSelection, setRowSelection] = useState({});
11878
11872
  const [selectedRow, setSelectedRow] = useState(undefined);
11879
- const DetailsPanel = useMemo(()=>ExplorerTableDetailsPanelFactory().getRenderer('tableDetails', tableConfig?.detailsConfig?.panel ?? 'default'), [
11880
- tableConfig?.detailsConfig?.panel
11881
- ]);
11873
+ // const DetailsPanel = useMemo(
11874
+ // () =>
11875
+ // ExplorerTableDetailsPanelFactory().getRenderer(
11876
+ // 'tableDetails',
11877
+ // tableConfig?.detailsConfig?.panel ?? 'default',
11878
+ // ),
11879
+ // [tableConfig?.detailsConfig?.panel],
11880
+ // );
11881
+ const DetailsPanel = useMemo(()=>QueryRowDetailsPanel, []);
11882
11882
  const tableColumns = useDeepCompareMemo(()=>{
11883
11883
  return createTableColumns(tableConfig);
11884
11884
  }, [
@@ -11891,7 +11891,18 @@ const DEFAULT_PAGE_LIMIT = 10000;
11891
11891
  const getRowId = useCallback((tableConfig)=>{
11892
11892
  const { detailsConfig } = tableConfig || {};
11893
11893
  const idField = detailsConfig?.idField;
11894
- return (originalRow)=>idField && Object.keys(originalRow).includes(idField) ? originalRow[idField] : undefined;
11894
+ if (!idField) return undefined;
11895
+ return (originalRow)=>{
11896
+ const id = JSONPath({
11897
+ json: originalRow,
11898
+ path: idField
11899
+ });
11900
+ if (id.length > 0) {
11901
+ return id[0];
11902
+ } else {
11903
+ return undefined;
11904
+ }
11905
+ };
11895
11906
  }, []);
11896
11907
  const cohortFilters = useCoreSelector((state)=>selectIndexFilters(state, index));
11897
11908
  const { data, isLoading, isError, isFetching } = useGetRawDataAndTotalCountsQuery({
@@ -12020,29 +12031,31 @@ const DEFAULT_PAGE_LIMIT = 10000;
12020
12031
  } else return null;
12021
12032
  } : undefined
12022
12033
  });
12023
- return /*#__PURE__*/ jsxs(React__default.Fragment, {
12024
- children: [
12025
- Object.keys(rowSelection).length > 0 ? /*#__PURE__*/ jsx(DetailsComponent, {
12026
- title: tableConfig?.detailsConfig?.title,
12027
- id: Object.keys(rowSelection).length > 0 ? Object.keys(rowSelection).at(0) : undefined,
12028
- row: selectedRow,
12029
- onClose: ()=>setRowSelection({}),
12030
- panel: DetailsPanel,
12031
- classNames: tableConfig?.detailsConfig?.classNames,
12032
- panelProps: {
12033
- index,
12034
- tableConfig,
12035
- ...tableConfig?.detailsConfig?.params ?? {},
12036
- accessibility
12037
- }
12038
- }) : null,
12039
- /*#__PURE__*/ jsx("div", {
12040
- className: "inline-block overflow-x-scroll",
12041
- children: /*#__PURE__*/ jsx(MantineReactTable, {
12042
- table: table
12034
+ return /*#__PURE__*/ jsx(React__default.Fragment, {
12035
+ children: /*#__PURE__*/ jsxs(StudyProvider, {
12036
+ children: [
12037
+ Object.keys(rowSelection).length > 0 ? /*#__PURE__*/ jsx(DetailsComponent, {
12038
+ title: tableConfig?.detailsConfig?.title,
12039
+ id: Object.keys(rowSelection).length > 0 ? Object.keys(rowSelection).at(0) : undefined,
12040
+ row: selectedRow,
12041
+ onClose: ()=>setRowSelection({}),
12042
+ panel: DetailsPanel,
12043
+ classNames: tableConfig?.detailsConfig?.classNames,
12044
+ panelProps: {
12045
+ index,
12046
+ tableConfig,
12047
+ ...tableConfig?.detailsConfig?.params ?? {},
12048
+ accessibility
12049
+ }
12050
+ }) : null,
12051
+ /*#__PURE__*/ jsx("div", {
12052
+ className: "inline-block overflow-x-scroll",
12053
+ children: /*#__PURE__*/ jsx(MantineReactTable, {
12054
+ table: table
12055
+ })
12043
12056
  })
12044
- })
12045
- ]
12057
+ ]
12058
+ })
12046
12059
  });
12047
12060
  };
12048
12061
 
@@ -12717,6 +12730,25 @@ const EmptyData = {};
12717
12730
  }, {
12718
12731
  skip: chartKeys.length === 0
12719
12732
  });
12733
+ const cleanChartData = useDeepCompareMemo(()=>{
12734
+ if (isChartSuccess && chartData) {
12735
+ const cleanedData = {};
12736
+ Object.keys(summaryCharts).forEach((key)=>{
12737
+ // remove empty keys
12738
+ cleanedData[key] = chartData[key].filter((x)=>typeof x.key !== 'string' ? true : x.key !== '');
12739
+ const facetDef = facetDefinitions?.[key];
12740
+ if (facetDef?.excludeValues) {
12741
+ cleanedData[key] = cleanedData[key].filter((x)=>typeof x.key !== 'string' ? true : facetDef?.excludeValues?.includes(String(x.key)) === false);
12742
+ }
12743
+ });
12744
+ return cleanedData;
12745
+ }
12746
+ return chartData;
12747
+ }, [
12748
+ chartData,
12749
+ isChartSuccess,
12750
+ summaryCharts
12751
+ ]);
12720
12752
  const getEnumFacetData = useDeepCompareCallback((field)=>{
12721
12753
  let filters = undefined;
12722
12754
  let combineMode = 'or';
@@ -12857,7 +12889,7 @@ const EmptyData = {};
12857
12889
  }); // TODO: replace with configurable message
12858
12890
  }
12859
12891
  return /*#__PURE__*/ jsxs("div", {
12860
- className: "flex flex-col mt-3 relative px-4 bg-base-light w-full",
12892
+ className: "flex flex-col mt-3 relative px-4 bg-base-lightest w-full",
12861
12893
  children: [
12862
12894
  /*#__PURE__*/ jsx(CohortManager$1, {
12863
12895
  index: index
@@ -12907,24 +12939,21 @@ const EmptyData = {};
12907
12939
  ...chartsSection,
12908
12940
  charts: summaryCharts
12909
12941
  },
12910
- data: chartData ?? EmptyData,
12942
+ data: cleanChartData ?? EmptyData,
12911
12943
  isSuccess: isChartSuccess
12912
12944
  }) : /*#__PURE__*/ jsx(Charts, {
12913
12945
  charts: summaryCharts,
12914
- data: chartData ?? EmptyData,
12946
+ data: cleanChartData ?? EmptyData,
12915
12947
  counts: counts,
12916
12948
  isSuccess: isChartSuccess,
12917
12949
  numCols: numCols
12918
12950
  }),
12919
12951
  table?.enabled && /*#__PURE__*/ jsx("div", {
12920
12952
  className: "mt-2 flex flex-col",
12921
- children: /*#__PURE__*/ jsx("div", {
12922
- className: "grid",
12923
- children: /*#__PURE__*/ jsx(ExplorerTable, {
12924
- index: index,
12925
- tableConfig: table,
12926
- accessibility: accessLevel
12927
- })
12953
+ children: /*#__PURE__*/ jsx(ExplorerTable, {
12954
+ index: index,
12955
+ tableConfig: table,
12956
+ accessibility: accessLevel
12928
12957
  })
12929
12958
  })
12930
12959
  ]
@@ -12959,16 +12988,20 @@ const TabsLayoutToComponentProp = (tabsLayout)=>{
12959
12988
  }
12960
12989
  };
12961
12990
 
12962
- const CohortBuilder = ({ explorerConfig, sharedFiltersMap = null, tabsLayout = 'left' })=>{
12991
+ const useGetCurrentCohort = ()=>{
12992
+ return useCoreSelector((state)=>selectCurrentCohortId$1(state));
12993
+ };
12994
+ const CohortBuilder$1 = ({ explorerConfig, sharedFiltersMap = null, tabsLayout = 'left' })=>{
12963
12995
  const dispatch = useCoreDispatch();
12964
12996
  dispatch(setSharedFilters(sharedFiltersMap ?? {}));
12965
12997
  const configuration = useDeepCompareMemo(()=>explorerConfig, [
12966
12998
  explorerConfig
12967
12999
  ]);
12968
13000
  return /*#__PURE__*/ jsx("div", {
12969
- className: "w-full",
13001
+ className: "w-full mt-2",
12970
13002
  children: /*#__PURE__*/ jsxs(Tabs, {
12971
13003
  color: "primary.4",
13004
+ variant: explorerConfig[0]?.tabType,
12972
13005
  keepMounted: true,
12973
13006
  defaultValue: explorerConfig[0].tabTitle,
12974
13007
  children: [
@@ -12999,6 +13032,71 @@ const CohortBuilder = ({ explorerConfig, sharedFiltersMap = null, tabsLayout = '
12999
13032
  });
13000
13033
  };
13001
13034
 
13035
+ var CohortBuilder$2 = /*#__PURE__*/Object.freeze({
13036
+ __proto__: null,
13037
+ default: CohortBuilder$1,
13038
+ useGetCurrentCohort: useGetCurrentCohort
13039
+ });
13040
+
13041
+ const RowTableDetailsPanel = ({ row })=>{
13042
+ const rowData = row?.original ?? {};
13043
+ const rows = Object.entries(rowData).map(([field, value])=>/*#__PURE__*/ jsxs(Table.Tr, {
13044
+ children: [
13045
+ /*#__PURE__*/ jsx(Table.Td, {
13046
+ children: /*#__PURE__*/ jsx(Text, {
13047
+ fw: "bold",
13048
+ children: field
13049
+ })
13050
+ }),
13051
+ /*#__PURE__*/ jsx(Table.Td, {
13052
+ children: /*#__PURE__*/ jsx(Text, {
13053
+ children: value ? value : ''
13054
+ })
13055
+ })
13056
+ ]
13057
+ }, field));
13058
+ return /*#__PURE__*/ jsxs(Table, {
13059
+ striped: true,
13060
+ highlightOnHover: true,
13061
+ withTableBorder: true,
13062
+ withColumnBorders: true,
13063
+ children: [
13064
+ /*#__PURE__*/ jsx(Table.Thead, {
13065
+ children: /*#__PURE__*/ jsxs(Table.Tr, {
13066
+ children: [
13067
+ /*#__PURE__*/ jsx(Table.Th, {
13068
+ children: "Field"
13069
+ }),
13070
+ /*#__PURE__*/ jsx(Table.Th, {
13071
+ children: "Value"
13072
+ })
13073
+ ]
13074
+ })
13075
+ }),
13076
+ /*#__PURE__*/ jsx(Table.Tbody, {
13077
+ children: rows
13078
+ })
13079
+ ]
13080
+ });
13081
+ };
13082
+
13083
+ let instance$1;
13084
+ const DefaultRendererCatalog$1 = {
13085
+ tableDetails: {
13086
+ default: RowTableDetailsPanel,
13087
+ queryRowDetails: QueryRowDetailsPanel
13088
+ }
13089
+ };
13090
+ const ExplorerTableDetailsPanelFactory = ()=>{
13091
+ if (!instance$1) {
13092
+ instance$1 = new RenderFactoryTypedInstance();
13093
+ }
13094
+ return instance$1;
13095
+ };
13096
+ const registerCohortBuilderDefaultPreviewRenderers = ()=>{
13097
+ ExplorerTableDetailsPanelFactory().registerRendererCatalog(DefaultRendererCatalog$1);
13098
+ };
13099
+
13002
13100
  const useCustomFacets = ()=>({
13003
13101
  data: [],
13004
13102
  isSuccess: true
@@ -14503,12 +14601,39 @@ const StaticNotebookViewer = ({ notebook })=>{
14503
14601
 
14504
14602
  const StaticNotebookIFrame = ({ notebook })=>{
14505
14603
  const router = useRouter$1();
14604
+ const iframeRef = useRef(null);
14605
+ useEffect(()=>{
14606
+ const iframe = iframeRef.current;
14607
+ const handleLoad = ()=>{
14608
+ try {
14609
+ // Access iframe document
14610
+ if (iframe) {
14611
+ const iframeDoc = iframe.contentDocument || iframe?.contentWindow?.document;
14612
+ // Find all anchor tags and add target="_blank"
14613
+ const links = iframeDoc?.querySelectorAll('a');
14614
+ links?.forEach((link)=>{
14615
+ link.setAttribute('target', '_blank');
14616
+ link.setAttribute('rel', 'noreferrer');
14617
+ });
14618
+ }
14619
+ } catch (error) {
14620
+ console.error('Cannot access iframe content:', error);
14621
+ }
14622
+ };
14623
+ if (iframe) {
14624
+ iframe.addEventListener('load', handleLoad);
14625
+ return ()=>iframe.removeEventListener('load', handleLoad);
14626
+ }
14627
+ }, []);
14506
14628
  return /*#__PURE__*/ jsx("div", {
14507
14629
  className: "flex w-full h-full",
14508
14630
  children: /*#__PURE__*/ jsx("div", {
14509
14631
  className: "flex justify-items-center w-full",
14510
14632
  children: /*#__PURE__*/ jsx("iframe", {
14511
- allow: "cross-origin",
14633
+ ref: iframeRef,
14634
+ sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox",
14635
+ referrerPolicy: "strict-origin-when-cross-origin",
14636
+ allow: "geolocation 'none'; microphone 'none'; camera 'none'",
14512
14637
  src: `${router.basePath}/${GEN3_STATIC_NOTEBOOK_DIR}/${notebook}`,
14513
14638
  width: "100%",
14514
14639
  height: "100%",
@@ -14542,7 +14667,7 @@ class FilesystemContent {
14542
14667
  try {
14543
14668
  const files = myGlob(path.join(this.rootPath, filepath), filter);
14544
14669
  return Promise.all(files.map((file)=>this.get(path.join(filepath, file))));
14545
- } catch (err) {
14670
+ } catch (_err) {
14546
14671
  throw new Error(`getAllCannot process ${path.join(this.rootPath, filepath)}/${filter}`);
14547
14672
  }
14548
14673
  }
@@ -14597,12 +14722,18 @@ var ContentSource$1 = ContentSource.getInstance();
14597
14722
  * @returns A Promise resolving to an object containing header and footer props.
14598
14723
  */ const getNavPageLayoutPropsFromConfig = async ()=>{
14599
14724
  const navigationConfigJSON = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/navigation.json`);
14600
- let bannerConfigJSON = [];
14601
- try {
14602
- bannerConfigJSON = await ContentSource$1.getContentDatabase().get(`${GEN3_COMMONS_NAME}/banner.json`);
14603
- } catch (error) {
14604
- console.warn('No banner config found at: ', `${GEN3_COMMONS_NAME}/banner.json`);
14605
- }
14725
+ const bannerConfigJSON = [];
14726
+ // TODO: enable later
14727
+ // try {
14728
+ // bannerConfigJSON = await ContentSource.getContentDatabase().get(
14729
+ // `${GEN3_COMMONS_NAME}/banner.json`,
14730
+ // );
14731
+ // } catch (error: unknown) {
14732
+ // console.warn(
14733
+ // 'No banner config found at: ',
14734
+ // `${GEN3_COMMONS_NAME}/banner.json`,
14735
+ // );
14736
+ // }
14606
14737
  const { topBar, navigation, type = 'original' } = navigationConfigJSON;
14607
14738
  let headerMetadata = {
14608
14739
  title: 'Gen3 Frontend Framework Page',
@@ -15188,8 +15319,9 @@ const cohortsAdapter = createEntityAdapter({
15188
15319
  const DEFAULT_COHORT_NAME = 'Default';
15189
15320
  const loadCohortsFromStorage = createAsyncThunk('cohorts/loadFromStorage', async ()=>{
15190
15321
  try {
15191
- const cohortsMap = await cohortStorage.getAllCohorts();
15192
- return Object(cohortsMap).values();
15322
+ const results = await cohortStorage.getAllCohorts();
15323
+ if (results.data) return Object.values(results.data);
15324
+ else return [];
15193
15325
  } catch (error) {
15194
15326
  console.error('Failed to load cohorts:', error);
15195
15327
  return [];
@@ -15231,11 +15363,13 @@ const deleteCohortFromStorage = createAsyncThunk('cohorts/deleteFromStorage', as
15231
15363
  return cohortId;
15232
15364
  });
15233
15365
  const emptyInitialState = cohortsAdapter.getInitialState({
15234
- currentCohortId: 'empty',
15366
+ currentCohortId: 'uninitialized',
15235
15367
  loading: false,
15368
+ uninitialized: true,
15236
15369
  error: null,
15237
15370
  autoSaveInProgress: []
15238
15371
  });
15372
+ // const initialState = emptyInitialState;
15239
15373
  const initialState = cohortsAdapter.addOne(emptyInitialState, createDefaultCohort());
15240
15374
  const updateAutoSave = (cohortId, state)=>{
15241
15375
  // Add to auto-save queue if not already present
@@ -15416,16 +15550,24 @@ const cohortManagerSlice = createSlice({
15416
15550
  extraReducers: (builder)=>{
15417
15551
  builder.addCase(loadCohortsFromStorage.pending, (state)=>{
15418
15552
  state.loading = true;
15553
+ state.uninitialized = false;
15419
15554
  state.error = null;
15555
+ console.log('loadCohortsFromStorage.pending');
15420
15556
  }).addCase(loadCohortsFromStorage.fulfilled, (state, action)=>{
15421
15557
  state.loading = false;
15558
+ console.log('loadCohortsFromStorage.fulfilled', action.payload);
15422
15559
  if (action.payload.length > 0) {
15423
- if (Object.keys(state.entities).length === 1) {
15424
- cohortsAdapter.removeOne(state, state.entities[0].id);
15560
+ if (Object.keys(state.entities).length >= 0) {
15561
+ cohortsAdapter.removeAll(state);
15425
15562
  }
15426
15563
  cohortsAdapter.addMany(state, action.payload);
15427
15564
  const sortedCohorts = action.payload.sort((a, b)=>b.modifiedDatetime.localeCompare(a.modifiedDatetime));
15428
15565
  state.currentCohortId = sortedCohorts[0].id;
15566
+ } else {
15567
+ // No cohorts in storage, create default cohort
15568
+ const defaultCohort = createDefaultCohort();
15569
+ cohortsAdapter.addOne(state, defaultCohort);
15570
+ state.currentCohortId = defaultCohort.id;
15429
15571
  }
15430
15572
  }).addCase(loadCohortsFromStorage.rejected, (state, action)=>{
15431
15573
  state.loading = false;
@@ -15482,6 +15624,7 @@ const cohortManagerReducer = cohortManagerSlice.reducer;
15482
15624
  const getCurrentCohort = (state)=>{
15483
15625
  const cohort = state.entities[state.currentCohortId];
15484
15626
  if (!cohort) {
15627
+ console.log('creating default cohort');
15485
15628
  return createDefaultCohort();
15486
15629
  }
15487
15630
  return cohort;
@@ -15591,7 +15734,6 @@ const reducers = combineReducers({
15591
15734
  filtersExpandedState: filtersExpandedReducer,
15592
15735
  facetDefinitionState: facetDefinitionsReducer,
15593
15736
  cohorts: cohortManagerReducer,
15594
- // savedCohorts: saveCohortPersistenceReducer,
15595
15737
  dataAccessRequests: dataAccessRequestsReducer
15596
15738
  });
15597
15739
  const persistedReducers = persistReducer(persistConfig, reducers);
@@ -15602,6 +15744,10 @@ const { id, AppStore, AppContext, useAppSelector, useAppDispatch } = createAppSt
15602
15744
  version: '0.0.1'
15603
15745
  });
15604
15746
 
15747
+ process.env.GEN3_COHORT_DISCOVERY_API || `${GEN3_API}/api/auth/analysis/cohortDiscovery`;
15748
+ const UninitializeCohort = {
15749
+ filters: {}};
15750
+
15605
15751
  // Selectors
15606
15752
  const { selectAll: selectAllCohorts, selectTotal: selectTotalCohorts, selectById: selectCohortById, selectIds: selectCohortIds } = cohortsAdapter.getSelectors((state)=>state.cohorts);
15607
15753
  const selectCurrentCohortId = (state)=>state.cohorts.currentCohortId;
@@ -15609,7 +15755,7 @@ const selectCurrentCohort = (state)=>{
15609
15755
  const { currentCohortId, entities } = state.cohorts;
15610
15756
  const cohort = entities[currentCohortId];
15611
15757
  if (!cohort) {
15612
- return createDefaultCohort();
15758
+ return null;
15613
15759
  }
15614
15760
  return cohort;
15615
15761
  };
@@ -15631,15 +15777,15 @@ createSelector([
15631
15777
  ], (autoSaveArray, cohortId)=>autoSaveArray.includes(cohortId));
15632
15778
  const selectCurrentCohortName = createSelector([
15633
15779
  selectCurrentCohort
15634
- ], (cohort)=>cohort.name);
15780
+ ], (cohort)=>cohort?.name ?? 'No Cohort Defined');
15635
15781
  const selectCurrentCohortFilters = createSelector([
15636
15782
  selectCurrentCohort
15637
- ], (cohort)=>cohort.filters);
15783
+ ], (cohort)=>cohort ? cohort.filters : UninitializeCohort.filters);
15638
15784
  const selectCurrentCohortIndexFilters = createSelector([
15639
15785
  selectCurrentCohort,
15640
15786
  (state, index)=>index
15641
15787
  ], (cohort, index)=>{
15642
- return cohort.filters?.[index] ?? EmptyFilterSet;
15788
+ return cohort?.filters?.[index] ?? EmptyFilterSet;
15643
15789
  });
15644
15790
  createSelector([
15645
15791
  selectAllCohorts,
@@ -15651,7 +15797,6 @@ createSelector([
15651
15797
  const trimmedName = params.name.trim().toLowerCase();
15652
15798
  return cohorts.some((cohort)=>cohort.id !== params.excludeId && cohort.name.trim().toLowerCase() === trimmedName);
15653
15799
  });
15654
- const selectCohortManagerLoading = (state)=>state.cohorts.loading;
15655
15800
  const selectCohortIdToNameMap = createSelector([
15656
15801
  selectAllCohorts
15657
15802
  ], (cohorts)=>{
@@ -16118,14 +16263,12 @@ const submitCohortRequestAction = async (cohort, values, user, indexResources, r
16118
16263
  }
16119
16264
  };
16120
16265
 
16121
- const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16122
- const dispatch = useAppDispatch();
16266
+ const CohortManagerPanel = ({ indexResources, remoteSupportService, size = 'md' })=>{
16267
+ const appDispatch = useAppDispatch();
16123
16268
  const [isEditing, setIsEditing] = useState(false);
16124
16269
  const [editingLabel, setEditingLabel] = useState('');
16125
16270
  const allCohorts = useAppSelector(selectAllCohorts);
16126
16271
  const currentCohort = useAppSelector(selectCurrentCohort);
16127
- const loading = useAppSelector(selectCohortManagerLoading);
16128
- const appDispatch = useAppDispatch();
16129
16272
  const [getGetAggs] = useLazyGetAggsNoFilterSelfQuery();
16130
16273
  const [requestQuery] = useCreateRequestMutation();
16131
16274
  const user = useCoreSelector(selectUserDetails);
@@ -16142,7 +16285,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16142
16285
  };
16143
16286
  const saveEdit = ()=>{
16144
16287
  if (editingLabel.trim() === '' || !currentCohort.name) return;
16145
- dispatch(updateCohortName({
16288
+ appDispatch(updateCohortName({
16146
16289
  id: currentCohort.id,
16147
16290
  name: editingLabel
16148
16291
  }));
@@ -16150,7 +16293,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16150
16293
  setEditingLabel('');
16151
16294
  };
16152
16295
  const handleCreateNew = ()=>{
16153
- dispatch(createNewCohort({
16296
+ appDispatch(createNewCohort({
16154
16297
  name: 'New Cohort'
16155
16298
  }));
16156
16299
  };
@@ -16162,22 +16305,26 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16162
16305
  }, [
16163
16306
  allCohorts
16164
16307
  ]);
16308
+ useDeepCompareEffect(()=>{
16309
+ if (!currentCohort) {
16310
+ setCurrentCohortId(allCohorts[0].id);
16311
+ }
16312
+ }, [
16313
+ allCohorts,
16314
+ currentCohort,
16315
+ setCurrentCohortId
16316
+ ]);
16165
16317
  const onSelectCohort = useCallback((_value, option)=>{
16166
16318
  if (option) {
16167
- dispatch(setCurrentCohortId(option.value));
16319
+ appDispatch(setCurrentCohortId(option.value));
16168
16320
  }
16169
16321
  }, [
16170
- dispatch
16322
+ appDispatch
16171
16323
  ]);
16172
16324
  const handleCohortAccessRequest = async (cohortId, values)=>{
16173
16325
  const cohort = allCohorts.find((obj)=>obj.id === cohortId);
16174
16326
  if (cohort) await submitCohortRequestAction(cohort, values, user, indexResources, remoteSupportService, appDispatch, getGetAggs, requestQuery);
16175
16327
  };
16176
- if (loading) {
16177
- return /*#__PURE__*/ jsx("div", {
16178
- children: "Loading cohorts..."
16179
- });
16180
- }
16181
16328
  return /*#__PURE__*/ jsxs(Group, {
16182
16329
  gap: "xs",
16183
16330
  className: "flex pt-4 pl-2",
@@ -16235,7 +16382,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16235
16382
  onClick: saveEdit,
16236
16383
  "data-testid": "completeCohortRenameButton",
16237
16384
  "aria-label": "Complete rename cohort",
16238
- disabled: editingLabel.trim() === '' || editingLabel.trim() === currentCohort.name,
16385
+ disabled: editingLabel.trim() === '' || editingLabel.trim() === currentCohort?.name,
16239
16386
  size: `compact-${size}`,
16240
16387
  children: /*#__PURE__*/ jsx(Icon, {
16241
16388
  icon: "gen3:check",
@@ -16310,7 +16457,7 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16310
16457
  color: theme.colors.accent[4]
16311
16458
  },
16312
16459
  onConfirm: ()=>{
16313
- dispatch(removeCohort(currentCohort.id));
16460
+ appDispatch(removeCohort(currentCohort.id));
16314
16461
  }
16315
16462
  });
16316
16463
  },
@@ -16352,8 +16499,15 @@ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16352
16499
  ]
16353
16500
  });
16354
16501
  };
16355
-
16356
- process.env.GEN3_COHORT_DISCOVERY_API || `${GEN3_API}/api/auth/analysis/cohortDiscovery`;
16502
+ const CohortManager = ({ indexResources, remoteSupportService, size = 'md' })=>{
16503
+ // TODO: initialize and load cohorts from cohort storage
16504
+ // as right now the redux-persist is handling cohorts
16505
+ return /*#__PURE__*/ jsx(CohortManagerPanel, {
16506
+ indexResources: indexResources,
16507
+ remoteSupportService: remoteSupportService,
16508
+ size: size
16509
+ });
16510
+ };
16357
16511
 
16358
16512
  const useGraphQLData = (url, body, skip)=>{
16359
16513
  // Create a fetcher function that handles the GraphQL POST request
@@ -16822,22 +16976,6 @@ const SavedCohortsTable = ({ indexResources, remoteSupportService, size = 'md' }
16822
16976
  })
16823
16977
  })
16824
16978
  }),
16825
- /*#__PURE__*/ jsx(Tooltip, {
16826
- label: "Select Cohort",
16827
- withArrow: true,
16828
- children: /*#__PURE__*/ jsx(ActionIcon, {
16829
- color: "accent.4",
16830
- variant: "transparent",
16831
- "aria-label": "Select cohort",
16832
- onClick: ()=>{},
16833
- children: /*#__PURE__*/ jsx(Icon, {
16834
- icon: "gen3:cohort",
16835
- height: iconSize,
16836
- width: iconSize,
16837
- color: theme.colors.secondary[4]
16838
- })
16839
- })
16840
- }),
16841
16979
  /*#__PURE__*/ jsx(Tooltip, {
16842
16980
  label: "Delete Cohort",
16843
16981
  withArrow: true,
@@ -19365,6 +19503,7 @@ const MetadataDictionary = ({ schemas })=>{
19365
19503
  }
19366
19504
  return /*#__PURE__*/ jsxs(Tabs, {
19367
19505
  defaultValue: schemas[0].schemaID,
19506
+ variant: schemas[0]?.tabType,
19368
19507
  className: "w-full",
19369
19508
  keepMounted: false,
19370
19509
  children: [
@@ -19704,6 +19843,7 @@ const Discovery = ({ discoveryConfig })=>{
19704
19843
  children: /*#__PURE__*/ jsxs(Tabs, {
19705
19844
  className: "w-full",
19706
19845
  defaultValue: metadataIndex,
19846
+ variant: discoveryConfig.metadataConfig[0]?.tabType,
19707
19847
  onChange: (v)=>{
19708
19848
  setMetadataIndex(v ?? '0');
19709
19849
  },
@@ -20005,6 +20145,9 @@ const LandingPageGetServerSideProps = async ()=>{
20005
20145
  };
20006
20146
  };
20007
20147
 
20148
+ const CohortBuilder = dynamic(()=>Promise.resolve().then(function () { return CohortBuilder$2; }), {
20149
+ ssr: false
20150
+ });
20008
20151
  const ExplorerPage = ({ headerProps, footerProps, explorerConfig, headerMetadata, tabsLayout, sharedFiltersMap })=>{
20009
20152
  if (explorerConfig === undefined) {
20010
20153
  return /*#__PURE__*/ jsx(Center, {
@@ -23622,15 +23765,16 @@ const SelectedItemsTable = ({ validatedItems, rowSelection, setRowSelection, siz
23622
23765
  const table = useMantineReactTable({
23623
23766
  columns,
23624
23767
  data: tableRows.rows,
23625
- enableColumnResizing: false,
23626
23768
  icons: TableIcons,
23627
23769
  enableTopToolbar: false,
23628
23770
  enableRowSelection: true,
23629
23771
  enableBottomToolbar: tableRows.rows.length > 10,
23630
23772
  enablePagination: tableRows.rows.length > 10,
23631
23773
  enableRowActions: false,
23632
- enableStickyFooter: true,
23774
+ enableColumnResizing: true,
23775
+ enableGrouping: true,
23633
23776
  enableStickyHeader: true,
23777
+ enableStickyFooter: true,
23634
23778
  enableHiding: true,
23635
23779
  onRowSelectionChange: handleRowSelectionChange,
23636
23780
  state: {
@@ -23638,6 +23782,9 @@ const SelectedItemsTable = ({ validatedItems, rowSelection, setRowSelection, siz
23638
23782
  },
23639
23783
  initialState: {
23640
23784
  density: 'xs',
23785
+ grouping: [
23786
+ 'datasetId'
23787
+ ],
23641
23788
  columnPinning: {
23642
23789
  left: [
23643
23790
  'mrt-row-select',
@@ -25898,6 +26045,13 @@ const staticNotebookAPI = async (req, res)=>{
25898
26045
  });
25899
26046
  }
25900
26047
  const rawContent = fs.readFileSync(fullPath, 'utf8');
26048
+ DOMPurify.addHook('afterSanitizeAttributes', function(node) {
26049
+ if (node.tagName === 'a' || node.tagName === 'A') {
26050
+ // Check for anchor tags and target attribute
26051
+ node.setAttribute('target', '_blank');
26052
+ node.setAttribute('rel', 'noopener'); // Prevent window.opener vulnerability
26053
+ }
26054
+ });
25901
26055
  const sanitizedContent = DOMPurify.sanitize(rawContent, {
25902
26056
  ALLOWED_TAGS: [
25903
26057
  'p',
@@ -25946,5 +26100,5 @@ const staticNotebookAPI = async (req, res)=>{
25946
26100
  });
25947
26101
  };
25948
26102
 
25949
- export { AISearchPageGetServerSideProps, AccessLevel, AccordionPanel, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, BAD_DATA_MESSAGE, Banner, BaseModal, Charts, CohortBuilder, CohortManager$1 as CohortManager, CollapsableCharts, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DAYS_IN_YEAR, DEFAULT_MAXIMUM, DEFAULT_MINIMUM, DEFAULT_VISIBLE_ITEMS$1 as DEFAULT_VISIBLE_ITEMS, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, DropdownPanel, DropdownWithIcon, EnumFacet, EnumFacetChart, ErrorCard, ExactValueFacet, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FacetControlsHeader, FacetExpander, FacetSelector, FacetSortPanel, FacetTabs, FiltersPanel, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header$1 as Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, MultiSelectValueFacet, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryExpression, QueryExpressionContext, QueryExpressionSection, QueryPage, QueryPageGetServerSideProps, RangeFacet, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SegmentedControl, SessionExpiredModal, SinglePageStudyDetailsPanel, StaticNotebookIFrame, StaticNotebookViewer, StudyDetailsPanel, StudyGroup, StudyGroupPanel, StudyProvider, SubmissionPage, SubmissionPageGetServerSideProps, TabbedCohortBuilder, TabbedCohortBuilderPage, TabbedCohortBuilderPageGetServerSideProps, TabbedPanel, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, accessibleFieldName, addIntersectionToIncludes, addUnion, analysisApiCohortDiscovery, buildNested, capitalize, classifyFacets, compareKeysAscending, compareKeysDescending, computeRowSpan, convertMinutesToMilliseconds, convertPathsToTree, convertSecondsToMilliseconds, convertToStringArray, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, extractRangeValues, focusStyles, getAllFieldsFromFilterConfigs, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isEnumFacetResponse, isHeaderMetadata, isPropertyKey, isTextTransform$1 as isTextTransform, mapFacetSortToSortType, processBucketData, processLabel$1 as processLabel, processRangeData, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeIntersectionFromEnum, removeKey$1 as removeKey, removeUnion, resourcePathFromProjectID, sessionLogout, sessionToken, staticNotebookAPI, stripTrailingSlash, toCountsString, toDisplayName, truncateString, unixTimeToString, updateFacetEnum, useClearFilters$1 as useClearFilters, useDiscoveryContext, useExtractEnumFilterValues, useExtractRangeFilterValues, useFieldNameToTitle, useGetFacetFilters$1 as useGetFacetFilters, useUpdateFilters$1 as useUpdateFilters, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
26103
+ export { AISearchPageGetServerSideProps, AccessLevel, AccordionPanel, ActionBar, ActionButton, AdminAuthZPageGetServerSideProps, AiSearch, AISearchPage as AiSearchPage, AnalysisCenter, AnalysisCenterWithSections, AnalysisEditorPage, AnalysisEditorPageGetServerSideProps, AnalysisPage, AnalysisPageGetServerSideProps, AuthzPage, BAD_DATA_MESSAGE, Banner, BaseModal, Charts, CohortBuilder$1 as CohortBuilder, CohortManager$1 as CohortManager, CollapsableCharts, CollapsableSidebar, ColorThemePage, ColorThemePageGetServerSideProps, ContentSource$1 as ContentSource, CreateCredentialsAPIKeyModal, CrosswalkPage, CrosswalkPageGetServerSideProps, Custom404Page, DAYS_IN_YEAR, DEFAULT_MAXIMUM, DEFAULT_MINIMUM, DEFAULT_VISIBLE_ITEMS$1 as DEFAULT_VISIBLE_ITEMS, DataLibraryPage, DataLibraryPageGetServerSideProps, DictionaryPage, DictionaryPageGetServerSideProps, DiscoveryCellRendererFactory, DiscoveryProvider as DiscoveryConfigProvider, DiscoveryIndexPanel, DiscoveryPage, DiscoveryPageGetServerSideProps, DiscoveryRowRendererFactory, DropdownButton, DropdownPanel, DropdownWithIcon, EnumFacet, EnumFacetChart, ErrorCard, ExactValueFacet, ExplorerPage, ExplorerPageGetServerSideProps, ExplorerPageGetServerSidePropsForConfigId, ExplorerTableCellRendererFactory, ExplorerTableDetailsPanelFactory, FacetControlsHeader, FacetExpander, FacetSelector, FacetSortPanel, FacetTabs, FiltersPanel, FirstTimeModal, Footer, Gen3Button, Gen3ButtonReverse, Gen3Link, Gen3ModalsProvider, Gen3Provider, GqlQueryEditor$1 as GqlQueryEditor, Header$1 as Header, HoverLink, LandingPage, LandingPageGetServerSideProps, LoginButton$1 as LoginButton, LoginPage, LoginPageGetServerSideProps, LoginPanel, LoginProvidersPanel, MinutesToMilliseconds, MultiSelectValueFacet, NavPageLayout, NavigationBar, NavigationButton, NoAccessModal, NotebookLitePage, NotebookLitePageGetStaticProps, ProfilePage, ProfilePageGetServerSideProps, ProfileProvider, ProtectedContent, QueryExpression, QueryExpressionContext, QueryExpressionSection, QueryPage, QueryPageGetServerSideProps, RangeFacet, ReactECharts, ResourcesFilters, SPECIAL_CASE_FIELDS, SegmentedControl, SessionExpiredModal, SinglePageStudyDetailsPanel, StaticNotebookIFrame, StaticNotebookViewer, StudyDetailsPanel, StudyGroup, StudyGroupPanel, StudyProvider, SubmissionPage, SubmissionPageGetServerSideProps, TabbedCohortBuilder, TabbedCohortBuilderPage, TabbedCohortBuilderPageGetServerSideProps, TabbedPanel, TagCloud, TailwindConfig, TopBar, UploadJSONButton, User, Workspace, WorkspaceNoAccessPage, WorkspaceNoAccessPageServerSideProps, WorkspacePage, WorkspacePageGetServerSideProps, accessibleFieldName, addIntersectionToIncludes, addUnion, analysisApiCohortDiscovery, buildNested, capitalize, classifyFacets, compareKeysAscending, compareKeysDescending, computeRowSpan, convertMinutesToMilliseconds, convertPathsToTree, convertSecondsToMilliseconds, convertToStringArray, create10ColorAccessibleContrast, create10ColorPallet, createMantineTheme, credentialsLogin, credentialsLogout, extractObjectKey, extractRangeValues, filterAggregationsDataKeys, focusStyles, getAllFieldsFromFilterConfigs, getCurrentUnixTimestamp, getNavPageLayoutPropsFromConfig, getParamsValueAsString, getTagInfo, hasOwnProperty, isArrayOfString, isEnumFacetResponse, isHeaderMetadata, isPropertyKey, isTextTransform$1 as isTextTransform, mapFacetSortToSortType, processBucketData, processLabel$1 as processLabel, processRangeData, processRangeKeyLabel, registerCohortBuilderDefaultPreviewRenderers, registerCohortDiscoveryApp, registerCohortSimilarityApp, registerDefaultDiscoveryDataLoaders, registerDiscoveryDefaultCellRenderers, registerDiscoveryDefaultStudyPreviewRenderers, registerExplorerDefaultCellRenderers, registerMetadataSchemaApp, removeIntersectionFromEnum, removeKey$1 as removeKey, removeUnion, resourcePathFromProjectID, sessionLogout, sessionToken, staticNotebookAPI, stripTrailingSlash, toCountsString, toDisplayName, truncateString, unixTimeToString, updateFacetEnum, useClearFilters$1 as useClearFilters, useDiscoveryContext, useExtractEnumFilterValues, useExtractRangeFilterValues, useFieldNameToTitle, useGetFacetFilters$1 as useGetFacetFilters, useUpdateFilters$1 as useUpdateFilters, userHasMethodForServiceOnResource$1 as userHasMethodForServiceOnResource };
25950
26104
  //# sourceMappingURL=index.js.map