@rivm-loculus-tools/common-frontend 0.7.0 → 0.9.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 (36) hide show
  1. package/dist/@types/common-frontend.d.ts +2 -0
  2. package/dist/@types/mui.d.ts +48 -0
  3. package/dist/components/fasta/FastaDataImportDialog/index.js +3 -3
  4. package/dist/components/fasta/FastaDataImportDialog/index.js.map +1 -1
  5. package/dist/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.d.ts +4 -0
  6. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js +18 -22
  7. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js.map +1 -1
  8. package/dist/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.d.ts +4 -0
  9. package/dist/components/fasta/FastaPageHeaderImportButton/index.js +17 -15
  10. package/dist/components/fasta/FastaPageHeaderImportButton/index.js.map +1 -1
  11. package/dist/components/ui/ButtonWithMenu/ButtonWithMenu.d.ts +7 -1
  12. package/dist/components/ui/ButtonWithMenu/index.js +32 -27
  13. package/dist/components/ui/ButtonWithMenu/index.js.map +1 -1
  14. package/dist/components/ui/PageCommon/index.js +1 -1
  15. package/dist/components/ui/PageCommonDrawer/index.js +1 -1
  16. package/dist/components/ui/PageCommonHeader/PageCommonHeader.d.ts +5 -1
  17. package/dist/components/ui/PageCommonHeader/index.js +42 -35
  18. package/dist/components/ui/PageCommonHeader/index.js.map +1 -1
  19. package/dist/components/ui/SearchBar/SearchBar.d.ts +15 -0
  20. package/dist/components/ui/SearchBar/SearchBarNodeCounter.d.ts +8 -0
  21. package/dist/components/ui/SearchBar/index.js +136 -0
  22. package/dist/components/ui/SearchBar/index.js.map +1 -0
  23. package/dist/constants/page.constants.d.ts +1 -1
  24. package/dist/constants/page.constants.js +1 -1
  25. package/dist/constants/page.constants.js.map +1 -1
  26. package/dist/theme/demoTheme/index.js +26 -1
  27. package/dist/theme/demoTheme/index.js.map +1 -1
  28. package/dist/utils/UrlUtil/UrlUtil.d.ts +1 -0
  29. package/dist/utils/UrlUtil/index.js +4 -0
  30. package/dist/utils/UrlUtil/index.js.map +1 -1
  31. package/package.json +9 -5
  32. package/dist/components/SearchBar/SearchBar.d.ts +0 -10
  33. package/dist/components/SearchBar/SearchBarNodeCounter.d.ts +0 -4
  34. package/dist/components/SearchBar/index.js +0 -128
  35. package/dist/components/SearchBar/index.js.map +0 -1
  36. /package/dist/components/{SearchBar → ui/SearchBar}/index.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ /* eslint-disable import-x/unambiguous */
2
+ /// <reference types="./mui.d.ts" />
@@ -0,0 +1,48 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import type { ComponentsProps } from '@mui/material/styles';
3
+
4
+ import type { FastaPageHeaderCenterComponentTheme } from '../components/fasta/FastaPageHeaderCenterComponent';
5
+ import type { FastaPageHeaderImportButtonTheme } from '../components/fasta/FastaPageHeaderImportButton';
6
+ import type {
7
+ SearchBarNodeCounterProps,
8
+ SearchBarNodeCounterTheme,
9
+ } from '../components/ui/SearchBar/SearchBarNodeCounter';
10
+ import type {
11
+ ButtonWithMenuProps,
12
+ ButtonWithMenuTheme,
13
+ } from '../components/ui/ButtonWithMenu/ButtonWithMenu';
14
+ import type {
15
+ PageCommonHeaderProps,
16
+ PageCommonHeaderTheme,
17
+ } from '../components/ui/PageCommonHeader';
18
+ import type {
19
+ SearchBarProps,
20
+ SearchBarTheme,
21
+ } from '../components/ui/SearchBar';
22
+
23
+ declare module '@mui/material/styles' {
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Required to augment MUI's generic interface.
25
+ interface Components<TTheme = unknown> {
26
+ RivmLoculusToolsCommonFrontendButtonWithMenu?: {
27
+ defaultProps?: ComponentsProps['RivmLoculusToolsCommonFrontendButtonWithMenu'];
28
+ } & ButtonWithMenuTheme;
29
+ RivmLoculusToolsCommonFrontendFastaPageHeaderCenterComponent?: FastaPageHeaderCenterComponentTheme;
30
+ RivmLoculusToolsCommonFrontendFastaPageHeaderImportButton?: FastaPageHeaderImportButtonTheme;
31
+ RivmLoculusToolsCommonFrontendPageCommonHeader?: {
32
+ defaultProps?: ComponentsProps['RivmLoculusToolsCommonFrontendPageCommonHeader'];
33
+ } & PageCommonHeaderTheme;
34
+ RivmLoculusToolsCommonFrontendSearchBar?: {
35
+ defaultProps?: ComponentsProps['RivmLoculusToolsCommonFrontendSearchBar'];
36
+ } & SearchBarTheme;
37
+ RivmLoculusToolsCommonFrontendSearchBarNodeCounter?: {
38
+ defaultProps?: ComponentsProps['RivmLoculusToolsCommonFrontendSearchBarNodeCounter'];
39
+ } & SearchBarNodeCounterTheme;
40
+ }
41
+
42
+ interface ComponentsPropsList {
43
+ RivmLoculusToolsCommonFrontendButtonWithMenu: ButtonWithMenuProps;
44
+ RivmLoculusToolsCommonFrontendPageCommonHeader: PageCommonHeaderProps;
45
+ RivmLoculusToolsCommonFrontendSearchBar: SearchBarProps;
46
+ RivmLoculusToolsCommonFrontendSearchBarNodeCounter: SearchBarNodeCounterProps;
47
+ }
48
+ }
@@ -114,7 +114,7 @@ var v = _(({ extraActions: _, onActionsChange: v, onClose: y, onDataChange: b, o
114
114
  children: [/* @__PURE__ */ l(m, { color: "primary" }), /* @__PURE__ */ l(s, {
115
115
  sx: { fontWeight: 700 },
116
116
  variant: "subtitle1",
117
- children: "1. FASTA Sequences (Required)"
117
+ children: "1. FASTA Sequences (required)"
118
118
  })]
119
119
  }),
120
120
  /* @__PURE__ */ l(s, {
@@ -213,7 +213,7 @@ var v = _(({ extraActions: _, onActionsChange: v, onClose: y, onDataChange: b, o
213
213
  children: [/* @__PURE__ */ l(h, { color: "primary" }), /* @__PURE__ */ l(s, {
214
214
  sx: { fontWeight: 700 },
215
215
  variant: "subtitle1",
216
- children: "2. TSV Metadata (Optional)"
216
+ children: "2. TSV Metadata (optional)"
217
217
  })]
218
218
  }),
219
219
  /* @__PURE__ */ l(s, {
@@ -298,7 +298,7 @@ var v = _(({ extraActions: _, onActionsChange: v, onClose: y, onDataChange: b, o
298
298
  })]
299
299
  })] });
300
300
  }, {
301
- defaultTitle: "Load Phylogenetic Data",
301
+ defaultTitle: "Load phylogenetic data",
302
302
  fullWidth: !0,
303
303
  maxWidth: "xl",
304
304
  testId: "FastaDataImportDialog"
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","DnaIcon","TableChartIcon","FastaDataImportDialog","withDialog","fastaTab","setFastaTab","useState","fastaFile","setFastaFile","fastaUrl","setFastaUrl","fastaText","setFastaText","metadataTab","setMetadataTab","metadataFile","setMetadataFile","metadataUrl","setMetadataUrl","metadataText","setMetadataText","isLoading","setIsLoading","errorMsg","setErrorMsg","useEffect","openProps","onNoCloseButtonChange","onDisableBackdropClickChange","onCloseError","useCallback","onChangeFastaTab","value","onChangeMetadataTab","onFileSelectedFasta","file","onFileSelectedMetadata","onChangeFastaUrl","event","onChangeFastaText","onChangeMetadataUrl","onChangeMetadataText","onClickLoadData","fastaContent","res","metadataContent","onDataChange","onClose","err","onError","actions","CircularProgress","extraActions","onActionsChange","Fragment","Alert","Box","Paper","Typography","Tabs","Tab","FileDropZone","TextField"],"sources":["../../../../src/components/fasta/FastaDataImportDialog/FastaDataImportDialog.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport {\n Alert,\n Box,\n CircularProgress,\n Paper,\n Tab,\n Tabs,\n TextField,\n Typography,\n} from '@mui/material';\nimport DnaIcon from '@mui/icons-material/Biotech';\nimport TableChartIcon from '@mui/icons-material/TableChart';\nimport { FileDropZone } from '@gen-epix/ui-core-components/components/FileDropZone';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\n\n\nenum FASTA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nenum META_DATA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nexport interface FastaDataImportDialogOpenProps {\n initialErrorMessage?: string;\n}\n\nexport interface FastaDataImportDialogProps extends WithDialogRenderProps<FastaDataImportDialogOpenProps> {\n extraActions?: DialogAction[];\n onDataChange: (fasta: string, metaData?: string) => void;\n onError: (error: unknown) => void;\n}\n\nexport type FastaDataImportDialogRefMethods = WithDialogRefMethods<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>;\n\nexport const FastaDataImportDialog = withDialog<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>((\n {\n extraActions,\n onActionsChange,\n onClose,\n onDataChange,\n onDisableBackdropClickChange,\n onError,\n onNoCloseButtonChange,\n openProps,\n }: FastaDataImportDialogProps,\n): ReactElement => {\n // FASTA state\n const [fastaTab, setFastaTab] = useState(FASTA_TAB.DROP);\n const [fastaFile, setFastaFile] = useState<FileList | null>(null);\n const [fastaUrl, setFastaUrl] = useState('');\n const [fastaText, setFastaText] = useState('');\n\n // Metadata state\n const [metadataTab, setMetadataTab] = useState(META_DATA_TAB.DROP);\n const [metadataFile, setMetadataFile] = useState<FileList | null>(null);\n const [metadataUrl, setMetadataUrl] = useState('');\n const [metadataText, setMetadataText] = useState('');\n\n const [isLoading, setIsLoading] = useState(false);\n const [errorMsg, setErrorMsg] = useState<null | string>(null);\n\n useEffect(() => {\n setErrorMsg(openProps?.initialErrorMessage ?? null);\n }, [openProps]);\n\n useEffect(() => {\n if (onNoCloseButtonChange) {\n onNoCloseButtonChange(!!openProps?.initialErrorMessage);\n }\n if (onDisableBackdropClickChange) {\n onDisableBackdropClickChange(!!openProps?.initialErrorMessage);\n }\n }, [onDisableBackdropClickChange, onNoCloseButtonChange, openProps?.initialErrorMessage]);\n\n const onCloseError = useCallback(() => setErrorMsg(null), []);\n const onChangeFastaTab = useCallback((_event: SyntheticEvent, value: number) => {\n setFastaTab(value);\n }, []);\n const onChangeMetadataTab = useCallback((_event: SyntheticEvent, value: number) => {\n setMetadataTab(value);\n }, []);\n const onFileSelectedFasta = useCallback((file: FileList) => setFastaFile(file), []);\n const onFileSelectedMetadata = useCallback((file: FileList) => setMetadataFile(file), []);\n const onChangeFastaUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaUrl(event.target.value);\n }, []);\n const onChangeFastaText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaText(event.target.value);\n }, []);\n const onChangeMetadataUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataUrl(event.target.value);\n }, []);\n const onChangeMetadataText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataText(event.target.value);\n }, []);\n\n const onClickLoadData = useCallback(async () => {\n setErrorMsg(null);\n setIsLoading(true);\n\n try {\n // 1. Resolve FASTA content\n let fastaContent = '';\n if (fastaTab === FASTA_TAB.DROP && fastaFile) {\n fastaContent = await fastaFile[0].text();\n } else if (fastaTab === FASTA_TAB.URL && fastaUrl.trim()) {\n const res = await fetch(fastaUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch FASTA from URL (${res.status} ${res.statusText})`);\n }\n fastaContent = await res.text();\n } else if (fastaTab === FASTA_TAB.PASTE && fastaText.trim()) {\n fastaContent = fastaText.trim();\n }\n\n if (!fastaContent?.trim()) {\n throw new Error('Please provide FASTA sequence data via file, URL, or paste.');\n }\n\n // 2. Resolve Metadata content (optional)\n let metadataContent = '';\n if (metadataTab === META_DATA_TAB.DROP && metadataFile) {\n metadataContent = await metadataFile[0].text();\n } else if (metadataTab === META_DATA_TAB.URL && metadataUrl.trim()) {\n const res = await fetch(metadataUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch Metadata from URL (${res.status} ${res.statusText})`);\n }\n metadataContent = await res.text();\n } else if (metadataTab === META_DATA_TAB.PASTE && metadataText.trim()) {\n metadataContent = metadataText.trim();\n }\n onDataChange(fastaContent, metadataContent);\n if (onClose) {\n onClose();\n }\n } catch (err: unknown) {\n console.error('Data import failed:', err);\n onError(err);\n } finally {\n setIsLoading(false);\n }\n }, [fastaFile, fastaTab, fastaText, fastaUrl, metadataFile, metadataTab, metadataText, metadataUrl, onClose, onDataChange, onError]);\n\n\n useEffect(() => {\n const actions: DialogAction[] = [\n {\n disabled: isLoading,\n label: isLoading ? 'Processing...' : 'Load & Calculate',\n onClick: onClickLoadData,\n startIcon: isLoading ? (\n <CircularProgress\n color={'inherit'}\n size={18}\n />\n ) : undefined,\n variant: 'contained',\n },\n ];\n if (extraActions?.length) {\n actions.unshift(...extraActions);\n }\n if (onActionsChange) {\n onActionsChange(actions);\n }\n }, [onActionsChange, onClickLoadData, isLoading, extraActions]);\n\n return (\n <>\n {errorMsg && (\n <Alert\n onClose={onCloseError}\n severity={'error'}\n sx={{\n marginBottom: 2,\n }}\n >\n {errorMsg}\n </Alert>\n )}\n <Box sx={{ display: 'grid', gap: 3, gridTemplateColumns: { md: '1fr 1fr', xs: '1fr' } }}>\n {/* FASTA Sequences Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <DnaIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'1. FASTA Sequences (Required)'}\n </Typography>\n </Box>\n <Typography\n color={'text.secondary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Pre-aligned nucleotide or amino-acid sequence data.'}\n </Typography>\n <Tabs\n onChange={onChangeFastaTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={fastaTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {fastaTab === FASTA_TAB.DROP && (\n <FileDropZone\n accept={'.fasta,.fa,.fna,.aln'}\n files={fastaFile}\n helperText={'Drag & drop .fasta / .fa alignment file'}\n onFilesSelected={onFileSelectedFasta}\n />\n )}\n {fastaTab === FASTA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a FASTA alignment'}\n label={'FASTA URL'}\n onChange={onChangeFastaUrl}\n placeholder={'https://example.com/sequences.fasta'}\n value={fastaUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {fastaTab === FASTA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste FASTA Content'}\n multiline\n onChange={onChangeFastaText}\n placeholder={'>seq1&#10;ACTG...&#10;>seq2&#10;ACTG...'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={fastaText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n {/* TSV Metadata Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <TableChartIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'2. TSV Metadata (Optional)'}\n </Typography>\n </Box>\n <Typography\n color={'text.primary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Sample attributes for coloring, search & custom leaf labels.'}\n </Typography>\n <Tabs\n onChange={onChangeMetadataTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={metadataTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {metadataTab === META_DATA_TAB.DROP && (\n <FileDropZone\n accept={'.tsv,.txt,.csv'}\n files={metadataFile}\n label={'TSV Metadata File'}\n onFilesSelected={onFileSelectedMetadata}\n />\n )}\n {metadataTab === META_DATA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a TSV metadata file'}\n label={'Metadata TSV URL'}\n onChange={onChangeMetadataUrl}\n placeholder={'https://example.com/metadata.tsv'}\n value={metadataUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {metadataTab === META_DATA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste TSV Content'}\n multiline\n onChange={onChangeMetadataText}\n placeholder={'SampleID&#9;Country&#9;Date&#10;Sample1&#9;NL&#9;2024-01-01'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={metadataText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n </Box>\n </>\n );\n}, {\n defaultTitle: 'Load Phylogenetic Data',\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'FastaDataImportDialog',\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_Fragment","DnaIcon","TableChartIcon","FastaDataImportDialog","withDialog","fastaTab","setFastaTab","useState","fastaFile","setFastaFile","fastaUrl","setFastaUrl","fastaText","setFastaText","metadataTab","setMetadataTab","metadataFile","setMetadataFile","metadataUrl","setMetadataUrl","metadataText","setMetadataText","isLoading","setIsLoading","errorMsg","setErrorMsg","useEffect","openProps","onNoCloseButtonChange","onDisableBackdropClickChange","onCloseError","useCallback","onChangeFastaTab","value","onChangeMetadataTab","onFileSelectedFasta","file","onFileSelectedMetadata","onChangeFastaUrl","event","onChangeFastaText","onChangeMetadataUrl","onChangeMetadataText","onClickLoadData","fastaContent","res","metadataContent","onDataChange","onClose","err","onError","actions","CircularProgress","extraActions","onActionsChange","Fragment","Alert","Box","Paper","Typography","Tabs","Tab","FileDropZone","TextField"],"sources":["../../../../src/components/fasta/FastaDataImportDialog/FastaDataImportDialog.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport {\n Alert,\n Box,\n CircularProgress,\n Paper,\n Tab,\n Tabs,\n TextField,\n Typography,\n} from '@mui/material';\nimport DnaIcon from '@mui/icons-material/Biotech';\nimport TableChartIcon from '@mui/icons-material/TableChart';\nimport { FileDropZone } from '@gen-epix/ui-core-components/components/FileDropZone';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\n\n\nenum FASTA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nenum META_DATA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nexport interface FastaDataImportDialogOpenProps {\n initialErrorMessage?: string;\n}\n\nexport interface FastaDataImportDialogProps extends WithDialogRenderProps<FastaDataImportDialogOpenProps> {\n extraActions?: DialogAction[];\n onDataChange: (fasta: string, metaData?: string) => void;\n onError: (error: unknown) => void;\n}\n\nexport type FastaDataImportDialogRefMethods = WithDialogRefMethods<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>;\n\nexport const FastaDataImportDialog = withDialog<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>((\n {\n extraActions,\n onActionsChange,\n onClose,\n onDataChange,\n onDisableBackdropClickChange,\n onError,\n onNoCloseButtonChange,\n openProps,\n }: FastaDataImportDialogProps,\n): ReactElement => {\n // FASTA state\n const [fastaTab, setFastaTab] = useState(FASTA_TAB.DROP);\n const [fastaFile, setFastaFile] = useState<FileList | null>(null);\n const [fastaUrl, setFastaUrl] = useState('');\n const [fastaText, setFastaText] = useState('');\n\n // Metadata state\n const [metadataTab, setMetadataTab] = useState(META_DATA_TAB.DROP);\n const [metadataFile, setMetadataFile] = useState<FileList | null>(null);\n const [metadataUrl, setMetadataUrl] = useState('');\n const [metadataText, setMetadataText] = useState('');\n\n const [isLoading, setIsLoading] = useState(false);\n const [errorMsg, setErrorMsg] = useState<null | string>(null);\n\n useEffect(() => {\n setErrorMsg(openProps?.initialErrorMessage ?? null);\n }, [openProps]);\n\n useEffect(() => {\n if (onNoCloseButtonChange) {\n onNoCloseButtonChange(!!openProps?.initialErrorMessage);\n }\n if (onDisableBackdropClickChange) {\n onDisableBackdropClickChange(!!openProps?.initialErrorMessage);\n }\n }, [onDisableBackdropClickChange, onNoCloseButtonChange, openProps?.initialErrorMessage]);\n\n const onCloseError = useCallback(() => setErrorMsg(null), []);\n const onChangeFastaTab = useCallback((_event: SyntheticEvent, value: number) => {\n setFastaTab(value);\n }, []);\n const onChangeMetadataTab = useCallback((_event: SyntheticEvent, value: number) => {\n setMetadataTab(value);\n }, []);\n const onFileSelectedFasta = useCallback((file: FileList) => setFastaFile(file), []);\n const onFileSelectedMetadata = useCallback((file: FileList) => setMetadataFile(file), []);\n const onChangeFastaUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaUrl(event.target.value);\n }, []);\n const onChangeFastaText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaText(event.target.value);\n }, []);\n const onChangeMetadataUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataUrl(event.target.value);\n }, []);\n const onChangeMetadataText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataText(event.target.value);\n }, []);\n\n const onClickLoadData = useCallback(async () => {\n setErrorMsg(null);\n setIsLoading(true);\n\n try {\n // 1. Resolve FASTA content\n let fastaContent = '';\n if (fastaTab === FASTA_TAB.DROP && fastaFile) {\n fastaContent = await fastaFile[0].text();\n } else if (fastaTab === FASTA_TAB.URL && fastaUrl.trim()) {\n const res = await fetch(fastaUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch FASTA from URL (${res.status} ${res.statusText})`);\n }\n fastaContent = await res.text();\n } else if (fastaTab === FASTA_TAB.PASTE && fastaText.trim()) {\n fastaContent = fastaText.trim();\n }\n\n if (!fastaContent?.trim()) {\n throw new Error('Please provide FASTA sequence data via file, URL, or paste.');\n }\n\n // 2. Resolve Metadata content (optional)\n let metadataContent = '';\n if (metadataTab === META_DATA_TAB.DROP && metadataFile) {\n metadataContent = await metadataFile[0].text();\n } else if (metadataTab === META_DATA_TAB.URL && metadataUrl.trim()) {\n const res = await fetch(metadataUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch Metadata from URL (${res.status} ${res.statusText})`);\n }\n metadataContent = await res.text();\n } else if (metadataTab === META_DATA_TAB.PASTE && metadataText.trim()) {\n metadataContent = metadataText.trim();\n }\n onDataChange(fastaContent, metadataContent);\n if (onClose) {\n onClose();\n }\n } catch (err: unknown) {\n console.error('Data import failed:', err);\n onError(err);\n } finally {\n setIsLoading(false);\n }\n }, [fastaFile, fastaTab, fastaText, fastaUrl, metadataFile, metadataTab, metadataText, metadataUrl, onClose, onDataChange, onError]);\n\n\n useEffect(() => {\n const actions: DialogAction[] = [\n {\n disabled: isLoading,\n label: isLoading ? 'Processing...' : 'Load & Calculate',\n onClick: onClickLoadData,\n startIcon: isLoading ? (\n <CircularProgress\n color={'inherit'}\n size={18}\n />\n ) : undefined,\n variant: 'contained',\n },\n ];\n if (extraActions?.length) {\n actions.unshift(...extraActions);\n }\n if (onActionsChange) {\n onActionsChange(actions);\n }\n }, [onActionsChange, onClickLoadData, isLoading, extraActions]);\n\n return (\n <>\n {errorMsg && (\n <Alert\n onClose={onCloseError}\n severity={'error'}\n sx={{\n marginBottom: 2,\n }}\n >\n {errorMsg}\n </Alert>\n )}\n <Box sx={{ display: 'grid', gap: 3, gridTemplateColumns: { md: '1fr 1fr', xs: '1fr' } }}>\n {/* FASTA Sequences Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <DnaIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'1. FASTA Sequences (required)'}\n </Typography>\n </Box>\n <Typography\n color={'text.secondary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Pre-aligned nucleotide or amino-acid sequence data.'}\n </Typography>\n <Tabs\n onChange={onChangeFastaTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={fastaTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {fastaTab === FASTA_TAB.DROP && (\n <FileDropZone\n accept={'.fasta,.fa,.fna,.aln'}\n files={fastaFile}\n helperText={'Drag & drop .fasta / .fa alignment file'}\n onFilesSelected={onFileSelectedFasta}\n />\n )}\n {fastaTab === FASTA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a FASTA alignment'}\n label={'FASTA URL'}\n onChange={onChangeFastaUrl}\n placeholder={'https://example.com/sequences.fasta'}\n value={fastaUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {fastaTab === FASTA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste FASTA Content'}\n multiline\n onChange={onChangeFastaText}\n placeholder={'>seq1&#10;ACTG...&#10;>seq2&#10;ACTG...'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={fastaText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n {/* TSV Metadata Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <TableChartIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'2. TSV Metadata (optional)'}\n </Typography>\n </Box>\n <Typography\n color={'text.primary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Sample attributes for coloring, search & custom leaf labels.'}\n </Typography>\n <Tabs\n onChange={onChangeMetadataTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={metadataTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {metadataTab === META_DATA_TAB.DROP && (\n <FileDropZone\n accept={'.tsv,.txt,.csv'}\n files={metadataFile}\n label={'TSV Metadata File'}\n onFilesSelected={onFileSelectedMetadata}\n />\n )}\n {metadataTab === META_DATA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a TSV metadata file'}\n label={'Metadata TSV URL'}\n onChange={onChangeMetadataUrl}\n placeholder={'https://example.com/metadata.tsv'}\n value={metadataUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {metadataTab === META_DATA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste TSV Content'}\n multiline\n onChange={onChangeMetadataText}\n placeholder={'SampleID&#9;Country&#9;Date&#10;Sample1&#9;NL&#9;2024-01-01'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={metadataText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n </Box>\n </>\n );\n}, {\n defaultTitle: 'Load phylogenetic data',\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'FastaDataImportDialog',\n});\n"],"mappings":"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"}
@@ -1,6 +1,10 @@
1
+ import { ComponentsOverrides, Theme } from '@mui/material/styles';
1
2
  import { StoreApi } from 'zustand';
2
3
  import { FastaDataStore } from '../../../stores/fastaDataStore';
3
4
  export type FastaPageHeaderCenterComponentProps = {
4
5
  store: StoreApi<FastaDataStore>;
5
6
  };
7
+ export type FastaPageHeaderCenterComponentTheme = {
8
+ styleOverrides?: ComponentsOverrides<Theme>['MuiChip'];
9
+ };
6
10
  export declare const FastaPageHeaderCenterComponent: ({ store }: FastaPageHeaderCenterComponentProps) => import('react').JSX.Element;
@@ -1,36 +1,32 @@
1
1
  import { t as e } from "../../../_chunks/react.js";
2
- import { Box as t, Chip as n } from "@mui/material";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
2
+ import { Box as t, Chip as n, styled as r } from "@mui/material";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
4
  // src/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx
5
- var a = ({ store: a }) => {
6
- let o = e(a, (e) => e.parsedFasta), s = e(a, (e) => e.parsedMetadata), c = o?.sequences?.length || 0, l = s?.records?.length || 0;
7
- return /* @__PURE__ */ i(t, {
5
+ var o = r(n, {
6
+ name: "RivmLoculusToolsCommonFrontendFastaPageHeaderCenterComponent",
7
+ slot: "Root"
8
+ })({
9
+ backgroundColor: "rgba(255, 255, 255, 0.2)",
10
+ color: "#FFFFFF",
11
+ fontSize: "0.75rem",
12
+ fontWeight: 600
13
+ }), s = ({ store: n }) => {
14
+ let r = e(n, (e) => e.parsedFasta), s = e(n, (e) => e.parsedMetadata), c = r?.sequences?.length || 0, l = s?.records?.length || 0;
15
+ return /* @__PURE__ */ a(t, {
8
16
  sx: {
9
17
  alignItems: "center",
10
18
  display: "flex",
11
19
  gap: 1
12
20
  },
13
- children: [c > 0 && /* @__PURE__ */ r(n, {
21
+ children: [c > 0 && /* @__PURE__ */ i(o, {
14
22
  label: `${c} Sequences`,
15
- size: "small",
16
- sx: {
17
- backgroundColor: "rgba(255, 255, 255, 0.2)",
18
- color: "#FFFFFF",
19
- fontSize: "0.75rem",
20
- fontWeight: 600
21
- }
22
- }), l > 0 && /* @__PURE__ */ r(n, {
23
+ size: "small"
24
+ }), l > 0 && /* @__PURE__ */ i(o, {
23
25
  label: `${l} Metadata Records`,
24
- size: "small",
25
- sx: {
26
- backgroundColor: "rgba(255, 255, 255, 0.2)",
27
- color: "#FFFFFF",
28
- fontSize: "0.75rem",
29
- fontWeight: 600
30
- }
26
+ size: "small"
31
27
  })]
32
28
  });
33
29
  };
34
- export { a as FastaPageHeaderCenterComponent };
30
+ export { s as FastaPageHeaderCenterComponent };
35
31
 
36
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useStore","FastaPageHeaderCenterComponent","parsedFasta","store","state","parsedMetadata","seqCount","metaCount","Box","Chip"],"sources":["../../../../src/components/fasta/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
+ {"version":3,"file":"index.js","names":["useStore","FastaPageHeaderCenterChip","styled","Chip","FastaPageHeaderCenterComponent","parsedFasta","store","state","parsedMetadata","seqCount","metaCount","Box"],"sources":["../../../../src/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n styled,\n} from '@mui/material';\nimport type {\n ComponentsOverrides,\n Theme,\n} from '@mui/material/styles';\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 type FastaPageHeaderCenterComponentTheme = {\n styleOverrides?: ComponentsOverrides<Theme>['MuiChip'];\n};\n\nconst FastaPageHeaderCenterChip = styled(Chip, {\n name: 'RivmLoculusToolsCommonFrontendFastaPageHeaderCenterComponent',\n slot: 'Root',\n})({\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: '#FFFFFF',\n fontSize: '0.75rem',\n fontWeight: 600,\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 <FastaPageHeaderCenterChip\n label={`${seqCount} Sequences`}\n size={'small'}\n />\n )}\n {metaCount > 0 && (\n <FastaPageHeaderCenterChip\n label={`${metaCount} Metadata Records`}\n size={'small'}\n />\n )}\n </Box>\n );\n};\n"],"mappings":";;;;AAuBA,IAAMC,IAA4BC,EAAOC,GAAM;CAC7C,MAAM;CACN,MAAM;AACR,CAAC,CAAC,CAAC;CACD,iBAAiB;CACjB,OAAO;CACP,UAAU;CACV,YAAY;AACd,CAAC,GAEYC,KAAkC,EAAE,eAAiD;CAChG,IAAMC,IAAcL,EAASM,IAAQ,MAAUC,EAAM,WAAW,GAC1DC,IAAiBR,EAASM,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,kBAACR,GAAD;GACE,OAAO,GAAGQ,EAAS;GACnB,MAAM;EACP,CAAA,GAEFC,IAAY,KACX,kBAACT,GAAD;GACE,OAAO,GAAGS,EAAU;GACpB,MAAM;EACP,CAAA,CAEA;;AAET"}
@@ -1 +1,5 @@
1
+ import { ComponentsOverrides, Theme } from '@mui/material/styles';
2
+ export type FastaPageHeaderImportButtonTheme = {
3
+ styleOverrides?: ComponentsOverrides<Theme>['MuiButton'];
4
+ };
1
5
  export declare const FastaPageHeaderImportButton: () => import('react').JSX.Element;
@@ -1,26 +1,28 @@
1
1
  import { FastaDataEventBusService as e } from "../../../classes/services/FastaDataEventBusService/index.js";
2
2
  import { container as t } from "tsyringe";
3
- import { Button as n } from "@mui/material";
4
- import { jsx as r } from "react/jsx-runtime";
5
- import { useCallback as i } from "react";
6
- import a from "@mui/icons-material/FileUploadOutlined";
3
+ import { Button as n, styled as r } from "@mui/material";
4
+ import { jsx as i } from "react/jsx-runtime";
5
+ import { useCallback as a } from "react";
6
+ import o from "@mui/icons-material/FileUploadOutlined";
7
7
  // src/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx
8
- var o = () => {
9
- let o = i(() => t.resolve(e).emit("onShowImportDialog"), []);
10
- return /* @__PURE__ */ r(n, {
8
+ var s = r(n, {
9
+ name: "RivmLoculusToolsCommonFrontendFastaPageHeaderImportButton",
10
+ slot: "Root"
11
+ })({
12
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
13
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
14
+ color: "#FFFFFF"
15
+ }), c = () => {
16
+ let n = a(() => t.resolve(e).emit("onShowImportDialog"), []);
17
+ return /* @__PURE__ */ i(s, {
11
18
  color: "inherit",
12
- onClick: o,
19
+ onClick: n,
13
20
  size: "small",
14
- startIcon: /* @__PURE__ */ r(a, {}),
15
- sx: {
16
- "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
17
- backgroundColor: "rgba(255, 255, 255, 0.15)",
18
- color: "#FFFFFF"
19
- },
21
+ startIcon: /* @__PURE__ */ i(o, {}),
20
22
  variant: "contained",
21
23
  children: "Import Data"
22
24
  });
23
25
  };
24
- export { o as FastaPageHeaderImportButton };
26
+ export { c as FastaPageHeaderImportButton };
25
27
 
26
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaPageHeaderImportButton","onImportDataButtonClick","useCallback","container","FastaDataEventBusService","Button"],"sources":["../../../../src/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx"],"sourcesContent":["import { container } from 'tsyringe';\nimport 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(() => container.resolve(FastaDataEventBusService).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":";;;;;;;AAOA,IAAaC,UAAoC;CAC/C,IAAMC,IAA0BC,QAAkBC,EAAU,QAAQC,CAAwB,CAAC,CAAC,KAAK,oBAAoB,GAAG,CAAC,CAAC;CAE5H,OACE,kBAACC,GAAD;EACE,OAAO;EACP,SAASJ;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
+ {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaPageHeaderImportButtonComponent","styled","Button","FastaPageHeaderImportButton","onImportDataButtonClick","useCallback","container","FastaDataEventBusService"],"sources":["../../../../src/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx"],"sourcesContent":["import { container } from 'tsyringe';\nimport FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';\nimport {\n Button,\n styled,\n} from '@mui/material';\nimport type {\n ComponentsOverrides,\n Theme,\n} from '@mui/material/styles';\nimport { useCallback } from 'react';\n\nimport { FastaDataEventBusService } from '../../../classes/services/FastaDataEventBusService';\n\nexport type FastaPageHeaderImportButtonTheme = {\n styleOverrides?: ComponentsOverrides<Theme>['MuiButton'];\n};\n\nconst FastaPageHeaderImportButtonComponent = styled(Button, {\n name: 'RivmLoculusToolsCommonFrontendFastaPageHeaderImportButton',\n slot: 'Root',\n})({\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\n },\n backgroundColor: 'rgba(255, 255, 255, 0.15)',\n color: '#FFFFFF',\n});\n\nexport const FastaPageHeaderImportButton = () => {\n const onImportDataButtonClick = useCallback(() => container.resolve(FastaDataEventBusService).emit('onShowImportDialog'), []);\n\n return (\n <FastaPageHeaderImportButtonComponent\n color={'inherit'}\n onClick={onImportDataButtonClick}\n size={'small'}\n startIcon={<FileUploadOutlinedIcon />}\n variant={'contained'}\n >\n {'Import Data'}\n </FastaPageHeaderImportButtonComponent>\n );\n};\n"],"mappings":";;;;;;;AAkBA,IAAMC,IAAuCC,EAAOC,GAAQ;CAC1D,MAAM;CACN,MAAM;AACR,CAAC,CAAC,CAAC;CACD,WAAW,EACT,iBAAiB,4BACnB;CACA,iBAAiB;CACjB,OAAO;AACT,CAAC,GAEYC,UAAoC;CAC/C,IAAMC,IAA0BC,QAAkBC,EAAU,QAAQC,CAAwB,CAAC,CAAC,KAAK,oBAAoB,GAAG,CAAC,CAAC;CAE5H,OACE,kBAACP,GAAD;EACE,OAAO;EACP,SAASI;EACT,MAAM;EACN,WAAW,kBAACL,GAAD,CAAyB,CAAA;EACpC,SAAS;EAER,UAAA;CACmC,CAAA;AAE1C"}
@@ -1,5 +1,8 @@
1
+ import { ButtonOwnProps } from '@mui/material';
2
+ import { ComponentsOverrides, Theme } from '@mui/material/styles';
1
3
  import { ReactElement } from 'react';
2
4
  export type ButtonWithMenuProps = {
5
+ buttonColor?: ButtonOwnProps['color'];
3
6
  disabled?: boolean;
4
7
  items: Array<{
5
8
  icon: ReactElement;
@@ -9,4 +12,7 @@ export type ButtonWithMenuProps = {
9
12
  label: string;
10
13
  startIcon?: ReactElement;
11
14
  };
12
- export declare const ButtonWithMenu: ({ disabled, items, label, startIcon }: ButtonWithMenuProps) => import('react').JSX.Element;
15
+ export type ButtonWithMenuTheme = {
16
+ styleOverrides?: ComponentsOverrides<Theme>['MuiButton'];
17
+ };
18
+ export declare const ButtonWithMenu: (inProps: ButtonWithMenuProps) => import('react').JSX.Element;
@@ -1,46 +1,51 @@
1
- import { Button as e, ListItemIcon as t, ListItemText as n, Menu as r, MenuItem as i } from "@mui/material";
2
- import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
3
- import { useCallback as c, useState as l } from "react";
1
+ import { Button as e, ListItemIcon as t, ListItemText as n, Menu as r, MenuItem as i, styled as a, useThemeProps as o } from "@mui/material";
2
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
3
+ import { useCallback as u, useState as d } from "react";
4
4
  // src/components/ui/ButtonWithMenu/ButtonWithMenu.tsx
5
- var u = ({ disabled: u, items: d, label: f, startIcon: p }) => {
6
- let [m, h] = l(null), g = !!m, _ = c((e) => {
7
- h(e.currentTarget);
8
- }, []), v = c(() => {
9
- h(null);
5
+ var f = a(e, {
6
+ name: "RivmLoculusToolsCommonFrontendButtonWithMenu",
7
+ slot: "Root"
8
+ })({
9
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
10
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
11
+ color: "#FFFFFF"
12
+ }), p = (e) => {
13
+ let { buttonColor: a = "inherit", disabled: p, items: m, label: h, startIcon: g } = o({
14
+ name: "RivmLoculusToolsCommonFrontendButtonWithMenu",
15
+ props: e
16
+ }), [_, v] = d(null), y = !!_, b = u((e) => {
17
+ v(e.currentTarget);
18
+ }, []), x = u(() => {
19
+ v(null);
10
20
  }, []);
11
- return /* @__PURE__ */ s(a, { children: [/* @__PURE__ */ o(e, {
12
- color: "inherit",
13
- disabled: u,
14
- onClick: _,
21
+ return /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(f, {
22
+ color: a,
23
+ disabled: p,
24
+ onClick: b,
15
25
  size: "small",
16
- startIcon: p,
17
- sx: {
18
- "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
19
- backgroundColor: "rgba(255, 255, 255, 0.15)",
20
- color: "#FFFFFF"
21
- },
26
+ startIcon: g,
22
27
  variant: "contained",
23
- children: f
24
- }), /* @__PURE__ */ o(r, {
25
- anchorEl: m,
28
+ children: h
29
+ }), /* @__PURE__ */ c(r, {
30
+ anchorEl: _,
26
31
  anchorOrigin: {
27
32
  horizontal: "right",
28
33
  vertical: "bottom"
29
34
  },
30
- onClose: v,
31
- open: g,
35
+ onClose: x,
36
+ open: y,
32
37
  transformOrigin: {
33
38
  horizontal: "right",
34
39
  vertical: "top"
35
40
  },
36
- children: d.map(({ icon: e, label: r, onClick: a }) => /* @__PURE__ */ s(i, {
41
+ children: m.map(({ icon: e, label: r, onClick: a }) => /* @__PURE__ */ l(i, {
37
42
  onClick: () => {
38
- v(), a();
43
+ x(), a();
39
44
  },
40
- children: [/* @__PURE__ */ o(t, { children: e }), /* @__PURE__ */ o(n, { primary: r })]
45
+ children: [/* @__PURE__ */ c(t, { children: e }), /* @__PURE__ */ c(n, { primary: r })]
41
46
  }, r))
42
47
  })] });
43
48
  };
44
- export { u as ButtonWithMenu };
49
+ export { p as ButtonWithMenu };
45
50
 
46
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_Fragment","ButtonWithMenu","anchorElement","setAnchorElement","useState","isMenuOpen","onClickMenu","useCallback","event","onCloseMenu","Fragment","Button","label","Menu","items","itemLabel","MenuItem","onClick","ListItemIcon","icon","ListItemText"],"sources":["../../../../src/components/ui/ButtonWithMenu/ButtonWithMenu.tsx"],"sourcesContent":["import {\n Button,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n} from '@mui/material';\nimport {\n useCallback,\n useState,\n} from 'react';\nimport type {\n MouseEvent,\n ReactElement,\n} from 'react';\n\nexport type ButtonWithMenuProps = {\n disabled?: boolean;\n items: Array<{\n icon: ReactElement;\n label: string;\n onClick: () => void;\n }>;\n label: string;\n startIcon?: ReactElement;\n};\n\nexport const ButtonWithMenu = ({ disabled, items, label, startIcon }: ButtonWithMenuProps) => {\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isMenuOpen = Boolean(anchorElement);\n\n const onClickMenu = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n setAnchorElement(event.currentTarget);\n }, []);\n\n const onCloseMenu = useCallback(() => {\n setAnchorElement(null);\n }, []);\n\n return (\n <>\n <Button\n color={'inherit'}\n disabled={disabled}\n onClick={onClickMenu}\n size={'small'}\n startIcon={startIcon}\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 {label}\n </Button>\n <Menu\n anchorEl={anchorElement}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n onClose={onCloseMenu}\n open={isMenuOpen}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n {items.map(({ icon, label: itemLabel, onClick }) => (\n <MenuItem\n key={itemLabel}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onCloseMenu();\n onClick();\n }}\n >\n <ListItemIcon>\n {icon}\n </ListItemIcon>\n <ListItemText primary={itemLabel} />\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n"],"mappings":";;;;AA2BA,IAAaC,KAAkB,EAAE,aAAU,UAAO,UAAO,mBAAqC;CAC5F,IAAM,CAACC,GAAeC,KAAoBC,EAA6B,IAAI,GACrEC,IAAa,EAAQH,GAErBI,IAAcC,GAAa,MAAyC;EACxE,EAAiBC,EAAM,aAAa;CACtC,GAAG,CAAC,CAAC,GAECC,IAAcF,QAAkB;EACpC,EAAiB,IAAI;CACvB,GAAG,CAAC,CAAC;CAEL,OACE,kBAAAP,GAAA,EAAA,UAAA,CACE,kBAACW,GAAD;EACE,OAAO;EACG;EACV,SAASL;EACT,MAAM;EACK;EACX,IAAI;GACF,WAAW,EACT,iBAAiB,4BACnB;GACA,iBAAiB;GACjB,OAAO;EACT;EACA,SAAS;EAER,UAAAM;CACK,CAAA,GACR,kBAACC,GAAD;EACE,UAAUX;EACV,cAAc;GAAE,YAAY;GAAS,UAAU;EAAS;EACxD,SAASO;EACT,MAAMJ;EACN,iBAAiB;GAAE,YAAY;GAAS,UAAU;EAAM;EAEvD,UAAAS,EAAM,KAAK,EAAE,SAAM,OAAOC,GAAW,iBACpC,kBAACC,GAAD;GAGE,eAAe;IAEb,AADAP,EAAY,GACZQ,EAAQ;GACV;GANF,UAAA,CAQE,kBAACC,GAAD,EAAA,UACGC,EACW,CAAA,GACd,kBAACC,GAAD,EAAc,SAASL,EAAY,CAAA,CAC3B;EAXH,GAAAA,CAWG,CACX;CACG,CAAA,CACN,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"index.js","names":["_Fragment","ButtonWithMenuButton","styled","Button","ButtonWithMenu","useThemeProps","inProps","anchorElement","setAnchorElement","useState","isMenuOpen","onClickMenu","useCallback","event","onCloseMenu","Fragment","buttonColor","label","Menu","items","itemLabel","MenuItem","onClick","ListItemIcon","icon","ListItemText"],"sources":["../../../../src/components/ui/ButtonWithMenu/ButtonWithMenu.tsx"],"sourcesContent":["import {\n Button,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n styled,\n useThemeProps,\n} from '@mui/material';\nimport type { ButtonOwnProps } from '@mui/material';\nimport type {\n ComponentsOverrides,\n Theme,\n} from '@mui/material/styles';\nimport {\n useCallback,\n useState,\n} from 'react';\nimport type {\n MouseEvent,\n ReactElement,\n} from 'react';\n\nexport type ButtonWithMenuProps = {\n buttonColor?: ButtonOwnProps['color'];\n disabled?: boolean;\n items: Array<{\n icon: ReactElement;\n label: string;\n onClick: () => void;\n }>;\n label: string;\n startIcon?: ReactElement;\n};\n\nexport type ButtonWithMenuTheme = {\n styleOverrides?: ComponentsOverrides<Theme>['MuiButton'];\n};\n\nconst ButtonWithMenuButton = styled(Button, {\n name: 'RivmLoculusToolsCommonFrontendButtonWithMenu',\n slot: 'Root',\n})({\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\n },\n backgroundColor: 'rgba(255, 255, 255, 0.15)',\n color: '#FFFFFF',\n});\n\nexport const ButtonWithMenu = (inProps: ButtonWithMenuProps) => {\n const {\n buttonColor = 'inherit',\n disabled,\n items,\n label,\n startIcon,\n } = useThemeProps({ name: 'RivmLoculusToolsCommonFrontendButtonWithMenu', props: inProps });\n const [anchorElement, setAnchorElement] = useState<HTMLElement | null>(null);\n const isMenuOpen = Boolean(anchorElement);\n\n const onClickMenu = useCallback((event: MouseEvent<HTMLButtonElement>) => {\n setAnchorElement(event.currentTarget);\n }, []);\n\n const onCloseMenu = useCallback(() => {\n setAnchorElement(null);\n }, []);\n\n return (\n <>\n <ButtonWithMenuButton\n color={buttonColor}\n disabled={disabled}\n onClick={onClickMenu}\n size={'small'}\n startIcon={startIcon}\n variant={'contained'}\n >\n {label}\n </ButtonWithMenuButton>\n <Menu\n anchorEl={anchorElement}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n onClose={onCloseMenu}\n open={isMenuOpen}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n >\n {items.map(({ icon, label: itemLabel, onClick }) => (\n <MenuItem\n key={itemLabel}\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={() => {\n onCloseMenu();\n onClick();\n }}\n >\n <ListItemIcon>\n {icon}\n </ListItemIcon>\n <ListItemText primary={itemLabel} />\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n"],"mappings":";;;;AAuCA,IAAMC,IAAuBC,EAAOC,GAAQ;CAC1C,MAAM;CACN,MAAM;AACR,CAAC,CAAC,CAAC;CACD,WAAW,EACT,iBAAiB,4BACnB;CACA,iBAAiB;CACjB,OAAO;AACT,CAAC,GAEYC,KAAkB,MAAiC;CAC9D,IAAM,EACJ,iBAAc,WACd,aACA,UACA,UACA,iBACEC,EAAc;EAAE,MAAM;EAAgD,OAAOC;CAAQ,CAAC,GACpF,CAACC,GAAeC,KAAoBC,EAA6B,IAAI,GACrEC,IAAa,EAAQH,GAErBI,IAAcC,GAAa,MAAyC;EACxE,EAAiBC,EAAM,aAAa;CACtC,GAAG,CAAC,CAAC,GAECC,IAAcF,QAAkB;EACpC,EAAiB,IAAI;CACvB,GAAG,CAAC,CAAC;CAEL,OACE,kBAAAZ,GAAA,EAAA,UAAA,CACE,kBAACC,GAAD;EACE,OAAOe;EACG;EACV,SAASL;EACT,MAAM;EACK;EACX,SAAS;EAER,UAAAM;CACmB,CAAA,GACtB,kBAACC,GAAD;EACE,UAAUX;EACV,cAAc;GAAE,YAAY;GAAS,UAAU;EAAS;EACxD,SAASO;EACT,MAAMJ;EACN,iBAAiB;GAAE,YAAY;GAAS,UAAU;EAAM;EAEvD,UAAAS,EAAM,KAAK,EAAE,SAAM,OAAOC,GAAW,iBACpC,kBAACC,GAAD;GAGE,eAAe;IAEb,AADAP,EAAY,GACZQ,EAAQ;GACV;GANF,UAAA,CAQE,kBAACC,GAAD,EAAA,UACGC,EACW,CAAA,GACd,kBAACC,GAAD,EAAc,SAASL,EAAY,CAAA,CAC3B;EAXH,GAAAA,CAWG,CACX;CACG,CAAA,CACN,EAAA,CAAA;AAEN"}
@@ -42,7 +42,7 @@ var l = ({ children: l, isNoInteraction: u, title: d }) => {
42
42
  duration: m.transitions.duration.leavingScreen,
43
43
  easing: m.transitions.easing.sharp
44
44
  }),
45
- width: g ? "calc(100% - 340px)" : "100%"
45
+ width: g ? "calc(100% - 540px)" : "100%"
46
46
  },
47
47
  children: l
48
48
  })]
@@ -18,7 +18,7 @@ var i = ({ children: i }) => {
18
18
  height: "100%",
19
19
  overflowY: "auto",
20
20
  position: "absolute",
21
- width: o ? 340 : 0
21
+ width: o ? 540 : 0
22
22
  } },
23
23
  variant: "persistent",
24
24
  children: i
@@ -4,4 +4,8 @@ export type PageCommonHeaderProps = {
4
4
  readonly rightComponent?: ReactNode;
5
5
  readonly title: string;
6
6
  };
7
- export declare const PageCommonHeader: ({ centerComponent, rightComponent, title }: PageCommonHeaderProps) => import('react').JSX.Element;
7
+ export interface PageCommonHeaderTheme {
8
+ backgroundColor: string;
9
+ color: string;
10
+ }
11
+ export declare const PageCommonHeader: (inProps: PageCommonHeaderProps) => import('react').JSX.Element;
@@ -1,49 +1,56 @@
1
1
  import { PageCommonContext as e } from "../../../context/pageCommonContext/index.js";
2
- import { AppBar as t, Box as n, IconButton as r, Toolbar as i, Typography as a, useTheme as o } from "@mui/material";
3
- import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
4
- import { use as u, useCallback as d } from "react";
5
- import f from "@mui/icons-material/Menu";
2
+ import { AppBar as t, Box as n, IconButton as r, Toolbar as i, Typography as a, useTheme as o, useThemeProps as s } from "@mui/material";
3
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
4
+ import { use as d, useCallback as f, useMemo as p } from "react";
5
+ import m from "@mui/icons-material/Menu";
6
6
  // src/components/ui/PageCommonHeader/PageCommonHeader.tsx
7
- var p = ({ centerComponent: p, rightComponent: m, title: h }) => {
8
- let g = o(), { afterAppBarComponent: _, afterAppBarRightComponent: v, appBarHeight: y = 48, appBarIcon: b, beforeAppBarComponent: x, beforeAppBarRightComponent: S, isDrawerOpen: C, isNoInteraction: w, setIsDrawerOpen: T } = u(e), E = d(() => {
9
- T(!C);
10
- }, [C, T]);
11
- return /* @__PURE__ */ l(n, { children: [
12
- x,
13
- /* @__PURE__ */ c(t, {
7
+ var h = (h) => {
8
+ let { centerComponent: g, rightComponent: _, title: v } = s({
9
+ name: "RivmLoculusToolsCommonFrontendPageCommonHeader",
10
+ props: h
11
+ }), y = o(), b = p(() => ({
12
+ backgroundColor: y.palette.primary.main,
13
+ color: y.palette.primary.contrastText,
14
+ ...y.components?.RivmLoculusToolsCommonFrontendPageCommonHeader ?? {}
15
+ }), [y]), { afterAppBarComponent: x, afterAppBarRightComponent: S, appBarHeight: C = 48, appBarIcon: w, beforeAppBarComponent: T, beforeAppBarRightComponent: E, isDrawerOpen: D, isNoInteraction: O, setIsDrawerOpen: k } = d(e), A = f(() => {
16
+ k(!D);
17
+ }, [D, k]);
18
+ return /* @__PURE__ */ u(n, { children: [
19
+ T,
20
+ /* @__PURE__ */ l(t, {
14
21
  elevation: 1,
15
22
  position: "static",
16
23
  sx: {
17
- backgroundColor: "primary.main",
18
- color: "#FFFFFF",
19
- height: y,
24
+ backgroundColor: b.backgroundColor,
25
+ color: b.color,
26
+ height: C,
20
27
  justifyContent: "center",
21
- zIndex: g.zIndex.drawer + 1
28
+ zIndex: y.zIndex.drawer + 1
22
29
  },
23
- children: /* @__PURE__ */ l(i, {
30
+ children: /* @__PURE__ */ u(i, {
24
31
  sx: {
25
32
  display: "flex",
26
33
  justifyContent: "space-between",
27
- px: `${g.spacing(1)} !important`
34
+ px: `${y.spacing(1)} !important`
28
35
  },
29
36
  variant: "dense",
30
- children: [/* @__PURE__ */ l(n, {
37
+ children: [/* @__PURE__ */ u(n, {
31
38
  sx: {
32
39
  alignItems: "center",
33
40
  display: "flex",
34
41
  gap: 1.5
35
42
  },
36
43
  children: [
37
- !w && /* @__PURE__ */ c(r, {
44
+ !O && /* @__PURE__ */ l(r, {
38
45
  "aria-label": "open drawer",
39
46
  color: "inherit",
40
47
  edge: "start",
41
- onClick: E,
48
+ onClick: A,
42
49
  size: "small",
43
- children: /* @__PURE__ */ c(f, {})
50
+ children: /* @__PURE__ */ l(m, {})
44
51
  }),
45
- b && /* @__PURE__ */ c(s, { children: b }),
46
- /* @__PURE__ */ c(a, {
52
+ w && /* @__PURE__ */ l(c, { children: w }),
53
+ /* @__PURE__ */ l(a, {
47
54
  component: "div",
48
55
  noWrap: !0,
49
56
  sx: {
@@ -53,54 +60,54 @@ var p = ({ centerComponent: p, rightComponent: m, title: h }) => {
53
60
  letterSpacing: "-0.01em"
54
61
  },
55
62
  variant: "h6",
56
- children: h
63
+ children: v
57
64
  })
58
65
  ]
59
- }), !w && /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(n, {
66
+ }), !O && /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l(n, {
60
67
  sx: {
61
68
  alignItems: "center",
62
69
  display: "flex",
63
70
  gap: 1
64
71
  },
65
- children: p
66
- }), /* @__PURE__ */ l(n, {
72
+ children: g
73
+ }), /* @__PURE__ */ u(n, {
67
74
  sx: {
68
75
  alignItems: "center",
69
76
  display: "flex",
70
77
  gap: 1
71
78
  },
72
79
  children: [
73
- S && /* @__PURE__ */ c(n, {
80
+ E && /* @__PURE__ */ l(n, {
74
81
  sx: {
75
82
  alignItems: "center",
76
83
  display: "flex",
77
84
  gap: 1
78
85
  },
79
- children: S
86
+ children: E
80
87
  }),
81
- /* @__PURE__ */ c(n, {
88
+ /* @__PURE__ */ l(n, {
82
89
  sx: {
83
90
  alignItems: "center",
84
91
  display: "flex",
85
92
  gap: 1
86
93
  },
87
- children: m
94
+ children: _
88
95
  }),
89
- v && /* @__PURE__ */ c(n, {
96
+ S && /* @__PURE__ */ l(n, {
90
97
  sx: {
91
98
  alignItems: "center",
92
99
  display: "flex",
93
100
  gap: 1
94
101
  },
95
- children: v
102
+ children: S
96
103
  })
97
104
  ]
98
105
  })] })]
99
106
  })
100
107
  }),
101
- _
108
+ x
102
109
  ] });
103
110
  };
104
- export { p as PageCommonHeader };
111
+ export { h as PageCommonHeader };
105
112
 
106
113
  //# sourceMappingURL=index.js.map