@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.
- package/dist/@types/common-frontend.d.ts +2 -0
- package/dist/@types/mui.d.ts +48 -0
- package/dist/components/fasta/FastaDataImportDialog/index.js +3 -3
- package/dist/components/fasta/FastaDataImportDialog/index.js.map +1 -1
- package/dist/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.d.ts +4 -0
- package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js +18 -22
- package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js.map +1 -1
- package/dist/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.d.ts +4 -0
- package/dist/components/fasta/FastaPageHeaderImportButton/index.js +17 -15
- package/dist/components/fasta/FastaPageHeaderImportButton/index.js.map +1 -1
- package/dist/components/ui/ButtonWithMenu/ButtonWithMenu.d.ts +7 -1
- package/dist/components/ui/ButtonWithMenu/index.js +32 -27
- package/dist/components/ui/ButtonWithMenu/index.js.map +1 -1
- package/dist/components/ui/PageCommon/index.js +1 -1
- package/dist/components/ui/PageCommonDrawer/index.js +1 -1
- package/dist/components/ui/PageCommonHeader/PageCommonHeader.d.ts +5 -1
- package/dist/components/ui/PageCommonHeader/index.js +42 -35
- package/dist/components/ui/PageCommonHeader/index.js.map +1 -1
- package/dist/components/ui/SearchBar/SearchBar.d.ts +15 -0
- package/dist/components/ui/SearchBar/SearchBarNodeCounter.d.ts +8 -0
- package/dist/components/ui/SearchBar/index.js +136 -0
- package/dist/components/ui/SearchBar/index.js.map +1 -0
- package/dist/constants/page.constants.d.ts +1 -1
- package/dist/constants/page.constants.js +1 -1
- package/dist/constants/page.constants.js.map +1 -1
- package/dist/theme/demoTheme/index.js +26 -1
- package/dist/theme/demoTheme/index.js.map +1 -1
- package/dist/utils/UrlUtil/UrlUtil.d.ts +1 -0
- package/dist/utils/UrlUtil/index.js +4 -0
- package/dist/utils/UrlUtil/index.js.map +1 -1
- package/package.json +9 -5
- package/dist/components/SearchBar/SearchBar.d.ts +0 -10
- package/dist/components/SearchBar/SearchBarNodeCounter.d.ts +0 -4
- package/dist/components/SearchBar/index.js +0 -128
- package/dist/components/SearchBar/index.js.map +0 -1
- /package/dist/components/{SearchBar → ui/SearchBar}/index.d.ts +0 -0
|
@@ -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 (
|
|
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 (
|
|
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
|
|
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 ACTG... >seq2 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	Country	Date Sample1	NL	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 ACTG... >seq2 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	Country	Date Sample1	NL	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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"}
|
package/dist/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
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__ */
|
|
21
|
+
children: [c > 0 && /* @__PURE__ */ i(o, {
|
|
14
22
|
label: `${c} Sequences`,
|
|
15
|
-
size: "small"
|
|
16
|
-
|
|
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 {
|
|
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"
|
|
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,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
|
|
5
|
-
import { useCallback as
|
|
6
|
-
import
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
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:
|
|
19
|
+
onClick: n,
|
|
13
20
|
size: "small",
|
|
14
|
-
startIcon: /* @__PURE__ */
|
|
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 {
|
|
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"
|
|
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
|
|
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
|
|
3
|
-
import { useCallback as
|
|
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
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
12
|
-
color:
|
|
13
|
-
disabled:
|
|
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:
|
|
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:
|
|
24
|
-
}), /* @__PURE__ */
|
|
25
|
-
anchorEl:
|
|
28
|
+
children: h
|
|
29
|
+
}), /* @__PURE__ */ c(r, {
|
|
30
|
+
anchorEl: _,
|
|
26
31
|
anchorOrigin: {
|
|
27
32
|
horizontal: "right",
|
|
28
33
|
vertical: "bottom"
|
|
29
34
|
},
|
|
30
|
-
onClose:
|
|
31
|
-
open:
|
|
35
|
+
onClose: x,
|
|
36
|
+
open: y,
|
|
32
37
|
transformOrigin: {
|
|
33
38
|
horizontal: "right",
|
|
34
39
|
vertical: "top"
|
|
35
40
|
},
|
|
36
|
-
children:
|
|
41
|
+
children: m.map(({ icon: e, label: r, onClick: a }) => /* @__PURE__ */ l(i, {
|
|
37
42
|
onClick: () => {
|
|
38
|
-
|
|
43
|
+
x(), a();
|
|
39
44
|
},
|
|
40
|
-
children: [/* @__PURE__ */
|
|
45
|
+
children: [/* @__PURE__ */ c(t, { children: e }), /* @__PURE__ */ c(n, { primary: r })]
|
|
41
46
|
}, r))
|
|
42
47
|
})] });
|
|
43
48
|
};
|
|
44
|
-
export {
|
|
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","
|
|
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% -
|
|
45
|
+
width: g ? "calc(100% - 540px)" : "100%"
|
|
46
46
|
},
|
|
47
47
|
children: l
|
|
48
48
|
})]
|
|
@@ -4,4 +4,8 @@ export type PageCommonHeaderProps = {
|
|
|
4
4
|
readonly rightComponent?: ReactNode;
|
|
5
5
|
readonly title: string;
|
|
6
6
|
};
|
|
7
|
-
export
|
|
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
|
|
4
|
-
import { use as
|
|
5
|
-
import
|
|
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
|
|
8
|
-
let
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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:
|
|
18
|
-
color:
|
|
19
|
-
height:
|
|
24
|
+
backgroundColor: b.backgroundColor,
|
|
25
|
+
color: b.color,
|
|
26
|
+
height: C,
|
|
20
27
|
justifyContent: "center",
|
|
21
|
-
zIndex:
|
|
28
|
+
zIndex: y.zIndex.drawer + 1
|
|
22
29
|
},
|
|
23
|
-
children: /* @__PURE__ */
|
|
30
|
+
children: /* @__PURE__ */ u(i, {
|
|
24
31
|
sx: {
|
|
25
32
|
display: "flex",
|
|
26
33
|
justifyContent: "space-between",
|
|
27
|
-
px: `${
|
|
34
|
+
px: `${y.spacing(1)} !important`
|
|
28
35
|
},
|
|
29
36
|
variant: "dense",
|
|
30
|
-
children: [/* @__PURE__ */
|
|
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
|
-
!
|
|
44
|
+
!O && /* @__PURE__ */ l(r, {
|
|
38
45
|
"aria-label": "open drawer",
|
|
39
46
|
color: "inherit",
|
|
40
47
|
edge: "start",
|
|
41
|
-
onClick:
|
|
48
|
+
onClick: A,
|
|
42
49
|
size: "small",
|
|
43
|
-
children: /* @__PURE__ */
|
|
50
|
+
children: /* @__PURE__ */ l(m, {})
|
|
44
51
|
}),
|
|
45
|
-
|
|
46
|
-
/* @__PURE__ */
|
|
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:
|
|
63
|
+
children: v
|
|
57
64
|
})
|
|
58
65
|
]
|
|
59
|
-
}), !
|
|
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:
|
|
66
|
-
}), /* @__PURE__ */
|
|
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
|
-
|
|
80
|
+
E && /* @__PURE__ */ l(n, {
|
|
74
81
|
sx: {
|
|
75
82
|
alignItems: "center",
|
|
76
83
|
display: "flex",
|
|
77
84
|
gap: 1
|
|
78
85
|
},
|
|
79
|
-
children:
|
|
86
|
+
children: E
|
|
80
87
|
}),
|
|
81
|
-
/* @__PURE__ */
|
|
88
|
+
/* @__PURE__ */ l(n, {
|
|
82
89
|
sx: {
|
|
83
90
|
alignItems: "center",
|
|
84
91
|
display: "flex",
|
|
85
92
|
gap: 1
|
|
86
93
|
},
|
|
87
|
-
children:
|
|
94
|
+
children: _
|
|
88
95
|
}),
|
|
89
|
-
|
|
96
|
+
S && /* @__PURE__ */ l(n, {
|
|
90
97
|
sx: {
|
|
91
98
|
alignItems: "center",
|
|
92
99
|
display: "flex",
|
|
93
100
|
gap: 1
|
|
94
101
|
},
|
|
95
|
-
children:
|
|
102
|
+
children: S
|
|
96
103
|
})
|
|
97
104
|
]
|
|
98
105
|
})] })]
|
|
99
106
|
})
|
|
100
107
|
}),
|
|
101
|
-
|
|
108
|
+
x
|
|
102
109
|
] });
|
|
103
110
|
};
|
|
104
|
-
export {
|
|
111
|
+
export { h as PageCommonHeader };
|
|
105
112
|
|
|
106
113
|
//# sourceMappingURL=index.js.map
|