@genspectrum/dashboard-components 0.17.1 → 0.18.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/custom-elements.json +3 -3
- package/dist/components.d.ts +15 -15
- package/dist/components.js +276 -3962
- package/dist/components.js.map +1 -1
- package/dist/style.css +2 -3687
- package/dist/util.d.ts +15 -15
- package/package.json +5 -5
- package/src/preact/aggregatedData/aggregate.tsx +3 -3
- package/src/preact/components/clearable-select.tsx +1 -1
- package/src/preact/components/color-scale-selector-dropdown.tsx +1 -1
- package/src/preact/components/confidence-interval-selector.tsx +1 -1
- package/src/preact/components/downshift-combobox.tsx +3 -3
- package/src/preact/components/fullscreen.tsx +6 -2
- package/src/preact/components/info.tsx +1 -1
- package/src/preact/components/mutation-type-selector.tsx +1 -1
- package/src/preact/components/percent-intput.tsx +3 -3
- package/src/preact/components/proportion-selector-dropdown.tsx +1 -1
- package/src/preact/components/scaling-selector.tsx +1 -1
- package/src/preact/components/select.tsx +1 -1
- package/src/preact/components/tabs.tsx +1 -1
- package/src/preact/dateRangeFilter/date-picker.tsx +1 -1
- package/src/preact/dateRangeFilter/date-range-filter.tsx +4 -4
- package/src/preact/mutationComparison/mutation-comparison.tsx +1 -1
- package/src/preact/mutations/mutations.tsx +2 -2
- package/src/preact/mutationsOverTime/mutations-over-time.tsx +1 -1
- package/src/preact/numberSequencesOverTime/number-sequences-over-time.tsx +1 -1
- package/src/preact/prevalenceOverTime/prevalence-over-time.tsx +1 -1
- package/src/preact/sequencesByLocation/sequences-by-location-map.tsx +1 -1
- package/src/preact/sequencesByLocation/sequences-by-location.tsx +3 -7
- package/src/styles/tailwind.css +14 -3
- package/src/web-components/input/gs-date-range-filter.stories.ts +2 -2
- package/src/web-components/input/gs-lineage-filter.stories.ts +1 -1
- package/src/web-components/input/gs-location-filter.stories.ts +1 -1
- package/src/web-components/input/gs-mutation-filter.stories.ts +1 -1
- package/src/web-components/input/gs-text-filter.stories.ts +1 -1
- package/standalone-bundle/dashboard-components.js +4279 -4280
- package/standalone-bundle/dashboard-components.js.map +1 -1
- package/standalone-bundle/style.css +1 -1
package/dist/util.d.ts
CHANGED
|
@@ -906,7 +906,7 @@ declare global {
|
|
|
906
906
|
|
|
907
907
|
declare global {
|
|
908
908
|
interface HTMLElementTagNameMap {
|
|
909
|
-
'gs-
|
|
909
|
+
'gs-prevalence-over-time': PrevalenceOverTimeComponent;
|
|
910
910
|
}
|
|
911
911
|
}
|
|
912
912
|
|
|
@@ -914,7 +914,7 @@ declare global {
|
|
|
914
914
|
declare global {
|
|
915
915
|
namespace JSX {
|
|
916
916
|
interface IntrinsicElements {
|
|
917
|
-
'gs-
|
|
917
|
+
'gs-prevalence-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
918
918
|
}
|
|
919
919
|
}
|
|
920
920
|
}
|
|
@@ -922,7 +922,7 @@ declare global {
|
|
|
922
922
|
|
|
923
923
|
declare global {
|
|
924
924
|
interface HTMLElementTagNameMap {
|
|
925
|
-
'gs-
|
|
925
|
+
'gs-mutations-component': MutationsComponent;
|
|
926
926
|
}
|
|
927
927
|
}
|
|
928
928
|
|
|
@@ -930,7 +930,7 @@ declare global {
|
|
|
930
930
|
declare global {
|
|
931
931
|
namespace JSX {
|
|
932
932
|
interface IntrinsicElements {
|
|
933
|
-
'gs-
|
|
933
|
+
'gs-mutations-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
934
934
|
}
|
|
935
935
|
}
|
|
936
936
|
}
|
|
@@ -970,7 +970,7 @@ declare global {
|
|
|
970
970
|
|
|
971
971
|
declare global {
|
|
972
972
|
interface HTMLElementTagNameMap {
|
|
973
|
-
'gs-
|
|
973
|
+
'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
|
|
974
974
|
}
|
|
975
975
|
}
|
|
976
976
|
|
|
@@ -978,7 +978,7 @@ declare global {
|
|
|
978
978
|
declare global {
|
|
979
979
|
namespace JSX {
|
|
980
980
|
interface IntrinsicElements {
|
|
981
|
-
'gs-
|
|
981
|
+
'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
982
982
|
}
|
|
983
983
|
}
|
|
984
984
|
}
|
|
@@ -986,7 +986,7 @@ declare global {
|
|
|
986
986
|
|
|
987
987
|
declare global {
|
|
988
988
|
interface HTMLElementTagNameMap {
|
|
989
|
-
'gs-
|
|
989
|
+
'gs-mutations-over-time': MutationsOverTimeComponent;
|
|
990
990
|
}
|
|
991
991
|
}
|
|
992
992
|
|
|
@@ -994,7 +994,7 @@ declare global {
|
|
|
994
994
|
declare global {
|
|
995
995
|
namespace JSX {
|
|
996
996
|
interface IntrinsicElements {
|
|
997
|
-
'gs-
|
|
997
|
+
'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
998
998
|
}
|
|
999
999
|
}
|
|
1000
1000
|
}
|
|
@@ -1050,11 +1050,10 @@ declare global {
|
|
|
1050
1050
|
|
|
1051
1051
|
declare global {
|
|
1052
1052
|
interface HTMLElementTagNameMap {
|
|
1053
|
-
'gs-
|
|
1053
|
+
'gs-location-filter': LocationFilterComponent;
|
|
1054
1054
|
}
|
|
1055
1055
|
interface HTMLElementEventMap {
|
|
1056
|
-
'gs-
|
|
1057
|
-
'gs-date-range-option-changed': DateRangeOptionChangedEvent;
|
|
1056
|
+
'gs-location-changed': LocationChangedEvent;
|
|
1058
1057
|
}
|
|
1059
1058
|
}
|
|
1060
1059
|
|
|
@@ -1062,7 +1061,7 @@ declare global {
|
|
|
1062
1061
|
declare global {
|
|
1063
1062
|
namespace JSX {
|
|
1064
1063
|
interface IntrinsicElements {
|
|
1065
|
-
'gs-
|
|
1064
|
+
'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1066
1065
|
}
|
|
1067
1066
|
}
|
|
1068
1067
|
}
|
|
@@ -1070,10 +1069,11 @@ declare global {
|
|
|
1070
1069
|
|
|
1071
1070
|
declare global {
|
|
1072
1071
|
interface HTMLElementTagNameMap {
|
|
1073
|
-
'gs-
|
|
1072
|
+
'gs-date-range-filter': DateRangeFilterComponent;
|
|
1074
1073
|
}
|
|
1075
1074
|
interface HTMLElementEventMap {
|
|
1076
|
-
'gs-
|
|
1075
|
+
'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
|
|
1076
|
+
'gs-date-range-option-changed': DateRangeOptionChangedEvent;
|
|
1077
1077
|
}
|
|
1078
1078
|
}
|
|
1079
1079
|
|
|
@@ -1081,7 +1081,7 @@ declare global {
|
|
|
1081
1081
|
declare global {
|
|
1082
1082
|
namespace JSX {
|
|
1083
1083
|
interface IntrinsicElements {
|
|
1084
|
-
'gs-
|
|
1084
|
+
'gs-date-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1085
1085
|
}
|
|
1086
1086
|
}
|
|
1087
1087
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genspectrum/dashboard-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "GenSpectrum web components for building dashboards",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"@custom-elements-manifest/analyzer": "^0.10.2",
|
|
103
103
|
"@iconify-json/mdi": "^1.1.67",
|
|
104
104
|
"@iconify-json/mdi-light": "^1.1.10",
|
|
105
|
-
"@iconify/
|
|
105
|
+
"@iconify/tailwind4": "^1.0.6",
|
|
106
106
|
"@playwright/test": "^1.43.1",
|
|
107
107
|
"@storybook/addon-actions": "^8.0.9",
|
|
108
108
|
"@storybook/addon-essentials": "^8.0.9",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"@storybook/types": "^8.0.9",
|
|
117
117
|
"@storybook/web-components": "^8.0.9",
|
|
118
118
|
"@storybook/web-components-vite": "^8.0.9",
|
|
119
|
-
"@tailwindcss/
|
|
119
|
+
"@tailwindcss/postcss": "^4.0.9",
|
|
120
120
|
"@testing-library/preact": "^3.2.4",
|
|
121
121
|
"@types/geojson": "^7946.0.15",
|
|
122
122
|
"@types/leaflet": "^1.9.15",
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
"@typescript-eslint/eslint-plugin": "^8.2.0",
|
|
127
127
|
"@typescript-eslint/parser": "^8.2.0",
|
|
128
128
|
"autoprefixer": "^10.4.19",
|
|
129
|
-
"daisyui": "^
|
|
129
|
+
"daisyui": "^5.0.0",
|
|
130
130
|
"depcheck": "^1.4.7",
|
|
131
131
|
"eslint": "^8.57.0",
|
|
132
132
|
"eslint-config-preact": "^1.3.0",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
"react": "^18.3.1",
|
|
143
143
|
"storybook": "^8.0.9",
|
|
144
144
|
"storybook-addon-fetch-mock": "^2.0.0",
|
|
145
|
-
"tailwindcss": "^
|
|
145
|
+
"tailwindcss": "^4.0.9",
|
|
146
146
|
"typescript": "~5.7.2",
|
|
147
147
|
"vite": "^6.0.3",
|
|
148
148
|
"vite-plugin-dts": "^4.0.3",
|
|
@@ -119,11 +119,11 @@ type ToolbarProps = {
|
|
|
119
119
|
|
|
120
120
|
const Toolbar: FunctionComponent<ToolbarProps> = ({ data, originalComponentProps }) => {
|
|
121
121
|
return (
|
|
122
|
-
|
|
123
|
-
<CsvDownloadButton className='
|
|
122
|
+
<>
|
|
123
|
+
<CsvDownloadButton className='btn btn-xs' getData={() => data} filename='aggregate.csv' />
|
|
124
124
|
<AggregateInfo originalComponentProps={originalComponentProps} />
|
|
125
125
|
<Fullscreen />
|
|
126
|
-
|
|
126
|
+
</>
|
|
127
127
|
);
|
|
128
128
|
};
|
|
129
129
|
|
|
@@ -50,7 +50,7 @@ export function ClearableSelect({
|
|
|
50
50
|
return (
|
|
51
51
|
<div className={`relative inline min-w-24 ${className}`}>
|
|
52
52
|
<select
|
|
53
|
-
className={`w-full select
|
|
53
|
+
className={`w-full select pr-14 ${selectClassName}`}
|
|
54
54
|
value={selectedOption ?? undefinedValue}
|
|
55
55
|
onChange={handleChange}
|
|
56
56
|
>
|
|
@@ -10,7 +10,7 @@ export const ColorScaleSelectorDropdown: FunctionComponent<ColorScaleSelectorDro
|
|
|
10
10
|
setColorScale,
|
|
11
11
|
}) => {
|
|
12
12
|
return (
|
|
13
|
-
<div className='w-20'>
|
|
13
|
+
<div className='w-20 inline-flex'>
|
|
14
14
|
<Dropdown buttonTitle={`Color scale`} placement={'bottom-start'}>
|
|
15
15
|
<ColorScaleSelector colorScale={colorScale} setColorScale={setColorScale} />
|
|
16
16
|
</Dropdown>
|
|
@@ -39,7 +39,7 @@ export const ConfidenceIntervalSelector: FunctionComponent<ConfidenceIntervalSel
|
|
|
39
39
|
const value = select.value as ConfidenceIntervalMethod;
|
|
40
40
|
setConfidenceIntervalMethod(value);
|
|
41
41
|
}}
|
|
42
|
-
selectStyle={'select-xs
|
|
42
|
+
selectStyle={'select-xs'}
|
|
43
43
|
/>
|
|
44
44
|
);
|
|
45
45
|
};
|
|
@@ -91,7 +91,7 @@ export function DownshiftCombobox<Item>({
|
|
|
91
91
|
<div ref={divRef} className={'relative w-full'}>
|
|
92
92
|
<div className='w-full flex flex-col gap-1'>
|
|
93
93
|
<div
|
|
94
|
-
className={`flex gap-0.5 input
|
|
94
|
+
className={`flex gap-0.5 input min-w-32 w-full ${inputClassName}`}
|
|
95
95
|
onBlur={(event) => {
|
|
96
96
|
if (event.relatedTarget != buttonRef.current) {
|
|
97
97
|
closeMenu();
|
|
@@ -131,7 +131,7 @@ export function DownshiftCombobox<Item>({
|
|
|
131
131
|
{items.length > 0 ? (
|
|
132
132
|
items.map((item, index) => (
|
|
133
133
|
<li
|
|
134
|
-
className={`${highlightedIndex === index ? 'bg-blue-300' : ''} ${selectedItem !== null && itemToString(selectedItem) === itemToString(item) ? 'font-bold' : ''} py-2 px-3 shadow-
|
|
134
|
+
className={`${highlightedIndex === index ? 'bg-blue-300' : ''} ${selectedItem !== null && itemToString(selectedItem) === itemToString(item) ? 'font-bold' : ''} py-2 px-3 shadow-xs`}
|
|
135
135
|
key={itemToString(item)}
|
|
136
136
|
{...getItemProps({ item, index })}
|
|
137
137
|
>
|
|
@@ -139,7 +139,7 @@ export function DownshiftCombobox<Item>({
|
|
|
139
139
|
</li>
|
|
140
140
|
))
|
|
141
141
|
) : (
|
|
142
|
-
<li className='py-2 px-3 shadow-
|
|
142
|
+
<li className='py-2 px-3 shadow-xs'>No elements to select.</li>
|
|
143
143
|
)}
|
|
144
144
|
</ul>
|
|
145
145
|
</div>
|
|
@@ -18,9 +18,13 @@ export const Fullscreen = () => {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}}
|
|
21
|
-
className={`
|
|
21
|
+
className={`btn btn-xs`}
|
|
22
22
|
title={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}
|
|
23
|
-
|
|
23
|
+
>
|
|
24
|
+
<div
|
|
25
|
+
className={`iconify text-2xl ${isFullscreen ? 'mdi--fullscreen-exit hover:scale-90' : 'mdi--fullscreen hover:scale-110'}`}
|
|
26
|
+
/>
|
|
27
|
+
</button>
|
|
24
28
|
);
|
|
25
29
|
};
|
|
26
30
|
|
|
@@ -17,7 +17,7 @@ export const MutationTypeSelector: FunctionComponent<MutationTypeSelectorProps>
|
|
|
17
17
|
setDisplayedMutationTypes,
|
|
18
18
|
}) => {
|
|
19
19
|
return (
|
|
20
|
-
<div className='w-[6rem]'>
|
|
20
|
+
<div className='w-[6rem] inline-flex'>
|
|
21
21
|
<CheckboxSelector
|
|
22
22
|
items={displayedMutationTypes}
|
|
23
23
|
label={getMutationTypesSelectorLabel(displayedMutationTypes)}
|
|
@@ -40,7 +40,8 @@ export const PercentInput: FunctionComponent<PercentInputProps> = ({
|
|
|
40
40
|
|
|
41
41
|
const isError = indicateError || !percentageInRange(internalPercentage);
|
|
42
42
|
return (
|
|
43
|
-
<label className={`input
|
|
43
|
+
<label className={`input flex items-center w-32 ${isError ? 'input-error' : ''}`}>
|
|
44
|
+
<span className='label'>%</span>
|
|
44
45
|
<input
|
|
45
46
|
type='number'
|
|
46
47
|
step={0.1}
|
|
@@ -49,9 +50,8 @@ export const PercentInput: FunctionComponent<PercentInputProps> = ({
|
|
|
49
50
|
value={internalPercentage}
|
|
50
51
|
onInput={handleInputChange}
|
|
51
52
|
lang='en'
|
|
52
|
-
className={`grow w-
|
|
53
|
+
className={`grow w-12`}
|
|
53
54
|
/>
|
|
54
|
-
%
|
|
55
55
|
</label>
|
|
56
56
|
);
|
|
57
57
|
};
|
|
@@ -16,7 +16,7 @@ export const ProportionSelectorDropdown: FunctionComponent<ProportionSelectorDro
|
|
|
16
16
|
const width = 'w-[calc(1.5 * var(--tw-space-x-reverse) + 1.5 * var(--tw-space-x))]';
|
|
17
17
|
|
|
18
18
|
return (
|
|
19
|
-
<div className={width}>
|
|
19
|
+
<div className={`${width} inline-flex`}>
|
|
20
20
|
<Dropdown buttonTitle={`${labelPrefix} ${percentLabel}`} placement={'bottom-start'}>
|
|
21
21
|
<ProportionSelector
|
|
22
22
|
proportionInterval={proportionInterval}
|
|
@@ -36,7 +36,7 @@ export const ScalingSelector: FunctionComponent<ScalingSelectorProps> = ({
|
|
|
36
36
|
const value = select.value as ScaleType;
|
|
37
37
|
setYAxisScaleType(value);
|
|
38
38
|
}}
|
|
39
|
-
selectStyle={`${className} select-xs
|
|
39
|
+
selectStyle={`${className ?? ''} select-xs`}
|
|
40
40
|
/>
|
|
41
41
|
);
|
|
42
42
|
};
|
|
@@ -10,7 +10,7 @@ export interface SelectProps {
|
|
|
10
10
|
|
|
11
11
|
export const Select: FunctionComponent<SelectProps> = ({ items, selected, onChange, selectStyle }) => {
|
|
12
12
|
return (
|
|
13
|
-
<select class={`select
|
|
13
|
+
<select class={`select ${selectStyle} w-fit`} value={selected} onChange={onChange}>
|
|
14
14
|
{items.map((item) => (
|
|
15
15
|
<option key={item.value} value={item.value} disabled={item.disabled}>
|
|
16
16
|
{item.label}
|
|
@@ -45,7 +45,7 @@ const Tabs: FunctionComponent<ComponentTabsProps> = ({ tabs, toolbar }) => {
|
|
|
45
45
|
{tabElements}
|
|
46
46
|
{toolbar && <div className='py-2 flex flex-wrap gap-y-1'>{toolbarElement}</div>}
|
|
47
47
|
</div>
|
|
48
|
-
<div className={`p-2
|
|
48
|
+
<div className={`p-2 grow overflow-scroll border-2 border-gray-100 rounded-b-md rounded-tr-md`}>
|
|
49
49
|
{tabs.map((tab) => (
|
|
50
50
|
<div className='h-full' key={tab.title} hidden={activeTab !== tab.title}>
|
|
51
51
|
{tab.content}
|
|
@@ -193,7 +193,7 @@ export const DateRangeFilterInner = ({
|
|
|
193
193
|
return (
|
|
194
194
|
<div className={'@container'} ref={divRef}>
|
|
195
195
|
<div className='flex min-w-[7.5rem] flex-col @md:flex-row'>
|
|
196
|
-
<div className='
|
|
196
|
+
<div className='grow'>
|
|
197
197
|
<ClearableSelect
|
|
198
198
|
items={options.map((item) => item.label)}
|
|
199
199
|
placeholderText={placeholder}
|
|
@@ -205,9 +205,9 @@ export const DateRangeFilterInner = ({
|
|
|
205
205
|
selectClassName={'rounded-t-md rounded-b-none @md:rounded-l-md @md:rounded-r-none'}
|
|
206
206
|
/>
|
|
207
207
|
</div>
|
|
208
|
-
<div className={'flex
|
|
208
|
+
<div className={'flex grow flex-col @4xs:flex-row'}>
|
|
209
209
|
<DatePicker
|
|
210
|
-
className={'
|
|
210
|
+
className={'grow min-w-[7.5rem] @4xs:rounded-bl-md @md:rounded-l-none rounded-none'}
|
|
211
211
|
value={state?.dateFrom}
|
|
212
212
|
onChange={onChangeDateFrom}
|
|
213
213
|
maxDate={state?.dateTo}
|
|
@@ -215,7 +215,7 @@ export const DateRangeFilterInner = ({
|
|
|
215
215
|
/>
|
|
216
216
|
<DatePicker
|
|
217
217
|
className={
|
|
218
|
-
'
|
|
218
|
+
'grow min-w-[7.5rem] rounded-b-md rounded-t-none @4xs:rounded-tr-none @4xs:rounded-l-none @md:rounded-r-md '
|
|
219
219
|
}
|
|
220
220
|
value={state?.dateTo}
|
|
221
221
|
onChange={onChangeDateTo}
|
|
@@ -178,7 +178,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
|
|
|
178
178
|
setDisplayedMutationTypes={setDisplayedMutationTypes}
|
|
179
179
|
/>
|
|
180
180
|
<CsvDownloadButton
|
|
181
|
-
className='
|
|
181
|
+
className='btn btn-xs'
|
|
182
182
|
getData={() => getMutationComparisonTableData({ content: filteredData }, proportionInterval)}
|
|
183
183
|
filename='mutation_comparison.csv'
|
|
184
184
|
/>
|
|
@@ -200,7 +200,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
|
|
|
200
200
|
setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}
|
|
201
201
|
/>
|
|
202
202
|
<CsvDownloadButton
|
|
203
|
-
className='
|
|
203
|
+
className='btn btn-xs'
|
|
204
204
|
getData={() =>
|
|
205
205
|
getMutationsTableData(
|
|
206
206
|
filteredData.tableData,
|
|
@@ -215,7 +215,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
|
|
|
215
215
|
)}
|
|
216
216
|
{activeTab === 'Insertions' && (
|
|
217
217
|
<CsvDownloadButton
|
|
218
|
-
className='
|
|
218
|
+
className='btn btn-xs'
|
|
219
219
|
getData={() =>
|
|
220
220
|
getInsertionsTableData(filteredData.insertions).map((row) => {
|
|
221
221
|
return {
|
|
@@ -240,7 +240,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
|
|
|
240
240
|
labelPrefix='Mean proportion'
|
|
241
241
|
/>
|
|
242
242
|
<CsvDownloadButton
|
|
243
|
-
className='
|
|
243
|
+
className='btn btn-xs'
|
|
244
244
|
getData={() => getDownloadData(filteredData)}
|
|
245
245
|
filename='mutations_over_time.csv'
|
|
246
246
|
/>
|
|
@@ -167,7 +167,7 @@ const Toolbar = ({ activeTab, data, yAxisScaleType, setYAxisScaleType, originalC
|
|
|
167
167
|
/>
|
|
168
168
|
)}
|
|
169
169
|
<CsvDownloadButton
|
|
170
|
-
className='
|
|
170
|
+
className='btn btn-xs'
|
|
171
171
|
getData={() => getNumberOfSequencesOverTimeTableData(data, originalComponentProps.granularity)}
|
|
172
172
|
filename='number_of_sequences_over_time.csv'
|
|
173
173
|
/>
|
|
@@ -218,7 +218,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
|
|
|
218
218
|
/>
|
|
219
219
|
)}
|
|
220
220
|
<CsvDownloadButton
|
|
221
|
-
className='
|
|
221
|
+
className='btn btn-xs'
|
|
222
222
|
getData={() => getPrevalenceOverTimeTableData(data, granularity)}
|
|
223
223
|
filename='prevalence_over_time.csv'
|
|
224
224
|
/>
|
|
@@ -106,7 +106,7 @@ const DataMatchInformation: FunctionComponent<DataMatchInformationProps> = ({
|
|
|
106
106
|
|
|
107
107
|
return (
|
|
108
108
|
<Modal
|
|
109
|
-
buttonClassName='text-sm absolute bottom-0 px-1 z-
|
|
109
|
+
buttonClassName='text-sm absolute bottom-0 px-1 z-1001 bg-white rounded-sm border border-gray-200'
|
|
110
110
|
modalContent={
|
|
111
111
|
<>
|
|
112
112
|
<InfoHeadline1>Sequences By Location - Map View</InfoHeadline1>
|
|
@@ -149,15 +149,11 @@ type ToolbarProps = {
|
|
|
149
149
|
|
|
150
150
|
const Toolbar: FunctionComponent<ToolbarProps> = ({ originalComponentProps, tableData }) => {
|
|
151
151
|
return (
|
|
152
|
-
|
|
153
|
-
<CsvDownloadButton
|
|
154
|
-
className='mx-1 btn btn-xs'
|
|
155
|
-
getData={() => tableData}
|
|
156
|
-
filename='sequences_by_location.csv'
|
|
157
|
-
/>
|
|
152
|
+
<>
|
|
153
|
+
<CsvDownloadButton className='btn btn-xs' getData={() => tableData} filename='sequences_by_location.csv' />
|
|
158
154
|
<SequencesByLocationMapInfo originalComponentProps={originalComponentProps} />
|
|
159
155
|
<Fullscreen />
|
|
160
|
-
|
|
156
|
+
</>
|
|
161
157
|
);
|
|
162
158
|
};
|
|
163
159
|
|
package/src/styles/tailwind.css
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
@
|
|
2
|
-
|
|
3
|
-
@
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
@plugin "daisyui" {
|
|
4
|
+
themes: light --default;
|
|
5
|
+
}
|
|
6
|
+
@plugin "@iconify/tailwind4" {
|
|
7
|
+
prefixes: mdi, mdi-light;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@theme {
|
|
11
|
+
--container-2xs: 18rem;
|
|
12
|
+
--container-3xs: 16rem;
|
|
13
|
+
--container-4xs: 14rem;
|
|
14
|
+
}
|
|
@@ -78,7 +78,7 @@ export default meta;
|
|
|
78
78
|
export const Default: StoryObj<Required<DateRangeFilterProps>> = {
|
|
79
79
|
render: (args) =>
|
|
80
80
|
html` <gs-app lapis="${LAPIS_URL}">
|
|
81
|
-
<div class="max-w-
|
|
81
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
82
82
|
<gs-date-range-filter
|
|
83
83
|
.dateRangeOptions=${args.dateRangeOptions}
|
|
84
84
|
.earliestDate=${args.earliestDate}
|
|
@@ -94,7 +94,7 @@ export const Default: StoryObj<Required<DateRangeFilterProps>> = {
|
|
|
94
94
|
export const TestRenderAttributesInHtmlInsteadOfUsingPropertyExpression: StoryObj<Required<DateRangeFilterProps>> = {
|
|
95
95
|
render: (args) =>
|
|
96
96
|
html` <gs-app lapis="${LAPIS_URL}">
|
|
97
|
-
<div class="max-w-
|
|
97
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
98
98
|
<gs-date-range-filter
|
|
99
99
|
.dateRangeOptions=${args.dateRangeOptions}
|
|
100
100
|
earliestDate="${args.earliestDate}"
|
|
@@ -87,7 +87,7 @@ export default meta;
|
|
|
87
87
|
const Template: StoryObj<Required<LineageFilterProps>> = {
|
|
88
88
|
render: (args) => {
|
|
89
89
|
return html` <gs-app lapis="${LAPIS_URL}">
|
|
90
|
-
<div class="max-w-
|
|
90
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
91
91
|
<gs-lineage-filter
|
|
92
92
|
.lapisField=${args.lapisField}
|
|
93
93
|
.lapisFilter=${args.lapisFilter}
|
|
@@ -67,7 +67,7 @@ export default meta;
|
|
|
67
67
|
const Template: StoryObj<LocationFilterProps> = {
|
|
68
68
|
render: (args) => {
|
|
69
69
|
return html` <gs-app lapis="${LAPIS_URL}">
|
|
70
|
-
<div class="max-w-
|
|
70
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
71
71
|
<gs-location-filter
|
|
72
72
|
.fields=${args.fields}
|
|
73
73
|
.lapisFilter=${args.lapisFilter}
|
|
@@ -46,7 +46,7 @@ export default meta;
|
|
|
46
46
|
const Template: StoryObj<MutationFilterProps> = {
|
|
47
47
|
render: (args) => {
|
|
48
48
|
return html` <gs-app lapis="${LAPIS_URL}">
|
|
49
|
-
<div class="max-w-
|
|
49
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
50
50
|
<gs-mutation-filter .initialValue=${args.initialValue} .width=${args.width}></gs-mutation-filter>
|
|
51
51
|
</div>
|
|
52
52
|
</gs-app>`;
|
|
@@ -86,7 +86,7 @@ export default meta;
|
|
|
86
86
|
export const Default: StoryObj<Required<TextFilterProps>> = {
|
|
87
87
|
render: (args) => {
|
|
88
88
|
return html` <gs-app lapis="${LAPIS_URL}">
|
|
89
|
-
<div class="max-w-
|
|
89
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
90
90
|
<gs-text-filter
|
|
91
91
|
.lapisField=${args.lapisField}
|
|
92
92
|
.lapisFilter=${args.lapisFilter}
|