@rivm-loculus-tools/common-frontend 0.7.0 → 0.8.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 (26) 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/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.d.ts +4 -0
  4. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js +18 -22
  5. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js.map +1 -1
  6. package/dist/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.d.ts +4 -0
  7. package/dist/components/fasta/FastaPageHeaderImportButton/index.js +17 -15
  8. package/dist/components/fasta/FastaPageHeaderImportButton/index.js.map +1 -1
  9. package/dist/components/ui/ButtonWithMenu/ButtonWithMenu.d.ts +7 -1
  10. package/dist/components/ui/ButtonWithMenu/index.js +32 -27
  11. package/dist/components/ui/ButtonWithMenu/index.js.map +1 -1
  12. package/dist/components/ui/PageCommonHeader/PageCommonHeader.d.ts +5 -1
  13. package/dist/components/ui/PageCommonHeader/index.js +42 -35
  14. package/dist/components/ui/PageCommonHeader/index.js.map +1 -1
  15. package/dist/components/ui/SearchBar/SearchBar.d.ts +15 -0
  16. package/dist/components/ui/SearchBar/SearchBarNodeCounter.d.ts +8 -0
  17. package/dist/components/ui/SearchBar/index.js +136 -0
  18. package/dist/components/ui/SearchBar/index.js.map +1 -0
  19. package/dist/theme/demoTheme/index.js +26 -1
  20. package/dist/theme/demoTheme/index.js.map +1 -1
  21. package/package.json +9 -5
  22. package/dist/components/SearchBar/SearchBar.d.ts +0 -10
  23. package/dist/components/SearchBar/SearchBarNodeCounter.d.ts +0 -4
  24. package/dist/components/SearchBar/index.js +0 -128
  25. package/dist/components/SearchBar/index.js.map +0 -1
  26. /package/dist/components/{SearchBar → ui/SearchBar}/index.d.ts +0 -0
@@ -0,0 +1,136 @@
1
+ import { Box as e, FilledInput as t, IconButton as n, InputAdornment as r, styled as i, useTheme 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, useMemo as d, useRef as f } from "react";
4
+ import p from "@mui/icons-material/Search";
5
+ import m from "@mui/icons-material/KeyboardArrowUp";
6
+ import h from "@mui/icons-material/KeyboardArrowDown";
7
+ import g from "@mui/icons-material/Close";
8
+ // src/components/ui/SearchBar/SearchBar.tsx
9
+ var _ = i(t, {
10
+ name: "RivmLoculusToolsCommonFrontendSearchBar",
11
+ slot: "Root"
12
+ })(({ theme: e }) => ({
13
+ backgroundColor: e.palette.background.paper,
14
+ height: e.spacing(4)
15
+ })), v = (t) => {
16
+ let { allowNavigation: i, highlightedIndex: v, numResults: y = 0, onHighlightedIndexChange: b, onSearchQueryChange: x, searchQuery: S, truncated: C } = o({
17
+ name: "RivmLoculusToolsCommonFrontendSearchBar",
18
+ props: t
19
+ }), w = a(), T = d(() => ({
20
+ buttonColor: w.palette.primary.main,
21
+ ...w.components?.RivmLoculusToolsCommonFrontendSearchBar ?? {}
22
+ }), [w]), E = f(null), D = f(null), O = f(null), k = u((e) => {
23
+ let t = e.target.value;
24
+ x(t);
25
+ }, [x]), A = u(() => {
26
+ x(""), E.current?.focus();
27
+ }, [x]), j = u((e) => {
28
+ if (e.key === "Enter") {
29
+ if (!y) return;
30
+ e.preventDefault(), b?.(0), O.current?.focus();
31
+ }
32
+ }, [y, b]), M = u(() => {
33
+ if (!y) return;
34
+ let e = v == null || Number.isNaN(v) || v <= 0 ? y - 1 : v - 1;
35
+ b?.(e);
36
+ }, [
37
+ y,
38
+ v,
39
+ b
40
+ ]), N = u(() => {
41
+ if (!y) return;
42
+ let e = v == null || Number.isNaN(v) || v >= y - 1 ? 0 : v + 1;
43
+ b?.(e);
44
+ }, [
45
+ y,
46
+ v,
47
+ b
48
+ ]), P = u((e) => {
49
+ if (e.key === "ArrowRight") {
50
+ e.preventDefault();
51
+ let t = e.currentTarget.nextElementSibling;
52
+ t && t.focus();
53
+ }
54
+ if (e.key === "ArrowLeft") {
55
+ if (e.preventDefault(), e.target === D.current) {
56
+ E.current?.focus();
57
+ return;
58
+ }
59
+ let t = e.currentTarget.previousElementSibling;
60
+ t && t.focus();
61
+ }
62
+ }, []), F = d(() => S ? S && (Number.isNaN(y) || y <= 0) ? "No results" : v == null || Number.isNaN(v) || v < 0 || !i ? `${y}${C ? "+" : ""} results` : i ? `${v + 1}/${y}${C ? "+" : ""} results` : "" : "", [
63
+ S,
64
+ y,
65
+ v,
66
+ i,
67
+ C
68
+ ]);
69
+ return /* @__PURE__ */ c(_, {
70
+ endAdornment: /* @__PURE__ */ l(r, {
71
+ position: "end",
72
+ children: [
73
+ F && /* @__PURE__ */ c(e, {
74
+ "aria-atomic": "true",
75
+ "aria-live": "polite",
76
+ role: "status",
77
+ sx: { fontSize: "1rem" },
78
+ children: F
79
+ }),
80
+ y > 0 && i && /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(n, {
81
+ "aria-label": "Goto previous search result",
82
+ disabled: !y,
83
+ edge: "end",
84
+ onClick: M,
85
+ onKeyDown: P,
86
+ ref: D,
87
+ sx: { color: T.buttonColor },
88
+ children: /* @__PURE__ */ c(m, {})
89
+ }), /* @__PURE__ */ c(n, {
90
+ "aria-label": "Goto next search result",
91
+ disabled: !y,
92
+ edge: "end",
93
+ onClick: N,
94
+ onKeyDown: P,
95
+ ref: O,
96
+ sx: { color: T.buttonColor },
97
+ children: /* @__PURE__ */ c(h, {})
98
+ })] }),
99
+ S && /* @__PURE__ */ c(n, {
100
+ "aria-label": "Clear",
101
+ edge: "end",
102
+ onClick: A,
103
+ onKeyDown: P,
104
+ children: /* @__PURE__ */ c(g, {})
105
+ })
106
+ ]
107
+ }),
108
+ fullWidth: !0,
109
+ inputRef: E,
110
+ name: "Search",
111
+ onChange: k,
112
+ onKeyDown: j,
113
+ placeholder: "Search",
114
+ size: "small",
115
+ slotProps: { input: {
116
+ "aria-label": "Search",
117
+ sx: {
118
+ "&::-webkit-search-cancel-button": { display: "none" },
119
+ fontSize: "1rem",
120
+ height: w.spacing(4),
121
+ outline: "none !important",
122
+ paddingBottom: "0 !important",
123
+ paddingTop: "0 !important"
124
+ }
125
+ } },
126
+ startAdornment: /* @__PURE__ */ c(r, {
127
+ position: "start",
128
+ children: /* @__PURE__ */ c(p, { fontSize: "small" })
129
+ }),
130
+ type: "search",
131
+ value: S
132
+ });
133
+ };
134
+ export { v as SearchBar };
135
+
136
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Fragment","SearchIcon","KeyboardArrowUpIcon","KeyboardArrowDownIcon","CloseIcon","SearchBarFilledInput","styled","FilledInput","theme","SearchBar","useThemeProps","inProps","useTheme","searchBarTheme","useMemo","inputRef","useRef","arrowUpButtonRef","arrowDownButtonRef","onTextInputChange","useCallback","nextSearchText","event","onSearchQueryChange","onClearButtonClick","onTextInputKeyDown","numResults","onHighlightedIndexChange","onUpArrowButtonClick","newHighlightedIndex","highlightedIndex","onDownArrowButtonClick","onGenericKeyDown","nextFocusableElement","previousFocusableElement","searchResultStatusText","searchQuery","allowNavigation","truncated","InputAdornment","Box","Fragment","IconButton"],"sources":["../../../../src/components/ui/SearchBar/SearchBar.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n KeyboardEvent,\n} from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport {\n Box,\n FilledInput,\n IconButton,\n InputAdornment,\n styled,\n useTheme,\n useThemeProps,\n} from '@mui/material';\nimport type {\n ComponentsOverrides,\n Theme,\n} from '@mui/material/styles';\nimport SearchIcon from '@mui/icons-material/Search';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport CloseIcon from '@mui/icons-material/Close';\n\nexport type SearchBarProps = {\n allowNavigation?: boolean;\n highlightedIndex?: null | number;\n numResults?: number;\n onHighlightedIndexChange?: (index: number) => void;\n onSearchQueryChange: (query: string) => void;\n searchQuery: string;\n truncated?: boolean;\n};\n\nexport interface SearchBarTheme {\n buttonColor: string;\n styleOverrides?: ComponentsOverrides<Theme>['MuiFilledInput'];\n}\n\nconst SearchBarFilledInput = styled(FilledInput, {\n name: 'RivmLoculusToolsCommonFrontendSearchBar',\n slot: 'Root',\n})(({ theme }) => ({\n backgroundColor: theme.palette.background.paper,\n height: theme.spacing(4),\n}));\n\nexport const SearchBar = (inProps: SearchBarProps) => {\n const {\n allowNavigation,\n highlightedIndex,\n numResults = 0,\n onHighlightedIndexChange,\n onSearchQueryChange,\n searchQuery,\n truncated,\n } = useThemeProps({ name: 'RivmLoculusToolsCommonFrontendSearchBar', props: inProps });\n const theme = useTheme();\n const searchBarTheme = useMemo<SearchBarTheme>(() => ({\n ...{\n buttonColor: theme.palette.primary.main,\n } satisfies SearchBarTheme,\n ...(theme.components?.RivmLoculusToolsCommonFrontendSearchBar ?? {}),\n }), [theme]);\n\n\n const inputRef = useRef<HTMLInputElement>(null);\n const arrowUpButtonRef = useRef<HTMLButtonElement>(null);\n const arrowDownButtonRef = useRef<HTMLButtonElement>(null);\n\n const onTextInputChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n const nextSearchText = event.target.value;\n onSearchQueryChange(nextSearchText);\n }, [onSearchQueryChange]);\n\n const onClearButtonClick = useCallback(() => {\n onSearchQueryChange('');\n inputRef.current?.focus();\n }, [onSearchQueryChange]);\n\n const onTextInputKeyDown = useCallback((event: KeyboardEvent<HTMLInputElement>) => {\n // on enter press, highlight the first result and focus the down arrow button\n if (event.key === 'Enter') {\n if (!numResults) {\n return;\n }\n event.preventDefault();\n onHighlightedIndexChange?.(0);\n arrowDownButtonRef.current?.focus();\n }\n }, [numResults, onHighlightedIndexChange]);\n\n const onUpArrowButtonClick = useCallback(() => {\n // goto previous result\n if (!numResults) {\n return;\n }\n const newHighlightedIndex = highlightedIndex === null || highlightedIndex === undefined || Number.isNaN(highlightedIndex) || highlightedIndex <= 0 ? numResults - 1 : highlightedIndex - 1;\n\n onHighlightedIndexChange?.(newHighlightedIndex);\n }, [numResults, highlightedIndex, onHighlightedIndexChange]);\n\n const onDownArrowButtonClick = useCallback(() => {\n // goto next result\n if (!numResults) {\n return;\n }\n const newHighlightedIndex = highlightedIndex === null || highlightedIndex === undefined || Number.isNaN(highlightedIndex) || highlightedIndex >= numResults - 1 ? 0 : highlightedIndex + 1;\n onHighlightedIndexChange?.(newHighlightedIndex);\n }, [numResults, highlightedIndex, onHighlightedIndexChange]);\n\n const onGenericKeyDown = useCallback((event: KeyboardEvent<HTMLButtonElement>) => {\n // arrow right, focus the next focusable element\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n const nextFocusableElement = event.currentTarget.nextElementSibling as HTMLElement;\n if (nextFocusableElement) {\n nextFocusableElement.focus();\n }\n }\n // arrow left, focus the previous focusable element\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n if (event.target === arrowUpButtonRef.current) {\n inputRef.current?.focus();\n return;\n }\n const previousFocusableElement = event.currentTarget.previousElementSibling as HTMLElement;\n if (previousFocusableElement) {\n previousFocusableElement.focus();\n }\n }\n }, []);\n\n const searchResultStatusText = useMemo(() => {\n if (!searchQuery) {\n return '';\n }\n if (searchQuery && (Number.isNaN(numResults) || numResults <= 0)) {\n return 'No results';\n } else if (highlightedIndex === null || highlightedIndex === undefined || Number.isNaN(highlightedIndex) || highlightedIndex < 0 || !allowNavigation) {\n return `${numResults}${truncated ? '+' : ''} results`;\n } else if (allowNavigation) {\n return `${highlightedIndex + 1}/${numResults}${truncated ? '+' : ''} results`;\n }\n return '';\n }, [searchQuery, numResults, highlightedIndex, allowNavigation, truncated]);\n\n\n return (\n <SearchBarFilledInput\n endAdornment={(\n <InputAdornment position={'end'}>\n {searchResultStatusText && (\n <Box\n aria-atomic={'true'}\n aria-live={'polite'}\n role={'status'}\n sx={{\n fontSize: '1rem',\n }}\n >\n {searchResultStatusText}\n </Box>\n )}\n {numResults > 0 && allowNavigation && (\n <>\n <IconButton\n aria-label={'Goto previous search result'}\n disabled={!numResults}\n edge={'end'}\n onClick={onUpArrowButtonClick}\n onKeyDown={onGenericKeyDown}\n ref={arrowUpButtonRef}\n sx={{ color: searchBarTheme.buttonColor }}\n >\n <KeyboardArrowUpIcon />\n </IconButton>\n <IconButton\n aria-label={'Goto next search result'}\n disabled={!numResults}\n edge={'end'}\n onClick={onDownArrowButtonClick}\n onKeyDown={onGenericKeyDown}\n ref={arrowDownButtonRef}\n sx={{ color: searchBarTheme.buttonColor }}\n >\n <KeyboardArrowDownIcon />\n </IconButton>\n </>\n )}\n {searchQuery && (\n <IconButton\n aria-label={'Clear'}\n edge={'end'}\n onClick={onClearButtonClick}\n onKeyDown={onGenericKeyDown}\n >\n <CloseIcon />\n </IconButton>\n )}\n </InputAdornment>\n )}\n fullWidth\n inputRef={inputRef}\n name={'Search'}\n onChange={onTextInputChange}\n onKeyDown={onTextInputKeyDown}\n placeholder={'Search'}\n size={'small'}\n slotProps={{\n input: {\n 'aria-label': 'Search',\n sx: {\n '&::-webkit-search-cancel-button': {\n display: 'none',\n },\n fontSize: '1rem',\n height: theme.spacing(4),\n outline: 'none !important',\n paddingBottom: '0 !important',\n paddingTop: '0 !important',\n },\n },\n }}\n startAdornment={(\n <InputAdornment position={'start'}>\n <SearchIcon fontSize={'small'} />\n </InputAdornment>\n )}\n type={'search'}\n value={searchQuery}\n />\n );\n};\n"],"mappings":"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"}
@@ -214,7 +214,32 @@ var t = "data:font/woff2;base64,d09GMgABAAAAC2dAABUAAAAZt9gAC2a/AAEAAAAAAAAAAAAA
214
214
  fontSize: "1.143rem",
215
215
  fontWeight: 700
216
216
  }
217
- } }
217
+ } },
218
+ RivmLoculusToolsCommonFrontendButtonWithMenu: { styleOverrides: { root: {
219
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
220
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
221
+ color: "#FFFFFF"
222
+ } } },
223
+ RivmLoculusToolsCommonFrontendFastaPageHeaderCenterComponent: { styleOverrides: { root: {
224
+ backgroundColor: "rgba(255, 255, 255, 0.2)",
225
+ color: "#FFFFFF",
226
+ fontSize: "0.75rem",
227
+ fontWeight: 600
228
+ } } },
229
+ RivmLoculusToolsCommonFrontendFastaPageHeaderImportButton: { styleOverrides: { root: {
230
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
231
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
232
+ color: "#FFFFFF"
233
+ } } },
234
+ RivmLoculusToolsCommonFrontendPageCommonHeader: {
235
+ backgroundColor: "#5160ab",
236
+ color: "#fff"
237
+ },
238
+ RivmLoculusToolsCommonFrontendSearchBar: {
239
+ buttonColor: "#5160ab",
240
+ styleOverrides: { root: { backgroundColor: e === "light" ? "#fff" : "#121212" } }
241
+ },
242
+ RivmLoculusToolsCommonFrontendSearchBarNodeCounter: {}
218
243
  },
219
244
  palette: {
220
245
  divider: "#eeeeee",