@rivm-loculus-tools/common-frontend 0.2.0 → 0.3.0

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 (136) hide show
  1. package/dist/_chunks/EmotionCacheService.js +33 -0
  2. package/dist/_chunks/EmotionCacheService.js.map +1 -0
  3. package/dist/_chunks/decorate.js +9 -0
  4. package/dist/classes/services/EmotionCacheService/EmotionCacheService.d.ts +7 -0
  5. package/dist/classes/services/EmotionCacheService/index.d.ts +1 -0
  6. package/dist/classes/services/EmotionCacheService/index.js +1 -0
  7. package/dist/classes/services/FastaDataEventBusService/FastaDataEventBusService.d.ts +1 -3
  8. package/dist/classes/services/FastaDataEventBusService/index.js +6 -8
  9. package/dist/classes/services/FastaDataEventBusService/index.js.map +1 -1
  10. package/dist/components/app/App/App.d.ts +6 -0
  11. package/dist/components/app/App/index.d.ts +1 -0
  12. package/dist/components/app/App/index.js +101 -0
  13. package/dist/components/app/App/index.js.map +1 -0
  14. package/dist/{_chunks/FastaDataImportDialog.js → components/fasta/FastaDataImportDialog/index.js} +3 -3
  15. package/dist/components/fasta/FastaDataImportDialog/index.js.map +1 -0
  16. package/dist/components/{FastaDataImportDialogLoader → fasta/FastaDataImportDialogLoader}/FastaDataImportDialogLoader.d.ts +1 -1
  17. package/dist/components/fasta/FastaDataImportDialogLoader/index.js +71 -0
  18. package/dist/components/fasta/FastaDataImportDialogLoader/index.js.map +1 -0
  19. package/dist/components/fasta/FastaNotLoaded/index.js +54 -0
  20. package/dist/components/fasta/FastaNotLoaded/index.js.map +1 -0
  21. package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/FastaPageHeaderCenterComponent.d.ts +1 -1
  22. package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/index.js +2 -2
  23. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js.map +1 -0
  24. package/dist/components/fasta/FastaPageHeaderImportButton/index.js +27 -0
  25. package/dist/components/fasta/FastaPageHeaderImportButton/index.js.map +1 -0
  26. package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/index.js +1 -1
  27. package/dist/components/fasta/FastaPageHeaderResetButton/index.js.map +1 -0
  28. package/dist/components/ui/GenericErrorMessage/GenericErrorMessage.d.ts +4 -0
  29. package/dist/components/ui/GenericErrorMessage/index.d.ts +1 -0
  30. package/dist/components/ui/GenericErrorMessage/index.js +44 -0
  31. package/dist/components/ui/GenericErrorMessage/index.js.map +1 -0
  32. package/dist/components/ui/I18nWrapper/index.js +21 -0
  33. package/dist/components/ui/I18nWrapper/index.js.map +1 -0
  34. package/dist/components/ui/PageCommon/PageCommon.d.ts +7 -0
  35. package/dist/components/ui/PageCommon/index.d.ts +1 -0
  36. package/dist/components/ui/PageCommon/index.js +54 -0
  37. package/dist/components/ui/PageCommon/index.js.map +1 -0
  38. package/dist/components/ui/PageCommonDrawer/index.d.ts +1 -0
  39. package/dist/components/ui/PageCommonDrawer/index.js +29 -0
  40. package/dist/components/ui/PageCommonDrawer/index.js.map +1 -0
  41. package/dist/components/ui/PageCommonHeader/index.d.ts +1 -0
  42. package/dist/components/ui/PageCommonHeader/index.js +98 -0
  43. package/dist/components/ui/PageCommonHeader/index.js.map +1 -0
  44. package/dist/components/{PageHeaderDocumentationButton → ui/PageHeaderDocumentationButton}/index.js +1 -1
  45. package/dist/components/ui/PageHeaderDocumentationButton/index.js.map +1 -0
  46. package/dist/constants/config.constants.d.ts +9 -0
  47. package/dist/constants/config.constants.js +6 -0
  48. package/dist/constants/config.constants.js.map +1 -0
  49. package/dist/constants/page.constants.js +6 -0
  50. package/dist/constants/page.constants.js.map +1 -0
  51. package/dist/context/commonConfigContext/CommonConfigContext.d.ts +9 -0
  52. package/dist/context/commonConfigContext/CommonConfigContextProvider.d.ts +6 -0
  53. package/dist/context/commonConfigContext/index.d.ts +3 -0
  54. package/dist/context/commonConfigContext/index.js +34 -0
  55. package/dist/context/commonConfigContext/index.js.map +1 -0
  56. package/dist/context/commonConfigContext/useCommonConfigContext.d.ts +3 -0
  57. package/dist/context/pageCommonContext/index.d.ts +2 -0
  58. package/dist/context/pageCommonContext/index.js +24 -0
  59. package/dist/context/pageCommonContext/index.js.map +1 -0
  60. package/dist/hooks/useConfig/index.d.ts +1 -0
  61. package/dist/hooks/useConfig/index.js +7 -0
  62. package/dist/hooks/useConfig/index.js.map +1 -0
  63. package/dist/hooks/useConfig/useConfig.d.ts +2 -0
  64. package/dist/hooks/useUpdateDocumentTitle/index.d.ts +1 -0
  65. package/dist/hooks/useUpdateDocumentTitle/index.js +13 -0
  66. package/dist/hooks/useUpdateDocumentTitle/index.js.map +1 -0
  67. package/dist/hooks/useUpdateDocumentTitle/useUpdateDocumentTitle.d.ts +1 -0
  68. package/dist/models/config.models.d.ts +19 -0
  69. package/dist/models/{fasta.js → fasta.models.js} +2 -2
  70. package/dist/models/fasta.models.js.map +1 -0
  71. package/dist/models/metadata.models.js +0 -0
  72. package/dist/pages/ErrorPage/ErrorPage.d.ts +4 -0
  73. package/dist/pages/ErrorPage/index.d.ts +1 -0
  74. package/dist/pages/ErrorPage/index.js +17 -0
  75. package/dist/pages/ErrorPage/index.js.map +1 -0
  76. package/dist/stores/fastaDataStore/fastaDataStore.d.ts +2 -2
  77. package/dist/stores/fastaDataStore/index.js +17 -15
  78. package/dist/stores/fastaDataStore/index.js.map +1 -1
  79. package/dist/utils/DependencyContainerUtil/DependencyContainerUtil.d.ts +6 -0
  80. package/dist/utils/DependencyContainerUtil/index.d.ts +1 -0
  81. package/dist/utils/DependencyContainerUtil/index.js +18 -0
  82. package/dist/utils/DependencyContainerUtil/index.js.map +1 -0
  83. package/dist/utils/FastaUtil/FastaUtil.d.ts +1 -1
  84. package/dist/utils/FastaUtil/index.js.map +1 -1
  85. package/dist/utils/MetaDataUtil/MetaDataUtil.d.ts +1 -1
  86. package/dist/utils/MetaDataUtil/index.js.map +1 -1
  87. package/dist/utils/StandardConfigUtil/StandardConfigUtil.d.ts +4 -0
  88. package/dist/utils/StandardConfigUtil/index.d.ts +1 -0
  89. package/dist/utils/StandardConfigUtil/index.js +17 -0
  90. package/dist/utils/StandardConfigUtil/index.js.map +1 -0
  91. package/dist/utils/UrlUtil/index.js +6 -5
  92. package/dist/utils/UrlUtil/index.js.map +1 -1
  93. package/package.json +107 -47
  94. package/dist/_chunks/FastaDataImportDialog.js.map +0 -1
  95. package/dist/components/FastaDataImportDialog/index.js +0 -1
  96. package/dist/components/FastaDataImportDialogLoader/index.js +0 -70
  97. package/dist/components/FastaDataImportDialogLoader/index.js.map +0 -1
  98. package/dist/components/FastaNotLoaded/index.js +0 -53
  99. package/dist/components/FastaNotLoaded/index.js.map +0 -1
  100. package/dist/components/FastaPageHeaderCenterComponent/index.js.map +0 -1
  101. package/dist/components/FastaPageHeaderImportButton/index.js +0 -26
  102. package/dist/components/FastaPageHeaderImportButton/index.js.map +0 -1
  103. package/dist/components/FastaPageHeaderResetButton/index.js.map +0 -1
  104. package/dist/components/I18nWrapper/index.js +0 -21
  105. package/dist/components/I18nWrapper/index.js.map +0 -1
  106. package/dist/components/PageHeaderDocumentationButton/index.js.map +0 -1
  107. package/dist/components/page/ErrorPageCommon.d.ts +0 -4
  108. package/dist/components/page/PageCommon.d.ts +0 -8
  109. package/dist/components/page/index.d.ts +0 -6
  110. package/dist/components/page/index.js +0 -207
  111. package/dist/components/page/index.js.map +0 -1
  112. package/dist/constants/page.js +0 -6
  113. package/dist/constants/page.js.map +0 -1
  114. package/dist/models/fasta.js.map +0 -1
  115. /package/dist/components/{FastaDataImportDialog → fasta/FastaDataImportDialog}/FastaDataImportDialog.d.ts +0 -0
  116. /package/dist/components/{FastaDataImportDialog → fasta/FastaDataImportDialog}/index.d.ts +0 -0
  117. /package/dist/components/{FastaDataImportDialogLoader → fasta/FastaDataImportDialogLoader}/index.d.ts +0 -0
  118. /package/dist/components/{FastaNotLoaded → fasta/FastaNotLoaded}/FastaNotLoaded.d.ts +0 -0
  119. /package/dist/components/{FastaNotLoaded → fasta/FastaNotLoaded}/index.d.ts +0 -0
  120. /package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/index.d.ts +0 -0
  121. /package/dist/components/{FastaPageHeaderImportButton → fasta/FastaPageHeaderImportButton}/FastaPageHeaderImportButton.d.ts +0 -0
  122. /package/dist/components/{FastaPageHeaderImportButton → fasta/FastaPageHeaderImportButton}/index.d.ts +0 -0
  123. /package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/FastaPageHeaderResetButton.d.ts +0 -0
  124. /package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/index.d.ts +0 -0
  125. /package/dist/components/{I18nWrapper → ui/I18nWrapper}/I18nWrapper.d.ts +0 -0
  126. /package/dist/components/{I18nWrapper → ui/I18nWrapper}/index.d.ts +0 -0
  127. /package/dist/components/{page → ui/PageCommonDrawer}/PageCommonDrawer.d.ts +0 -0
  128. /package/dist/components/{page → ui/PageCommonHeader}/PageCommonHeader.d.ts +0 -0
  129. /package/dist/components/{PageHeaderDocumentationButton → ui/PageHeaderDocumentationButton}/PageHeaderDocumentationButton.d.ts +0 -0
  130. /package/dist/components/{PageHeaderDocumentationButton → ui/PageHeaderDocumentationButton}/index.d.ts +0 -0
  131. /package/dist/constants/{page.d.ts → page.constants.d.ts} +0 -0
  132. /package/dist/{components/page → context/pageCommonContext}/PageCommonContext.d.ts +0 -0
  133. /package/dist/{components/page → context/pageCommonContext}/PageCommonContextProvider.d.ts +0 -0
  134. /package/dist/models/{metadata.js → config.models.js} +0 -0
  135. /package/dist/models/{fasta.d.ts → fasta.models.d.ts} +0 -0
  136. /package/dist/models/{metadata.d.ts → metadata.models.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","useStore","FastaDataImportDialog","FastaDataImportDialogLoader","setData","store","state","setLoadingStatus","fastaDataImportDialogRef","useRef","useEffect","removers","FastaDataEventBusService","initialErrorMessage","remove","urlParams","inputFastaUrl","inputMetadataUrl","LOADING_STATUS","fastaRes","fastaText","metaText","metaRes","metaErr","fastaErr","message","handleError","useCallback","errorMessage","onDataChange","fastaContent","metadataContent","ErrorUtil","onError","Fragment"],"sources":["../../../src/components/FastaDataImportDialogLoader/FastaDataImportDialogLoader.tsx"],"sourcesContent":["import type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport {\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport type { StoreApi } from 'zustand';\nimport { useStore } from 'zustand';\n\nimport { FastaDataEventBusService } from '../../classes/services/FastaDataEventBusService';\nimport { LOADING_STATUS } from '../../models/fasta';\nimport type { FastaDataStore } from '../../stores/fastaDataStore';\nimport { UrlUtil } from '../../utils/UrlUtil';\nimport type { FastaDataImportDialogRefMethods } from '../FastaDataImportDialog/FastaDataImportDialog';\nimport { FastaDataImportDialog } from '../FastaDataImportDialog/FastaDataImportDialog';\nimport { ErrorUtil } from '../../utils/ErrorUtil';\n\n\nexport type FastaDataImportDialogLoaderProps = {\n extraActions: DialogAction[];\n store: StoreApi<FastaDataStore>;\n};\n\nexport const FastaDataImportDialogLoader = ({ extraActions, store }: FastaDataImportDialogLoaderProps) => {\n const setData = useStore(store, (state) => state.setData);\n const setLoadingStatus = useStore(store, (state) => state.setLoadingStatus);\n const fastaDataImportDialogRef = useRef<FastaDataImportDialogRefMethods>(null);\n\n useEffect(() => {\n const removers = [\n // eslint-disable-next-line @eslint-react/web-api-no-leaked-event-listener\n FastaDataEventBusService.getInstance().addEventListener('onShowImportDialog', (initialErrorMessage?: string) => {\n fastaDataImportDialogRef.current?.open(initialErrorMessage ? { initialErrorMessage } : undefined);\n }),\n // eslint-disable-next-line @eslint-react/web-api-no-leaked-event-listener\n FastaDataEventBusService.getInstance().addEventListener('onCloseImportDialog', () => {\n fastaDataImportDialogRef.current?.close();\n }),\n ];\n return () => {\n removers.forEach((remove) => remove());\n };\n }, []);\n\n useEffect(() => {\n // Scan URL parameters for deep-linking\n const urlParams = new URLSearchParams(window.location.search);\n const inputFastaUrl = urlParams.get('input-fasta');\n const inputMetadataUrl = urlParams.get('input-metadata');\n\n const handleDeepLinking = async () => {\n if (inputFastaUrl) {\n setLoadingStatus(LOADING_STATUS.LOADING);\n try {\n const fastaRes = await fetch(inputFastaUrl);\n if (!fastaRes.ok) {\n throw new Error(`FASTA fetch failed (${fastaRes.status})`);\n }\n const fastaText = await fastaRes.text();\n\n if (!fastaText.trim()) {\n setLoadingStatus(LOADING_STATUS.ERROR);\n throw new Error('The input-fasta URL returned no sequence data. Check that the URL and requested accession(s) are correct.');\n }\n\n let metaText: string | undefined;\n if (inputMetadataUrl) {\n try {\n const metaRes = await fetch(inputMetadataUrl);\n if (metaRes.ok) {\n metaText = await metaRes.text();\n }\n } catch (metaErr) {\n console.warn('[App] Failed to auto-fetch metadata:', metaErr);\n }\n }\n\n await setData(fastaText, metaText);\n } catch (fastaErr) {\n console.error('[App] Failed to auto-load FASTA:', fastaErr);\n const message = fastaErr instanceof Error ? fastaErr.message : 'Failed to auto-load FASTA from the provided URL.';\n FastaDataEventBusService.getInstance().emit('onShowImportDialog', message);\n }\n } else {\n // PV1-02: Show data loading modal if no data provided via URL query params\n FastaDataEventBusService.getInstance().emit('onShowImportDialog');\n }\n };\n\n void handleDeepLinking();\n }, [setData, setLoadingStatus]);\n\n const handleError = useCallback((errorMessage: string) => {\n fastaDataImportDialogRef.current?.close();\n FastaDataEventBusService.getInstance().emit('onShowImportDialog', errorMessage);\n }, []);\n\n const onDataChange = useCallback(async (fastaContent: string, metadataContent?: string) => {\n try {\n await setData(fastaContent, metadataContent);\n fastaDataImportDialogRef.current?.close();\n } catch (e) {\n handleError(ErrorUtil.getErrorMessage(e, 'Unknown error'));\n } finally {\n // clear any search params from the URL\n UrlUtil.clearSearchParams();\n }\n }, [handleError, setData]);\n\n const onError = useCallback((errorMessage: unknown) => {\n handleError(ErrorUtil.getErrorMessage(errorMessage, 'Unknown error'));\n }, [handleError]);\n\n return (\n <>\n <FastaDataImportDialog\n extraActions={extraActions}\n onDataChange={onDataChange}\n onError={onError}\n ref={fastaDataImportDialogRef}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;AAuBA,IAAaG,KAA+B,EAAE,iBAAc,eAA8C;CACxG,IAAMC,IAAUH,EAASI,IAAQ,MAAUC,EAAM,OAAO,GAClDC,IAAmBN,EAASI,IAAQ,MAAUC,EAAM,gBAAgB,GACpEE,IAA2BC,EAAwC,IAAI;CAkB7E,AAhBAC,QAAgB;EACd,IAAMC,IAAW,CAEfC,EAAyB,YAAY,CAAC,CAAC,iBAAiB,uBAAuB,MAAiC;GAC9G,EAAyB,SAAS,KAAKC,IAAsB,EAAE,uBAAoB,IAAI,KAAA,CAAS;EAClG,CAAC,GAEDD,EAAyB,YAAY,CAAC,CAAC,iBAAiB,6BAA6B;GACnF,EAAyB,SAAS,MAAM;EAC1C,CAAC,CACH;EACA,aAAa;GACX,EAAS,SAAS,MAAWE,EAAO,CAAC;EACvC;CACF,GAAG,CAAC,CAAC,GAELJ,QAAgB;EAEd,IAAMK,IAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACtDC,IAAgBD,EAAU,IAAI,aAAa,GAC3CE,IAAmBF,EAAU,IAAI,gBAAgB;EAyCvD,aAvCsC;GACpC,IAAIC,GAAe;IACjB,EAAiBE,EAAe,OAAO;IACvC,IAAI;KACF,IAAMC,IAAW,MAAM,MAAMH,CAAa;KAC1C,IAAI,CAACG,EAAS,IACZ,MAAU,MAAM,uBAAuBA,EAAS,OAAO,EAAE;KAE3D,IAAMC,IAAY,MAAMD,EAAS,KAAK;KAEtC,IAAI,CAACC,EAAU,KAAK,GAElB,MADAb,EAAiBW,EAAe,KAAK,GAC3B,MAAM,2GAA2G;KAG7H,IAAIG;KACJ,IAAIJ,GACF,IAAI;MACF,IAAMK,IAAU,MAAM,MAAML,CAAgB;MAC5C,AAAIK,EAAQ,OACV,IAAW,MAAMA,EAAQ,KAAK;KAElC,SAASC,GAAS;MAChB,QAAQ,KAAK,wCAAwCA,CAAO;KAC9D;KAGF,MAAMnB,EAAQgB,GAAWC,CAAQ;IACnC,SAASG,GAAU;KACjB,QAAQ,MAAM,oCAAoCA,CAAQ;KAC1D,IAAMC,IAAUD,aAAoB,QAAQA,EAAS,UAAU;KAC/D,EAAyB,YAAY,CAAC,CAAC,KAAK,sBAAsBC,CAAO;IAC3E;GACF,OAEE,EAAyB,YAAY,CAAC,CAAC,KAAK,oBAAoB;EAEpE,EAEK,CAAkB;CACzB,GAAG,CAACrB,GAASG,CAAgB,CAAC;CAE9B,IAAMmB,IAAcC,GAAa,MAAyB;EAExD,AADAnB,EAAyB,SAAS,MAAM,GACxCI,EAAyB,YAAY,CAAC,CAAC,KAAK,sBAAsBgB,CAAY;CAChF,GAAG,CAAC,CAAC,GAECC,IAAeF,EAAY,OAAO,GAAsB,MAA6B;EACzF,IAAI;GAEF,AADA,MAAMvB,EAAQ0B,GAAcC,CAAe,GAC3CvB,EAAyB,SAAS,MAAM;EAC1C,SAAS,GAAG;GACV,EAAYwB,EAAU,gBAAgB,GAAG,eAAe,CAAC;EAC3D,UAAU;GAER,EAAQ,kBAAkB;EAC5B;CACF,GAAG,CAACN,GAAatB,CAAO,CAAC,GAEnB6B,IAAUN,GAAa,MAA0B;EACrD,EAAYK,EAAU,gBAAgBJ,GAAc,eAAe,CAAC;CACtE,GAAG,CAACF,CAAW,CAAC;CAEhB,OACE,kBAAA1B,GAAA,EAAA,UACE,kBAACE,GAAD;EACgB;EACA;EACL;EACT,KAAKM;CACN,CAAA,EACD,CAAA;AAEN"}
@@ -1,53 +0,0 @@
1
- import { FastaDataEventBusService as e } from "../../classes/services/FastaDataEventBusService/index.js";
2
- import { Box as t, Button as n, Typography as r } from "@mui/material";
3
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
- import { useCallback as o } from "react";
5
- import s from "@mui/icons-material/FileUploadOutlined";
6
- //#region src/components/FastaNotLoaded/FastaNotLoaded.tsx
7
- var c = ({ description: c, icon: l, title: u }) => {
8
- let d = o(() => {
9
- e.getInstance().emit("onShowImportDialog");
10
- }, []);
11
- return /* @__PURE__ */ a(t, {
12
- sx: {
13
- alignItems: "center",
14
- display: "flex",
15
- flexDirection: "column",
16
- gap: 2,
17
- height: "100%",
18
- justifyContent: "center",
19
- p: 3,
20
- width: "100%"
21
- },
22
- children: [
23
- l,
24
- /* @__PURE__ */ i(r, {
25
- color: "text.secondary",
26
- sx: { fontWeight: 600 },
27
- variant: "h6",
28
- children: u
29
- }),
30
- /* @__PURE__ */ i(r, {
31
- color: "text.secondary",
32
- sx: {
33
- maxWidth: 450,
34
- textAlign: "center"
35
- },
36
- variant: "body2",
37
- children: c
38
- }),
39
- /* @__PURE__ */ i(n, {
40
- color: "primary",
41
- onClick: d,
42
- startIcon: /* @__PURE__ */ i(s, {}),
43
- sx: { mt: 1 },
44
- variant: "contained",
45
- children: "Load Data"
46
- })
47
- ]
48
- });
49
- };
50
- //#endregion
51
- export { c as FastaNotLoaded };
52
-
53
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaNotLoaded","onClickLoadData","useCallback","Box","icon","Typography","title","description","Button"],"sources":["../../../src/components/FastaNotLoaded/FastaNotLoaded.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Typography,\n} from '@mui/material';\nimport FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';\nimport type { ReactNode } from 'react';\nimport { useCallback } from 'react';\n\nimport { FastaDataEventBusService } from '../../classes/services/FastaDataEventBusService';\n\nexport type FastaNotLoadedProps = {\n description: ReactNode;\n icon: ReactNode;\n title: ReactNode;\n};\n\nexport const FastaNotLoaded = ({ description, icon, title }: FastaNotLoadedProps) => {\n const onClickLoadData = useCallback(() => {\n FastaDataEventBusService.getInstance().emit('onShowImportDialog');\n }, []);\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n height: '100%',\n justifyContent: 'center',\n p: 3,\n width: '100%',\n }}\n >\n {icon}\n <Typography\n color={'text.secondary'}\n sx={{ fontWeight: 600 }}\n variant={'h6'}\n >\n {title}\n </Typography>\n <Typography\n color={'text.secondary'}\n sx={{ maxWidth: 450, textAlign: 'center' }}\n variant={'body2'}\n >\n {description}\n </Typography>\n <Button\n color={'primary'}\n onClick={onClickLoadData}\n startIcon={<FileUploadOutlinedIcon />}\n sx={{ mt: 1 }}\n variant={'contained'}\n >\n {'Load Data'}\n </Button>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAiBA,IAAaC,KAAkB,EAAE,gBAAa,SAAM,eAAiC;CACnF,IAAMC,IAAkBC,QAAkB;EACxC,EAAyB,YAAY,CAAC,CAAC,KAAK,oBAAoB;CAClE,GAAG,CAAC,CAAC;CAEL,OACE,kBAACC,GAAD;EACE,IAAI;GACF,YAAY;GACZ,SAAS;GACT,eAAe;GACf,KAAK;GACL,QAAQ;GACR,gBAAgB;GAChB,GAAG;GACH,OAAO;EACT;EAVF,UAAA;GAYGC;GACD,kBAACC,GAAD;IACE,OAAO;IACP,IAAI,EAAE,YAAY,IAAI;IACtB,SAAS;IAER,UAAAC;GACS,CAAA;GACZ,kBAACD,GAAD;IACE,OAAO;IACP,IAAI;KAAE,UAAU;KAAK,WAAW;IAAS;IACzC,SAAS;IAER,UAAAE;GACS,CAAA;GACZ,kBAACC,GAAD;IACE,OAAO;IACP,SAASP;IACT,WAAW,kBAACF,GAAD,CAAyB,CAAA;IACpC,IAAI,EAAE,IAAI,EAAE;IACZ,SAAS;IAER,UAAA;GACK,CAAA;EACL;;AAET"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["useStore","FastaPageHeaderCenterComponent","parsedFasta","store","state","parsedMetadata","seqCount","metaCount","Box","Chip"],"sources":["../../../src/components/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n} from '@mui/material';\nimport type { StoreApi } from 'zustand';\nimport { useStore } from 'zustand';\n\nimport type { FastaDataStore } from '../../stores/fastaDataStore';\n\n\nexport type FastaPageHeaderCenterComponentProps = {\n store: StoreApi<FastaDataStore>;\n};\n\nexport const FastaPageHeaderCenterComponent = ({ store }: FastaPageHeaderCenterComponentProps) => {\n const parsedFasta = useStore(store, (state) => state.parsedFasta);\n const parsedMetadata = useStore(store, (state) => state.parsedMetadata);\n\n const seqCount = parsedFasta?.sequences?.length || 0;\n const metaCount = parsedMetadata?.records?.length || 0;\n\n return (\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1 }}>\n {seqCount > 0 && (\n <Chip\n label={`${seqCount} Sequences`}\n size={'small'}\n sx={{\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: '#FFFFFF',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}\n />\n )}\n {metaCount > 0 && (\n <Chip\n label={`${metaCount} Metadata Records`}\n size={'small'}\n sx={{\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: '#FFFFFF',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}\n />\n )}\n </Box>\n );\n};\n"],"mappings":";;;;AAcA,IAAaC,KAAkC,EAAE,eAAiD;CAChG,IAAMC,IAAcF,EAASG,IAAQ,MAAUC,EAAM,WAAW,GAC1DC,IAAiBL,EAASG,IAAQ,MAAUC,EAAM,cAAc,GAEhEE,IAAWJ,GAAa,WAAW,UAAU,GAC7CK,IAAYF,GAAgB,SAAS,UAAU;CAErD,OACE,kBAACG,GAAD;EAAK,IAAI;GAAE,YAAY;GAAU,SAAS;GAAQ,KAAK;EAAE;EAAzD,UAAA,CACGF,IAAW,KACV,kBAACG,GAAD;GACE,OAAO,GAAGH,EAAS;GACnB,MAAM;GACN,IAAI;IACF,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,YAAY;GACd;EACD,CAAA,GAEFC,IAAY,KACX,kBAACE,GAAD;GACE,OAAO,GAAGF,EAAU;GACpB,MAAM;GACN,IAAI;IACF,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,YAAY;GACd;EACD,CAAA,CAEA;;AAET"}
@@ -1,26 +0,0 @@
1
- import { FastaDataEventBusService as e } from "../../classes/services/FastaDataEventBusService/index.js";
2
- import { Button as t } from "@mui/material";
3
- import { jsx as n } from "react/jsx-runtime";
4
- import { useCallback as r } from "react";
5
- import i from "@mui/icons-material/FileUploadOutlined";
6
- //#region src/components/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx
7
- var a = () => {
8
- let a = r(() => e.getInstance().emit("onShowImportDialog"), []);
9
- return /* @__PURE__ */ n(t, {
10
- color: "inherit",
11
- onClick: a,
12
- size: "small",
13
- startIcon: /* @__PURE__ */ n(i, {}),
14
- sx: {
15
- "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
16
- backgroundColor: "rgba(255, 255, 255, 0.15)",
17
- color: "#FFFFFF"
18
- },
19
- variant: "contained",
20
- children: "Import Data"
21
- });
22
- };
23
- //#endregion
24
- export { a as FastaPageHeaderImportButton };
25
-
26
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaPageHeaderImportButton","onImportDataButtonClick","useCallback","FastaDataEventBusService","Button"],"sources":["../../../src/components/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx"],"sourcesContent":["import FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';\nimport { Button } from '@mui/material';\nimport { useCallback } from 'react';\n\nimport { FastaDataEventBusService } from '../../classes/services/FastaDataEventBusService';\n\nexport const FastaPageHeaderImportButton = () => {\n const onImportDataButtonClick = useCallback(() => FastaDataEventBusService.getInstance().emit('onShowImportDialog'), []);\n\n return (\n <Button\n color={'inherit'}\n onClick={onImportDataButtonClick}\n size={'small'}\n startIcon={<FileUploadOutlinedIcon />}\n sx={{\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\n },\n backgroundColor: 'rgba(255, 255, 255, 0.15)',\n color: '#FFFFFF',\n }}\n variant={'contained'}\n >\n {'Import Data'}\n </Button>\n );\n};\n"],"mappings":";;;;;;AAMA,IAAaC,UAAoC;CAC/C,IAAMC,IAA0BC,QAAkBC,EAAyB,YAAY,CAAC,CAAC,KAAK,oBAAoB,GAAG,CAAC,CAAC;CAEvH,OACE,kBAACC,GAAD;EACE,OAAO;EACP,SAASH;EACT,MAAM;EACN,WAAW,kBAACF,GAAD,CAAyB,CAAA;EACpC,IAAI;GACF,WAAW,EACT,iBAAiB,4BACnB;GACA,iBAAiB;GACjB,OAAO;EACT;EACA,SAAS;EAER,UAAA;CACK,CAAA;AAEZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","RestartAltIcon","FastaPageHeaderResetButton","confirmationRef","useRef","onClickResetSession","useCallback","onConfirm","onReset","Fragment","Tooltip","IconButton","Confirmation"],"sources":["../../../src/components/FastaPageHeaderResetButton/FastaPageHeaderResetButton.tsx"],"sourcesContent":["import RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport {\n IconButton,\n Tooltip,\n} from '@mui/material';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport { Confirmation } from '@gen-epix/ui-core-components/components/Confirmation';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { t } from 'i18next';\n\nexport type FastaPageHeaderResetButtonProps = {\n onReset: () => void;\n};\n\nexport const FastaPageHeaderResetButton = ({ onReset }: FastaPageHeaderResetButtonProps) => {\n const confirmationRef = useRef<ConfirmationRefMethods>(null);\n const onClickResetSession = useCallback(() => {\n confirmationRef.current?.open();\n }, []);\n\n const onConfirm = useCallback(() => {\n onReset();\n }, [onReset]);\n\n return (\n <>\n <Tooltip title={'Reset current session and dataset'}>\n <IconButton\n color={'inherit'}\n onClick={onClickResetSession}\n size={'small'}\n sx={{ opacity: 0.85 }}\n >\n <RestartAltIcon fontSize={'small'} />\n </IconButton>\n </Tooltip>\n <Confirmation\n body={t`Are you sure you want to reset the current session and dataset?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Reset`}\n onConfirm={onConfirm}\n ref={confirmationRef}\n title={t`Reset current session and dataset?`}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;AAiBA,IAAaE,KAA8B,EAAE,iBAA+C;CAC1F,IAAMC,IAAkBC,EAA+B,IAAI,GACrDC,IAAsBC,QAAkB;EAC5C,EAAgB,SAAS,KAAK;CAChC,GAAG,CAAC,CAAC,GAECC,IAAYD,QAAkB;EAClC,EAAQ;CACV,GAAG,CAACE,CAAO,CAAC;CAEZ,OACE,kBAAAR,GAAA,EAAA,UAAA,CACE,kBAACU,GAAD;EAAS,OAAO;EACd,UAAA,kBAACC,GAAD;GACE,OAAO;GACP,SAASN;GACT,MAAM;GACN,IAAI,EAAE,SAAS,IAAK;GAEpB,UAAA,kBAACJ,GAAD,EAAgB,UAAU,QAAU,CAAA;EAC1B,CAAA;CACL,CAAA,GACT,kBAACW,GAAD;EACE,MAAM,CAAC;EACP,aAAa,CAAC;EACd,cAAc,CAAC;EACJ;EACX,KAAKT;EACL,OAAO,CAAC;CACT,CAAA,CACD,EAAA,CAAA;AAEN"}
@@ -1,21 +0,0 @@
1
- import e from "i18next";
2
- import { Fragment as t, jsx as n } from "react/jsx-runtime";
3
- import { useEffect as r, useState as i } from "react";
4
- import { initReactI18next as a } from "react-i18next";
5
- //#region src/components/I18nWrapper/I18nWrapper.tsx
6
- var o = ({ children: o }) => {
7
- let [s, c] = i(!1);
8
- return r(() => {
9
- (async () => {
10
- await e.use(a).init({
11
- interpolation: { escapeValue: !1 },
12
- lng: "en",
13
- resources: { en: { translation: {} } }
14
- }), c(!0);
15
- })();
16
- }, []), /* @__PURE__ */ n(t, { children: s ? o : null });
17
- };
18
- //#endregion
19
- export { o as I18nWrapper };
20
-
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","i18n","I18nWrapper","isInitialized","setIsInitialized","useState","useEffect","initReactI18next","Fragment","children"],"sources":["../../../src/components/I18nWrapper/I18nWrapper.tsx"],"sourcesContent":["import {\n useEffect,\n useState,\n} from 'react';\nimport type { ReactNode } from 'react';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nexport const I18nWrapper = ({ children }: { children: ReactNode }) => {\n const [isInitialized, setIsInitialized] = useState(false);\n\n useEffect(() => {\n const performInitialization = async () => {\n await i18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n lng: 'en',\n resources: {\n en: {\n translation: {\n },\n },\n },\n });\n setIsInitialized(true);\n };\n void performInitialization();\n }, []);\n\n\n return (\n <>\n {isInitialized ? children : null}\n </>\n );\n};\n"],"mappings":";;;;;AAQA,IAAaE,KAAe,EAAE,kBAAwC;CACpE,IAAM,CAACC,GAAeC,KAAoBC,EAAS,EAAK;CAwBxD,OAtBAC,QAAgB;EAkBd,aAjB0C;GAexC,AAdA,MAAML,EACH,IAAIM,CAAgB,CAAC,CACrB,KAAK;IACJ,eAAe,EACb,aAAa,GACf;IACA,KAAK;IACL,WAAW,EACT,IAAI,EACF,aAAa,CACb,EACF,EACF;GACF,CAAC,GACHH,EAAiB,EAAI;EACvB,EACK,CAAsB;CAC7B,GAAG,CAAC,CAAC,GAIH,kBAAAJ,GAAA,EAAA,UACGG,IAAgBM,IAAW,KAC5B,CAAA;AAEN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["HelpOutlineIcon","PageHeaderDocumentationButton","onDocumentationButtonClick","useCallback","Tooltip","IconButton"],"sources":["../../../src/components/PageHeaderDocumentationButton/PageHeaderDocumentationButton.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n IconButton,\n Tooltip,\n} from '@mui/material';\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutlineOutlined';\n\nexport const PageHeaderDocumentationButton = () => {\n const onDocumentationButtonClick = useCallback(() => {\n window.open('https://github.com/RIVM-bioinformatics/loculus-tools', '_blank');\n }, []);\n\n return (\n <Tooltip title={'Documentation & Specifications'}>\n <IconButton\n color={'inherit'}\n onClick={onDocumentationButtonClick}\n size={'small'}\n sx={{ opacity: 0.85 }}\n >\n <HelpOutlineIcon fontSize={'small'} />\n </IconButton>\n </Tooltip>\n );\n};\n"],"mappings":";;;;;AAOA,IAAaC,UAAsC;CACjD,IAAMC,IAA6BC,QAAkB;EACnD,OAAO,KAAK,wDAAwD,QAAQ;CAC9E,GAAG,CAAC,CAAC;CAEL,OACE,kBAACC,GAAD;EAAS,OAAO;EACd,UAAA,kBAACC,GAAD;GACE,OAAO;GACP,SAASH;GACT,MAAM;GACN,IAAI,EAAE,SAAS,IAAK;GAEpB,UAAA,kBAACF,GAAD,EAAiB,UAAU,QAAU,CAAA;EAC3B,CAAA;CACL,CAAA;AAEb"}
@@ -1,4 +0,0 @@
1
- export type ErrorPageCommonProps = {
2
- error: unknown;
3
- };
4
- export declare const ErrorPageCommon: ({ error }: ErrorPageCommonProps) => import('react').JSX.Element;
@@ -1,8 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export type PageCommonProps = {
3
- readonly children: ReactNode;
4
- readonly drawerComponent?: ReactNode;
5
- readonly headerComponent?: ReactNode;
6
- readonly isNoInteraction?: boolean;
7
- };
8
- export declare const PageCommon: ({ children, drawerComponent, headerComponent, isNoInteraction }: PageCommonProps) => import('react').JSX.Element;
@@ -1,6 +0,0 @@
1
- export * from './ErrorPageCommon';
2
- export * from './PageCommon';
3
- export * from './PageCommonContext';
4
- export * from './PageCommonContextProvider';
5
- export * from './PageCommonDrawer';
6
- export * from './PageCommonHeader';
@@ -1,207 +0,0 @@
1
- import "../../constants/page.js";
2
- import { AppBar as e, Box as t, Drawer as n, IconButton as r, Toolbar as i, Typography as a, useTheme as o } from "@mui/material";
3
- import { t as s } from "i18next";
4
- import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
5
- import { createContext as d, use as f, useCallback as p, useEffect as m, useMemo as h, useState as g } from "react";
6
- import _ from "@mui/icons-material/Menu";
7
- //#region src/components/page/ErrorPageCommon.tsx
8
- var v = ({ error: e }) => /* @__PURE__ */ u(t, {
9
- sx: {
10
- alignItems: "center",
11
- display: "flex",
12
- flexDirection: "column",
13
- justifyContent: "center",
14
- width: "100%"
15
- },
16
- children: [
17
- /* @__PURE__ */ l(t, {
18
- sx: { padding: 1 },
19
- children: /* @__PURE__ */ l(a, {
20
- variant: "h1",
21
- children: s`Something went wrong`
22
- })
23
- }),
24
- /* @__PURE__ */ l(t, {
25
- sx: { padding: 1 },
26
- children: /* @__PURE__ */ l(a, {
27
- variant: "body2",
28
- children: e instanceof Error ? e.message : s`An unexpected error occurred.`
29
- })
30
- }),
31
- /* @__PURE__ */ u(t, {
32
- sx: { padding: 1 },
33
- children: [/* @__PURE__ */ l(a, {
34
- variant: "h6",
35
- children: s`Details for our technicians`
36
- }), /* @__PURE__ */ l(t, {
37
- component: "pre",
38
- sx: { fontSize: "0.8rem" },
39
- children: e?.stack
40
- })]
41
- })
42
- ]
43
- }), y = d({
44
- isDrawerOpen: !1,
45
- isNoInteraction: !1,
46
- setIsDrawerOpen: () => null,
47
- setIsNoInteraction: () => null
48
- }), b = ({ children: e, drawerComponent: n, headerComponent: r, isNoInteraction: i }) => {
49
- let a = o(), { isDrawerOpen: s, setIsNoInteraction: c } = f(y);
50
- return m(() => {
51
- c(!!i);
52
- }, [i, c]), /* @__PURE__ */ u(t, {
53
- sx: {
54
- display: "flex",
55
- flexDirection: "column",
56
- height: "100vh",
57
- overflow: "hidden",
58
- position: "relative",
59
- width: "100vw"
60
- },
61
- children: [r, /* @__PURE__ */ u(t, {
62
- sx: {
63
- display: "flex",
64
- flex: 1,
65
- height: "calc(100vh - 56px)",
66
- overflow: "hidden",
67
- position: "relative",
68
- width: "100%"
69
- },
70
- children: [n, /* @__PURE__ */ l(t, {
71
- component: "main",
72
- sx: {
73
- flexGrow: 1,
74
- height: "100%",
75
- overflow: "hidden",
76
- position: "relative",
77
- transition: () => a.transitions.create(["margin", "width"], {
78
- duration: a.transitions.duration.leavingScreen,
79
- easing: a.transitions.easing.sharp
80
- }),
81
- width: s ? "calc(100% - 340px)" : "100%"
82
- },
83
- children: e
84
- })]
85
- })]
86
- });
87
- }, x = ({ children: e }) => {
88
- let [t, n] = g(!1), [r, i] = g(!1), a = h(() => ({
89
- isDrawerOpen: t,
90
- isNoInteraction: r,
91
- setIsDrawerOpen: n,
92
- setIsNoInteraction: i
93
- }), [t, r]);
94
- return /* @__PURE__ */ l(y, {
95
- value: a,
96
- children: e
97
- });
98
- }, S = ({ children: e }) => {
99
- let { isDrawerOpen: t } = f(y);
100
- return /* @__PURE__ */ l(n, {
101
- anchor: "left",
102
- open: t,
103
- sx: {
104
- "& .MuiDrawer-paper": {
105
- height: "calc(100% - 56px)",
106
- overflowY: "auto",
107
- top: "56px",
108
- width: 340
109
- },
110
- flexShrink: 0,
111
- width: t ? 340 : 0
112
- },
113
- variant: "persistent",
114
- children: e
115
- });
116
- }, C = ({ centerComponent: n, icon: o, rightComponent: s, title: d }) => {
117
- let { isDrawerOpen: m, isNoInteraction: h, setIsDrawerOpen: g } = f(y), v = p(() => {
118
- g(!m);
119
- }, [m, g]);
120
- return /* @__PURE__ */ l(e, {
121
- elevation: 1,
122
- position: "static",
123
- sx: {
124
- backgroundColor: "primary.main",
125
- color: "#FFFFFF",
126
- height: 56,
127
- justifyContent: "center",
128
- zIndex: (e) => e.zIndex.drawer + 1
129
- },
130
- children: /* @__PURE__ */ u(i, {
131
- sx: {
132
- display: "flex",
133
- justifyContent: "space-between",
134
- px: 2
135
- },
136
- variant: "dense",
137
- children: [
138
- /* @__PURE__ */ u(t, {
139
- sx: {
140
- alignItems: "center",
141
- display: "flex",
142
- gap: 1.5
143
- },
144
- children: [
145
- !h && /* @__PURE__ */ l(r, {
146
- "aria-label": "open drawer",
147
- color: "inherit",
148
- edge: "start",
149
- onClick: v,
150
- size: "small",
151
- children: /* @__PURE__ */ l(_, {})
152
- }),
153
- o && /* @__PURE__ */ l(c, { children: o }),
154
- /* @__PURE__ */ l(a, {
155
- component: "div",
156
- noWrap: !0,
157
- sx: {
158
- color: "inherit",
159
- fontSize: "1.05rem",
160
- fontWeight: 700,
161
- letterSpacing: "-0.01em"
162
- },
163
- variant: "h6",
164
- children: d
165
- }),
166
- /* @__PURE__ */ l(a, {
167
- sx: {
168
- backgroundColor: "rgba(255, 255, 255, 0.15)",
169
- borderRadius: 1,
170
- display: {
171
- sm: "inline-block",
172
- xs: "none"
173
- },
174
- fontSize: "0.7rem",
175
- fontWeight: 600,
176
- px: 1,
177
- py: .25
178
- },
179
- variant: "caption",
180
- children: "Loculus Tool"
181
- })
182
- ]
183
- }),
184
- /* @__PURE__ */ l(t, {
185
- sx: {
186
- alignItems: "center",
187
- display: "flex",
188
- gap: 1
189
- },
190
- children: n
191
- }),
192
- !h && /* @__PURE__ */ l(t, {
193
- sx: {
194
- alignItems: "center",
195
- display: "flex",
196
- gap: 1
197
- },
198
- children: s
199
- })
200
- ]
201
- })
202
- });
203
- };
204
- //#endregion
205
- export { v as ErrorPageCommon, b as PageCommon, y as PageCommonContext, x as PageCommonContextProvider, S as PageCommonDrawer, C as PageCommonHeader };
206
-
207
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","MenuIcon","ErrorPageCommon","Box","Typography","error","PageCommonContext","createContext","PageCommon","theme","useTheme","use","useEffect","isNoInteraction","setIsNoInteraction","headerComponent","drawerComponent","isDrawerOpen","PageCommonContextProvider","setIsDrawerOpen","useState","contextValue","useMemo","PageCommonDrawer","Drawer","PageCommonHeader","onToggleDrawerButtonClick","useCallback","AppBar","Toolbar","IconButton","icon","Fragment","title","centerComponent","rightComponent"],"sources":["../../../src/components/page/ErrorPageCommon.tsx","../../../src/components/page/PageCommonContext.ts","../../../src/components/page/PageCommon.tsx","../../../src/components/page/PageCommonContextProvider.tsx","../../../src/components/page/PageCommonDrawer.tsx","../../../src/components/page/PageCommonHeader.tsx"],"sourcesContent":["import {\n Box,\n Typography,\n} from '@mui/material';\nimport { t } from 'i18next';\n\nexport type ErrorPageCommonProps = {\n error: unknown;\n};\n\nexport const ErrorPageCommon = ({ error }: ErrorPageCommonProps) => {\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n width: '100%',\n }}\n >\n <Box sx={{ padding: 1 }}>\n <Typography\n variant={'h1'}\n >\n {t`Something went wrong`}\n </Typography>\n </Box>\n <Box sx={{ padding: 1 }}>\n <Typography\n variant={'body2'}\n >\n {error instanceof Error ? error.message : t`An unexpected error occurred.`}\n </Typography>\n </Box>\n <Box sx={{ padding: 1 }}>\n <Typography variant={'h6'}>\n {t`Details for our technicians`}\n </Typography>\n <Box\n component={'pre'}\n sx={{\n fontSize: '0.8rem',\n }}\n >\n {(error as Error)?.stack}\n </Box>\n </Box>\n </Box>\n );\n};\n","import { createContext } from 'react';\n\nexport type PageCommonContextData = {\n readonly isDrawerOpen: boolean;\n readonly isNoInteraction: boolean;\n readonly setIsDrawerOpen: (open: boolean) => void;\n readonly setIsNoInteraction: (open: boolean) => void;\n};\n\nexport const PageCommonContext = createContext<PageCommonContextData>({\n isDrawerOpen: false,\n isNoInteraction: false,\n setIsDrawerOpen: () => null,\n setIsNoInteraction: () => null,\n});\n","import {\n Box,\n useTheme,\n} from '@mui/material';\nimport {\n use,\n useEffect,\n} from 'react';\nimport type { ReactNode } from 'react';\n\nimport { DRAWER_WIDTH } from '../../constants/page';\n\nimport { PageCommonContext } from './PageCommonContext';\n\nexport type PageCommonProps = {\n readonly children: ReactNode;\n readonly drawerComponent?: ReactNode;\n readonly headerComponent?: ReactNode;\n readonly isNoInteraction?: boolean;\n};\n\n\nexport const PageCommon = ({ children, drawerComponent, headerComponent, isNoInteraction }: PageCommonProps) => {\n const theme = useTheme();\n const { isDrawerOpen, setIsNoInteraction } = use(PageCommonContext);\n\n useEffect(() => {\n setIsNoInteraction(!!isNoInteraction);\n }, [isNoInteraction, setIsNoInteraction]);\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100vh',\n overflow: 'hidden',\n position: 'relative',\n width: '100vw',\n }}\n >\n {headerComponent}\n {/* Main Body */}\n <Box\n sx={{\n display: 'flex',\n flex: 1,\n height: 'calc(100vh - 56px)',\n overflow: 'hidden',\n position: 'relative',\n width: '100%',\n }}\n >\n {drawerComponent}\n <Box\n component={'main'}\n sx={{\n flexGrow: 1,\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n transition: () =>\n theme.transitions.create(['margin', 'width'], {\n duration: theme.transitions.duration.leavingScreen,\n easing: theme.transitions.easing.sharp,\n }),\n width: isDrawerOpen ? `calc(100% - ${DRAWER_WIDTH}px)` : '100%',\n }}\n >\n {children}\n </Box>\n\n </Box>\n </Box>\n );\n};\n","import {\n useMemo,\n useState,\n} from 'react';\nimport type { PropsWithChildren } from 'react';\n\nimport type { PageCommonContextData } from './PageCommonContext';\nimport { PageCommonContext } from './PageCommonContext';\n\nexport type PageCommonContextProviderProps = PropsWithChildren;\n\nexport const PageCommonContextProvider = ({ children }: PageCommonContextProviderProps) => {\n const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n const [isNoInteraction, setIsNoInteraction] = useState(false);\n\n const contextValue = useMemo<PageCommonContextData>(() => {\n return {\n isDrawerOpen,\n isNoInteraction,\n setIsDrawerOpen,\n setIsNoInteraction,\n };\n }, [isDrawerOpen, isNoInteraction]);\n\n return (\n <PageCommonContext value={contextValue}>\n { children }\n </PageCommonContext>\n );\n};\n","import { Drawer } from '@mui/material';\nimport { use } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { DRAWER_WIDTH } from '../../constants/page';\n\nimport { PageCommonContext } from './PageCommonContext';\n\nexport type PageCommonDrawerProps = {\n readonly children: ReactNode;\n};\n\nexport const PageCommonDrawer = ({ children }: PageCommonDrawerProps) => {\n const { isDrawerOpen } = use(PageCommonContext);\n\n return (\n <Drawer\n anchor={'left'}\n open={isDrawerOpen}\n sx={{\n '& .MuiDrawer-paper': {\n height: 'calc(100% - 56px)',\n overflowY: 'auto',\n top: '56px',\n width: DRAWER_WIDTH,\n },\n flexShrink: 0,\n width: isDrawerOpen ? DRAWER_WIDTH : 0,\n }}\n variant={'persistent'}\n >\n {children}\n </Drawer>\n );\n};\n","import type { ReactNode } from 'react';\nimport {\n use,\n useCallback,\n} from 'react';\nimport {\n AppBar,\n Box,\n IconButton,\n Toolbar,\n Typography,\n} from '@mui/material';\nimport MenuIcon from '@mui/icons-material/Menu';\n\nimport { PageCommonContext } from './PageCommonContext';\n\nexport type PageCommonHeaderProps = {\n readonly centerComponent?: ReactNode;\n readonly icon?: ReactNode;\n readonly rightComponent?: ReactNode;\n readonly title: string;\n};\n\nexport const PageCommonHeader = ({ centerComponent, icon, rightComponent, title }: PageCommonHeaderProps) => {\n const { isDrawerOpen, isNoInteraction, setIsDrawerOpen } = use(PageCommonContext);\n\n const onToggleDrawerButtonClick = useCallback(() => {\n setIsDrawerOpen(!isDrawerOpen);\n }, [isDrawerOpen, setIsDrawerOpen]);\n\n return (\n <AppBar\n elevation={1}\n position={'static'}\n sx={{\n backgroundColor: 'primary.main',\n color: '#FFFFFF',\n height: 56,\n justifyContent: 'center',\n zIndex: (theme) => theme.zIndex.drawer + 1,\n }}\n >\n <Toolbar\n sx={{ display: 'flex', justifyContent: 'space-between', px: 2 }}\n variant={'dense'}\n >\n {/* Left: Menu toggle and App Branding */}\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1.5 }}>\n {!isNoInteraction && (\n <IconButton\n aria-label={'open drawer'}\n color={'inherit'}\n edge={'start'}\n onClick={onToggleDrawerButtonClick}\n size={'small'}\n >\n <MenuIcon />\n </IconButton>\n )}\n {icon && (\n <>\n {icon}\n </>\n )}\n <Typography\n component={'div'}\n noWrap\n sx={{ color: 'inherit', fontSize: '1.05rem', fontWeight: 700, letterSpacing: '-0.01em' }}\n variant={'h6'}\n >\n {title}\n </Typography>\n <Typography\n sx={{\n backgroundColor: 'rgba(255, 255, 255, 0.15)',\n borderRadius: 1,\n display: { sm: 'inline-block', xs: 'none' },\n fontSize: '0.7rem',\n fontWeight: 600,\n px: 1,\n py: 0.25,\n }}\n variant={'caption'}\n >\n {'Loculus Tool'}\n </Typography>\n </Box>\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1 }}>\n {centerComponent}\n </Box>\n {!isNoInteraction && (\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1 }}>\n {rightComponent}\n </Box>\n )}\n </Toolbar>\n </AppBar>\n );\n};\n"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- //#region src/constants/page.ts
2
- var e = 340;
3
- //#endregion
4
- export { e as DRAWER_WIDTH };
5
-
6
- //# sourceMappingURL=page.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page.js","names":["DRAWER_WIDTH"],"sources":["../../src/constants/page.ts"],"sourcesContent":["export const DRAWER_WIDTH = 340;\n"],"mappings":";AAAA,IAAaA,IAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fasta.js","names":["LOADING_STATUS","\"ERROR\"","\"IDLE\"","\"LOADING\"","\"SUCCESS\""],"sources":["../../src/models/fasta.ts"],"sourcesContent":["export enum LOADING_STATUS {\n ERROR = 'ERROR',\n IDLE = 'IDLE',\n LOADING = 'LOADING',\n SUCCESS = 'SUCCESS',\n}\n\nexport type FastaParseResult = {\n error?: string;\n expectedLength: number;\n invalidSequences?: { id: string; length: number }[];\n isAligned: boolean;\n sequences: FastaSequence[];\n};\n\nexport type FastaSequence = {\n accessionVersion: string;\n header: string;\n id: string;\n length: number;\n sequence: string;\n};\n"],"mappings":";AAAA,IAAYA,IAAL,yBAAA,GAAA;QACL,EAAAC,QAAA,SACA,EAAAC,OAAA,QACA,EAAAC,UAAA,WACA,EAAAC,UAAA;AACF,EAAA,CAAA,CAAA"}
File without changes
File without changes