@genspectrum/dashboard-components 0.19.3 → 0.19.4
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 +223 -0
- package/dist/{LineageFilterChangedEvent-b0iuroUL.js → LineageFilterChangedEvent-GgkxoF3X.js} +4 -2
- package/dist/{LineageFilterChangedEvent-b0iuroUL.js.map → LineageFilterChangedEvent-GgkxoF3X.js.map} +1 -1
- package/dist/components.d.ts +146 -29
- package/dist/components.js +555 -234
- package/dist/components.js.map +1 -1
- package/dist/util.d.ts +51 -29
- package/dist/util.js +1 -1
- package/package.json +1 -1
- package/src/preact/components/min-max-range-slider.tsx +19 -4
- package/src/preact/dateRangeFilter/date-range-filter.stories.tsx +4 -1
- package/src/preact/genomeViewer/loadGff3.spec.ts +1 -1
- package/src/preact/genomeViewer/loadGff3.ts +12 -6
- package/src/preact/numberRangeFilter/NumberRangeFilterChangedEvent.ts +31 -0
- package/src/preact/numberRangeFilter/number-range-filter.stories.tsx +383 -0
- package/src/preact/numberRangeFilter/number-range-filter.tsx +159 -0
- package/src/preact/numberRangeFilter/useSelectedRangeReducer.ts +137 -0
- package/src/utils/gsEventNames.ts +2 -0
- package/src/web-components/input/gs-number-range-filter.spec.ts +27 -0
- package/src/web-components/input/gs-number-range-filter.stories.ts +96 -0
- package/src/web-components/input/gs-number-range-filter.tsx +148 -0
- package/src/web-components/input/gs-text-filter.stories.ts +2 -2
- package/src/web-components/input/index.ts +1 -0
- package/standalone-bundle/dashboard-components.js +6921 -6640
- package/standalone-bundle/dashboard-components.js.map +1 -1
package/dist/util.d.ts
CHANGED
|
@@ -157,6 +157,8 @@ export declare const gsEventNames: {
|
|
|
157
157
|
readonly lineageFilterChanged: "gs-lineage-filter-changed";
|
|
158
158
|
readonly locationChanged: "gs-location-changed";
|
|
159
159
|
readonly textFilterChanged: "gs-text-filter-changed";
|
|
160
|
+
readonly numberRangeFilterChanged: "gs-number-range-filter-changed";
|
|
161
|
+
readonly numberRangeValueChanged: "gs-number-range-value-changed";
|
|
160
162
|
};
|
|
161
163
|
|
|
162
164
|
export declare type LapisFilter = default_2.infer<typeof lapisFilterSchema>;
|
|
@@ -960,7 +962,7 @@ declare global {
|
|
|
960
962
|
|
|
961
963
|
declare global {
|
|
962
964
|
interface HTMLElementTagNameMap {
|
|
963
|
-
'gs-
|
|
965
|
+
'gs-prevalence-over-time': PrevalenceOverTimeComponent;
|
|
964
966
|
}
|
|
965
967
|
}
|
|
966
968
|
|
|
@@ -968,7 +970,7 @@ declare global {
|
|
|
968
970
|
declare global {
|
|
969
971
|
namespace JSX {
|
|
970
972
|
interface IntrinsicElements {
|
|
971
|
-
'gs-
|
|
973
|
+
'gs-prevalence-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
972
974
|
}
|
|
973
975
|
}
|
|
974
976
|
}
|
|
@@ -976,7 +978,7 @@ declare global {
|
|
|
976
978
|
|
|
977
979
|
declare global {
|
|
978
980
|
interface HTMLElementTagNameMap {
|
|
979
|
-
'gs-
|
|
981
|
+
'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;
|
|
980
982
|
}
|
|
981
983
|
}
|
|
982
984
|
|
|
@@ -984,7 +986,7 @@ declare global {
|
|
|
984
986
|
declare global {
|
|
985
987
|
namespace JSX {
|
|
986
988
|
interface IntrinsicElements {
|
|
987
|
-
'gs-
|
|
989
|
+
'gs-relative-growth-advantage': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
988
990
|
}
|
|
989
991
|
}
|
|
990
992
|
}
|
|
@@ -992,7 +994,7 @@ declare global {
|
|
|
992
994
|
|
|
993
995
|
declare global {
|
|
994
996
|
interface HTMLElementTagNameMap {
|
|
995
|
-
'gs-
|
|
997
|
+
'gs-aggregate': AggregateComponent;
|
|
996
998
|
}
|
|
997
999
|
}
|
|
998
1000
|
|
|
@@ -1000,7 +1002,7 @@ declare global {
|
|
|
1000
1002
|
declare global {
|
|
1001
1003
|
namespace JSX {
|
|
1002
1004
|
interface IntrinsicElements {
|
|
1003
|
-
'gs-
|
|
1005
|
+
'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1004
1006
|
}
|
|
1005
1007
|
}
|
|
1006
1008
|
}
|
|
@@ -1008,7 +1010,7 @@ declare global {
|
|
|
1008
1010
|
|
|
1009
1011
|
declare global {
|
|
1010
1012
|
interface HTMLElementTagNameMap {
|
|
1011
|
-
'gs-
|
|
1013
|
+
'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
|
|
1012
1014
|
}
|
|
1013
1015
|
}
|
|
1014
1016
|
|
|
@@ -1016,7 +1018,7 @@ declare global {
|
|
|
1016
1018
|
declare global {
|
|
1017
1019
|
namespace JSX {
|
|
1018
1020
|
interface IntrinsicElements {
|
|
1019
|
-
'gs-
|
|
1021
|
+
'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1020
1022
|
}
|
|
1021
1023
|
}
|
|
1022
1024
|
}
|
|
@@ -1040,7 +1042,7 @@ declare global {
|
|
|
1040
1042
|
|
|
1041
1043
|
declare global {
|
|
1042
1044
|
interface HTMLElementTagNameMap {
|
|
1043
|
-
'gs-
|
|
1045
|
+
'gs-sequences-by-location': SequencesByLocationComponent;
|
|
1044
1046
|
}
|
|
1045
1047
|
}
|
|
1046
1048
|
|
|
@@ -1048,7 +1050,7 @@ declare global {
|
|
|
1048
1050
|
declare global {
|
|
1049
1051
|
namespace JSX {
|
|
1050
1052
|
interface IntrinsicElements {
|
|
1051
|
-
'gs-
|
|
1053
|
+
'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1052
1054
|
}
|
|
1053
1055
|
}
|
|
1054
1056
|
}
|
|
@@ -1056,7 +1058,11 @@ declare global {
|
|
|
1056
1058
|
|
|
1057
1059
|
declare global {
|
|
1058
1060
|
interface HTMLElementTagNameMap {
|
|
1059
|
-
'gs-
|
|
1061
|
+
'gs-date-range-filter': DateRangeFilterComponent;
|
|
1062
|
+
}
|
|
1063
|
+
interface HTMLElementEventMap {
|
|
1064
|
+
[gsEventNames.dateRangeFilterChanged]: CustomEvent<Record<string, string>>;
|
|
1065
|
+
[gsEventNames.dateRangeOptionChanged]: DateRangeOptionChangedEvent;
|
|
1060
1066
|
}
|
|
1061
1067
|
}
|
|
1062
1068
|
|
|
@@ -1064,7 +1070,7 @@ declare global {
|
|
|
1064
1070
|
declare global {
|
|
1065
1071
|
namespace JSX {
|
|
1066
1072
|
interface IntrinsicElements {
|
|
1067
|
-
'gs-
|
|
1073
|
+
'gs-date-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1068
1074
|
}
|
|
1069
1075
|
}
|
|
1070
1076
|
}
|
|
@@ -1072,7 +1078,10 @@ declare global {
|
|
|
1072
1078
|
|
|
1073
1079
|
declare global {
|
|
1074
1080
|
interface HTMLElementTagNameMap {
|
|
1075
|
-
'gs-
|
|
1081
|
+
'gs-location-filter': LocationFilterComponent;
|
|
1082
|
+
}
|
|
1083
|
+
interface HTMLElementEventMap {
|
|
1084
|
+
[gsEventNames.locationChanged]: LocationChangedEvent;
|
|
1076
1085
|
}
|
|
1077
1086
|
}
|
|
1078
1087
|
|
|
@@ -1080,7 +1089,7 @@ declare global {
|
|
|
1080
1089
|
declare global {
|
|
1081
1090
|
namespace JSX {
|
|
1082
1091
|
interface IntrinsicElements {
|
|
1083
|
-
'gs-
|
|
1092
|
+
'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1084
1093
|
}
|
|
1085
1094
|
}
|
|
1086
1095
|
}
|
|
@@ -1088,11 +1097,7 @@ declare global {
|
|
|
1088
1097
|
|
|
1089
1098
|
declare global {
|
|
1090
1099
|
interface HTMLElementTagNameMap {
|
|
1091
|
-
'gs-
|
|
1092
|
-
}
|
|
1093
|
-
interface HTMLElementEventMap {
|
|
1094
|
-
[gsEventNames.dateRangeFilterChanged]: CustomEvent<Record<string, string>>;
|
|
1095
|
-
[gsEventNames.dateRangeOptionChanged]: DateRangeOptionChangedEvent;
|
|
1100
|
+
'gs-statistics': StatisticsComponent;
|
|
1096
1101
|
}
|
|
1097
1102
|
}
|
|
1098
1103
|
|
|
@@ -1100,7 +1105,7 @@ declare global {
|
|
|
1100
1105
|
declare global {
|
|
1101
1106
|
namespace JSX {
|
|
1102
1107
|
interface IntrinsicElements {
|
|
1103
|
-
'gs-
|
|
1108
|
+
'gs-statistics': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1104
1109
|
}
|
|
1105
1110
|
}
|
|
1106
1111
|
}
|
|
@@ -1108,10 +1113,10 @@ declare global {
|
|
|
1108
1113
|
|
|
1109
1114
|
declare global {
|
|
1110
1115
|
interface HTMLElementTagNameMap {
|
|
1111
|
-
'gs-
|
|
1116
|
+
'gs-text-filter': TextFilterComponent;
|
|
1112
1117
|
}
|
|
1113
1118
|
interface HTMLElementEventMap {
|
|
1114
|
-
[gsEventNames.
|
|
1119
|
+
[gsEventNames.textFilterChanged]: TextFilterChangedEvent;
|
|
1115
1120
|
}
|
|
1116
1121
|
}
|
|
1117
1122
|
|
|
@@ -1119,7 +1124,7 @@ declare global {
|
|
|
1119
1124
|
declare global {
|
|
1120
1125
|
namespace JSX {
|
|
1121
1126
|
interface IntrinsicElements {
|
|
1122
|
-
'gs-
|
|
1127
|
+
'gs-text-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1123
1128
|
}
|
|
1124
1129
|
}
|
|
1125
1130
|
}
|
|
@@ -1127,10 +1132,10 @@ declare global {
|
|
|
1127
1132
|
|
|
1128
1133
|
declare global {
|
|
1129
1134
|
interface HTMLElementTagNameMap {
|
|
1130
|
-
'gs-
|
|
1135
|
+
'gs-lineage-filter': LineageFilterComponent;
|
|
1131
1136
|
}
|
|
1132
1137
|
interface HTMLElementEventMap {
|
|
1133
|
-
[gsEventNames.
|
|
1138
|
+
[gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
|
|
1134
1139
|
}
|
|
1135
1140
|
}
|
|
1136
1141
|
|
|
@@ -1138,7 +1143,7 @@ declare global {
|
|
|
1138
1143
|
declare global {
|
|
1139
1144
|
namespace JSX {
|
|
1140
1145
|
interface IntrinsicElements {
|
|
1141
|
-
'gs-
|
|
1146
|
+
'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1142
1147
|
}
|
|
1143
1148
|
}
|
|
1144
1149
|
}
|
|
@@ -1165,10 +1170,11 @@ declare global {
|
|
|
1165
1170
|
|
|
1166
1171
|
declare global {
|
|
1167
1172
|
interface HTMLElementTagNameMap {
|
|
1168
|
-
'gs-
|
|
1173
|
+
'gs-number-range-filter': NumberRangeFilterComponent;
|
|
1169
1174
|
}
|
|
1170
1175
|
interface HTMLElementEventMap {
|
|
1171
|
-
[gsEventNames.
|
|
1176
|
+
[gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
|
|
1177
|
+
[gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
|
|
1172
1178
|
}
|
|
1173
1179
|
}
|
|
1174
1180
|
|
|
@@ -1176,7 +1182,23 @@ declare global {
|
|
|
1176
1182
|
declare global {
|
|
1177
1183
|
namespace JSX {
|
|
1178
1184
|
interface IntrinsicElements {
|
|
1179
|
-
'gs-
|
|
1185
|
+
'gs-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
|
|
1190
|
+
|
|
1191
|
+
declare global {
|
|
1192
|
+
interface HTMLElementTagNameMap {
|
|
1193
|
+
'gs-wastewater-mutations-over-time': WastewaterMutationsOverTimeComponent;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
|
|
1198
|
+
declare global {
|
|
1199
|
+
namespace JSX {
|
|
1200
|
+
interface IntrinsicElements {
|
|
1201
|
+
'gs-wastewater-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1180
1202
|
}
|
|
1181
1203
|
}
|
|
1182
1204
|
}
|
package/dist/util.js
CHANGED
package/package.json
CHANGED
|
@@ -6,6 +6,7 @@ export interface MinMaxPercentSliderProps {
|
|
|
6
6
|
max: number;
|
|
7
7
|
setMin: (min: number) => void;
|
|
8
8
|
setMax: (max: number) => void;
|
|
9
|
+
onDrop?: () => void;
|
|
9
10
|
rangeMin?: number;
|
|
10
11
|
rangeMax?: number;
|
|
11
12
|
step?: number;
|
|
@@ -16,6 +17,7 @@ export const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({
|
|
|
16
17
|
max,
|
|
17
18
|
setMin,
|
|
18
19
|
setMax,
|
|
20
|
+
onDrop,
|
|
19
21
|
rangeMin = 0,
|
|
20
22
|
rangeMax = 100,
|
|
21
23
|
step = 0.1,
|
|
@@ -55,14 +57,16 @@ export const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({
|
|
|
55
57
|
}
|
|
56
58
|
};
|
|
57
59
|
|
|
60
|
+
const lowerBoundary = getGradientBoundary(min, rangeMin, rangeMax);
|
|
61
|
+
const upperBoundary = getGradientBoundary(max, rangeMin, rangeMax);
|
|
58
62
|
const background = `
|
|
59
63
|
linear-gradient(
|
|
60
64
|
to right,
|
|
61
65
|
${sliderColor} 0%,
|
|
62
|
-
${sliderColor} ${
|
|
63
|
-
${rangeColor} ${
|
|
64
|
-
${rangeColor} ${
|
|
65
|
-
${sliderColor} ${
|
|
66
|
+
${sliderColor} ${lowerBoundary}%,
|
|
67
|
+
${rangeColor} ${lowerBoundary}%,
|
|
68
|
+
${rangeColor} ${upperBoundary}%,
|
|
69
|
+
${sliderColor} ${upperBoundary}%,
|
|
66
70
|
${sliderColor} 100%)
|
|
67
71
|
`;
|
|
68
72
|
|
|
@@ -73,6 +77,8 @@ export const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({
|
|
|
73
77
|
type='range'
|
|
74
78
|
value={min}
|
|
75
79
|
onInput={onMinChange}
|
|
80
|
+
onMouseUp={() => onDrop?.()}
|
|
81
|
+
onTouchEnd={() => onDrop?.()}
|
|
76
82
|
min={`${rangeMin}`}
|
|
77
83
|
max={`${rangeMax}`}
|
|
78
84
|
step={step}
|
|
@@ -86,8 +92,17 @@ export const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({
|
|
|
86
92
|
max={`${rangeMax}`}
|
|
87
93
|
step={step}
|
|
88
94
|
onInput={onMaxChange}
|
|
95
|
+
onMouseUp={() => onDrop?.()}
|
|
96
|
+
onTouchEnd={() => onDrop?.()}
|
|
89
97
|
style={{ background, zIndex: zIndexTo }}
|
|
90
98
|
/>
|
|
91
99
|
</div>
|
|
92
100
|
);
|
|
93
101
|
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* This is a linear function that returns 0 for x = lowerBound and 100 for x = upperBound.
|
|
105
|
+
*/
|
|
106
|
+
function getGradientBoundary(x: number, lowerBound: number, upperBound: number) {
|
|
107
|
+
return ((x - lowerBound) / (upperBound - lowerBound)) * 100;
|
|
108
|
+
}
|
|
@@ -256,7 +256,10 @@ export const ChangingTheValueProgrammatically: StoryObj<DateRangeFilterProps> =
|
|
|
256
256
|
|
|
257
257
|
await step('Clearing the value from within the component is still possible', async () => {
|
|
258
258
|
await waitFor(async () => {
|
|
259
|
-
await
|
|
259
|
+
await expect(canvas.getByRole('button', { name: '×' })).toBeVisible();
|
|
260
|
+
});
|
|
261
|
+
await userEvent.click(canvas.getByRole('button', { name: '×' }));
|
|
262
|
+
await waitFor(async () => {
|
|
260
263
|
await expectOptionSelected(canvasElement, placeholder);
|
|
261
264
|
});
|
|
262
265
|
await waitFor(async () => {
|
|
@@ -10,7 +10,7 @@ const SplicedGeneData = `
|
|
|
10
10
|
##species https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=641809
|
|
11
11
|
NC_026431.1 RefSeq region 1 982 . + . ID=NC_026431.1:1..982;Dbxref=taxon:641809;Name=7;collection-date=09-Apr-2009;country=USA: California state;gbkey=Src;genome=genomic;mol_type=viral cRNA;nat-host=Homo sapiens%3B gender M%3B age 54;segment=7;serotype=H1N1;strain=A/California/07/2009
|
|
12
12
|
NC_026431.1 RefSeq CDS 1 26 . + 0 Name=M2;gene=M2;gbkey=CDS;locus_tag=UJ99_s7gp1;protein_id=YP_009118622.1;product=matrix protein 2;ID=cds-YP_009118622.1;Dbxref=GenBank:YP_009118622.1,GeneID:23308108
|
|
13
|
-
NC_026431.1 RefSeq CDS 715 982 . + 1 Name=M2;gene=M2;gbkey=CDS;locus_tag=UJ99_s7gp1;protein_id=YP_009118622.1;product=matrix protein 2;ID=cds-YP_009118622.1;Dbxref=GenBank:YP_009118622.1,GeneID:23308108
|
|
13
|
+
NC_026431.1 RefSeq CDS 715 982 . + 1 Name="M2";gene=M2;gbkey=CDS;locus_tag=UJ99_s7gp1;protein_id=YP_009118622.1;product=matrix protein 2;ID=cds-YP_009118622.1;Dbxref=GenBank:YP_009118622.1,GeneID:23308108
|
|
14
14
|
NC_026431.1 RefSeq CDS 1 759 . + 0 Name=M1;gene=M1;gbkey=CDS;locus_tag=UJ99_s7gp2;protein_id=YP_009118623.1;product=matrix protein 1;ID=cds-YP_009118623.1;Dbxref=GenBank:YP_009118623.1,GeneID:23308107
|
|
15
15
|
NC_026431.1 RefSeq CDS 760 790 . + 0 Name=fakeGene;gene=fakeGene;gbkey=CDS;locus_tag=UJ99_s7fake;protein_id=YP_009118624.1;product=None;ID=cds-YP_009118624.1;Dbxref=GenBank:YP_009118624.1,GeneID:23308109
|
|
16
16
|
`;
|
|
@@ -60,6 +60,10 @@ function getAttributes(attributes: string): Map<string, string> {
|
|
|
60
60
|
return attrMap;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
function removeQuotes(input: string) {
|
|
64
|
+
return input.replace(/^['"](.*)['"]$/, '$1');
|
|
65
|
+
}
|
|
66
|
+
|
|
63
67
|
function getCDSMap(lines: string[], genome_type: string, geneMap: CDSMap): CDSMap {
|
|
64
68
|
for (const line of lines) {
|
|
65
69
|
if (line.startsWith('#') || line.trim() === '') {
|
|
@@ -73,7 +77,7 @@ function getCDSMap(lines: string[], genome_type: string, geneMap: CDSMap): CDSMa
|
|
|
73
77
|
|
|
74
78
|
const [, , type, startStr, endStr, , , , attributes] = fields;
|
|
75
79
|
|
|
76
|
-
if (type.toLowerCase() !== genome_type.toLowerCase()) {
|
|
80
|
+
if (removeQuotes(type.toLowerCase()) !== genome_type.toLowerCase()) {
|
|
77
81
|
continue;
|
|
78
82
|
}
|
|
79
83
|
|
|
@@ -85,16 +89,18 @@ function getCDSMap(lines: string[], genome_type: string, geneMap: CDSMap): CDSMa
|
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
const attrPairs = getAttributes(attributes);
|
|
88
|
-
const
|
|
89
|
-
if (!
|
|
92
|
+
const labelAttribute = attrPairs.get('Name') || attrPairs.get('gene') || attrPairs.get('gene_name');
|
|
93
|
+
if (!labelAttribute) {
|
|
90
94
|
throw new UserFacingError(
|
|
91
95
|
'Invalid gff3 source',
|
|
92
96
|
`No label found for feature: "${line}", must contain label in Name, gene, or gene_name attribute`,
|
|
93
97
|
);
|
|
94
98
|
}
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
const label = removeQuotes(labelAttribute);
|
|
100
|
+
const id = removeQuotes(attrPairs.get('ID') || labelAttribute);
|
|
101
|
+
const parentAttribute = attrPairs.get('Parent');
|
|
102
|
+
if (parentAttribute) {
|
|
103
|
+
const parent = removeQuotes(parentAttribute);
|
|
98
104
|
if (parent && parent in geneMap) {
|
|
99
105
|
delete geneMap[parent];
|
|
100
106
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
|
|
3
|
+
import { gsEventNames } from '../../utils/gsEventNames';
|
|
4
|
+
|
|
5
|
+
type LapisNumberFilter = Record<string, number | undefined>;
|
|
6
|
+
|
|
7
|
+
export const numberRangeSchema = z.object({
|
|
8
|
+
min: z.number().optional(),
|
|
9
|
+
max: z.number().optional(),
|
|
10
|
+
});
|
|
11
|
+
export type NumberRange = z.infer<typeof numberRangeSchema>;
|
|
12
|
+
|
|
13
|
+
export class NumberRangeValueChangedEvent extends CustomEvent<NumberRange> {
|
|
14
|
+
constructor(detail: NumberRange) {
|
|
15
|
+
super(gsEventNames.numberRangeValueChanged, {
|
|
16
|
+
detail,
|
|
17
|
+
bubbles: true,
|
|
18
|
+
composed: true,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class NumberRangeFilterChangedEvent extends CustomEvent<LapisNumberFilter> {
|
|
24
|
+
constructor(detail: LapisNumberFilter) {
|
|
25
|
+
super(gsEventNames.numberRangeFilterChanged, {
|
|
26
|
+
detail,
|
|
27
|
+
bubbles: true,
|
|
28
|
+
composed: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|