@genspectrum/dashboard-components 1.10.0 → 1.10.1
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 +33 -1
- package/dist/components.d.ts +23 -22
- package/dist/components.js +24 -1
- package/dist/components.js.map +1 -1
- package/dist/util.d.ts +22 -22
- package/package.json +1 -1
- package/src/preact/dateRangeFilter/date-range-filter.stories.tsx +2 -0
- package/src/web-components/input/gs-lineage-filter.stories.ts +48 -0
- package/src/web-components/input/gs-lineage-filter.tsx +28 -1
- package/src/web-components/input/gs-text-filter.stories.ts +9 -7
- package/standalone-bundle/dashboard-components.js +16 -1
- package/standalone-bundle/dashboard-components.js.map +1 -1
package/dist/util.d.ts
CHANGED
|
@@ -942,7 +942,7 @@ declare global {
|
|
|
942
942
|
|
|
943
943
|
declare global {
|
|
944
944
|
interface HTMLElementTagNameMap {
|
|
945
|
-
'gs-
|
|
945
|
+
'gs-mutation-comparison-component': MutationComparisonComponent;
|
|
946
946
|
}
|
|
947
947
|
}
|
|
948
948
|
|
|
@@ -950,7 +950,7 @@ declare global {
|
|
|
950
950
|
declare global {
|
|
951
951
|
namespace JSX {
|
|
952
952
|
interface IntrinsicElements {
|
|
953
|
-
'gs-
|
|
953
|
+
'gs-mutation-comparison-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
954
954
|
}
|
|
955
955
|
}
|
|
956
956
|
}
|
|
@@ -958,7 +958,7 @@ declare global {
|
|
|
958
958
|
|
|
959
959
|
declare global {
|
|
960
960
|
interface HTMLElementTagNameMap {
|
|
961
|
-
'gs-
|
|
961
|
+
'gs-mutations': MutationsComponent;
|
|
962
962
|
}
|
|
963
963
|
}
|
|
964
964
|
|
|
@@ -966,7 +966,7 @@ declare global {
|
|
|
966
966
|
declare global {
|
|
967
967
|
namespace JSX {
|
|
968
968
|
interface IntrinsicElements {
|
|
969
|
-
'gs-
|
|
969
|
+
'gs-mutations': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
970
970
|
}
|
|
971
971
|
}
|
|
972
972
|
}
|
|
@@ -990,7 +990,7 @@ declare global {
|
|
|
990
990
|
|
|
991
991
|
declare global {
|
|
992
992
|
interface HTMLElementTagNameMap {
|
|
993
|
-
'gs-
|
|
993
|
+
'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;
|
|
994
994
|
}
|
|
995
995
|
}
|
|
996
996
|
|
|
@@ -998,7 +998,7 @@ declare global {
|
|
|
998
998
|
declare global {
|
|
999
999
|
namespace JSX {
|
|
1000
1000
|
interface IntrinsicElements {
|
|
1001
|
-
'gs-
|
|
1001
|
+
'gs-relative-growth-advantage': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1002
1002
|
}
|
|
1003
1003
|
}
|
|
1004
1004
|
}
|
|
@@ -1006,7 +1006,7 @@ declare global {
|
|
|
1006
1006
|
|
|
1007
1007
|
declare global {
|
|
1008
1008
|
interface HTMLElementTagNameMap {
|
|
1009
|
-
'gs-
|
|
1009
|
+
'gs-aggregate': AggregateComponent;
|
|
1010
1010
|
}
|
|
1011
1011
|
}
|
|
1012
1012
|
|
|
@@ -1014,7 +1014,7 @@ declare global {
|
|
|
1014
1014
|
declare global {
|
|
1015
1015
|
namespace JSX {
|
|
1016
1016
|
interface IntrinsicElements {
|
|
1017
|
-
'gs-
|
|
1017
|
+
'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1018
1018
|
}
|
|
1019
1019
|
}
|
|
1020
1020
|
}
|
|
@@ -1022,7 +1022,7 @@ declare global {
|
|
|
1022
1022
|
|
|
1023
1023
|
declare global {
|
|
1024
1024
|
interface HTMLElementTagNameMap {
|
|
1025
|
-
'gs-
|
|
1025
|
+
'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
|
|
1026
1026
|
}
|
|
1027
1027
|
}
|
|
1028
1028
|
|
|
@@ -1030,7 +1030,7 @@ declare global {
|
|
|
1030
1030
|
declare global {
|
|
1031
1031
|
namespace JSX {
|
|
1032
1032
|
interface IntrinsicElements {
|
|
1033
|
-
'gs-
|
|
1033
|
+
'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1034
1034
|
}
|
|
1035
1035
|
}
|
|
1036
1036
|
}
|
|
@@ -1038,7 +1038,7 @@ declare global {
|
|
|
1038
1038
|
|
|
1039
1039
|
declare global {
|
|
1040
1040
|
interface HTMLElementTagNameMap {
|
|
1041
|
-
'gs-
|
|
1041
|
+
'gs-sequences-by-location': SequencesByLocationComponent;
|
|
1042
1042
|
}
|
|
1043
1043
|
}
|
|
1044
1044
|
|
|
@@ -1046,7 +1046,7 @@ declare global {
|
|
|
1046
1046
|
declare global {
|
|
1047
1047
|
namespace JSX {
|
|
1048
1048
|
interface IntrinsicElements {
|
|
1049
|
-
'gs-
|
|
1049
|
+
'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1050
1050
|
}
|
|
1051
1051
|
}
|
|
1052
1052
|
}
|
|
@@ -1070,7 +1070,7 @@ declare global {
|
|
|
1070
1070
|
|
|
1071
1071
|
declare global {
|
|
1072
1072
|
interface HTMLElementTagNameMap {
|
|
1073
|
-
'gs-
|
|
1073
|
+
'gs-genome-data-viewer': GenomeDataViewerComponent;
|
|
1074
1074
|
}
|
|
1075
1075
|
}
|
|
1076
1076
|
|
|
@@ -1078,7 +1078,7 @@ declare global {
|
|
|
1078
1078
|
declare global {
|
|
1079
1079
|
namespace JSX {
|
|
1080
1080
|
interface IntrinsicElements {
|
|
1081
|
-
'gs-
|
|
1081
|
+
'gs-genome-data-viewer': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1082
1082
|
}
|
|
1083
1083
|
}
|
|
1084
1084
|
}
|
|
@@ -1179,11 +1179,11 @@ declare global {
|
|
|
1179
1179
|
|
|
1180
1180
|
declare global {
|
|
1181
1181
|
interface HTMLElementTagNameMap {
|
|
1182
|
-
'gs-
|
|
1182
|
+
'gs-number-range-filter': NumberRangeFilterComponent;
|
|
1183
1183
|
}
|
|
1184
1184
|
interface HTMLElementEventMap {
|
|
1185
|
-
[gsEventNames.
|
|
1186
|
-
[gsEventNames.
|
|
1185
|
+
[gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
|
|
1186
|
+
[gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
|
|
1187
1187
|
}
|
|
1188
1188
|
}
|
|
1189
1189
|
|
|
@@ -1191,7 +1191,7 @@ declare global {
|
|
|
1191
1191
|
declare global {
|
|
1192
1192
|
namespace JSX {
|
|
1193
1193
|
interface IntrinsicElements {
|
|
1194
|
-
'gs-
|
|
1194
|
+
'gs-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1195
1195
|
}
|
|
1196
1196
|
}
|
|
1197
1197
|
}
|
|
@@ -1199,11 +1199,11 @@ declare global {
|
|
|
1199
1199
|
|
|
1200
1200
|
declare global {
|
|
1201
1201
|
interface HTMLElementTagNameMap {
|
|
1202
|
-
'gs-
|
|
1202
|
+
'gs-lineage-filter': LineageFilterComponent;
|
|
1203
1203
|
}
|
|
1204
1204
|
interface HTMLElementEventMap {
|
|
1205
|
-
[gsEventNames.
|
|
1206
|
-
[gsEventNames.
|
|
1205
|
+
[gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
|
|
1206
|
+
[gsEventNames.lineageFilterMultiChanged]: LineageMultiFilterChangedEvent;
|
|
1207
1207
|
}
|
|
1208
1208
|
}
|
|
1209
1209
|
|
|
@@ -1211,7 +1211,7 @@ declare global {
|
|
|
1211
1211
|
declare global {
|
|
1212
1212
|
namespace JSX {
|
|
1213
1213
|
interface IntrinsicElements {
|
|
1214
|
-
'gs-
|
|
1214
|
+
'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1215
1215
|
}
|
|
1216
1216
|
}
|
|
1217
1217
|
}
|
package/package.json
CHANGED
|
@@ -155,6 +155,54 @@ export const LineageFilter: StoryObj<Required<LineageFilterProps>> = {
|
|
|
155
155
|
},
|
|
156
156
|
};
|
|
157
157
|
|
|
158
|
+
export const LineageFilterStringValue: StoryObj<Required<LineageFilterProps>> = {
|
|
159
|
+
render: (args) => {
|
|
160
|
+
return html` <gs-app lapis="${LAPIS_URL}">
|
|
161
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
162
|
+
<gs-lineage-filter
|
|
163
|
+
lapisField="pangoLineage"
|
|
164
|
+
placeholderText="Enter a lineage"
|
|
165
|
+
value="B.1.1.7"
|
|
166
|
+
.multiSelect=${args.multiSelect}
|
|
167
|
+
></gs-lineage-filter>
|
|
168
|
+
</div>
|
|
169
|
+
</gs-app>`;
|
|
170
|
+
},
|
|
171
|
+
args: {
|
|
172
|
+
multiSelect: false,
|
|
173
|
+
},
|
|
174
|
+
play: async ({ canvasElement }) => {
|
|
175
|
+
const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter');
|
|
176
|
+
await waitFor(() => {
|
|
177
|
+
return expect(canvas.getByPlaceholderText('Enter a lineage')).toBeVisible();
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
export const LineageFilterArrayValue: StoryObj<Required<LineageFilterProps>> = {
|
|
183
|
+
render: (args) => {
|
|
184
|
+
return html` <gs-app lapis="${LAPIS_URL}">
|
|
185
|
+
<div class="max-w-(--breakpoint-lg)">
|
|
186
|
+
<gs-lineage-filter
|
|
187
|
+
lapisField="pangoLineage"
|
|
188
|
+
placeholderText="Enter a lineage"
|
|
189
|
+
value='["B.1.1.7", "B.1.1.10"]'
|
|
190
|
+
.multiSelect=${args.multiSelect}
|
|
191
|
+
></gs-lineage-filter>
|
|
192
|
+
</div>
|
|
193
|
+
</gs-app>`;
|
|
194
|
+
},
|
|
195
|
+
args: {
|
|
196
|
+
multiSelect: true,
|
|
197
|
+
},
|
|
198
|
+
play: async ({ canvasElement }) => {
|
|
199
|
+
const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter');
|
|
200
|
+
await waitFor(() => {
|
|
201
|
+
return expect(canvas.getByPlaceholderText('Enter a lineage')).toBeVisible();
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
|
|
158
206
|
export const DelayToShowLoadingState: StoryObj<Required<LineageFilterProps>> = {
|
|
159
207
|
...Template,
|
|
160
208
|
parameters: {
|
|
@@ -49,7 +49,7 @@ export class LineageFilterComponent extends PreactLitAdapter {
|
|
|
49
49
|
* Can be a string for single select mode or an array of strings (or comma-separated string) for multi-select mode.
|
|
50
50
|
* Examples: "B.1.1.7" or ["B.1.1.7", "BA.5"] or "B.1.1.7,BA.5"
|
|
51
51
|
*/
|
|
52
|
-
@property(
|
|
52
|
+
@property()
|
|
53
53
|
value: string | string[] = '';
|
|
54
54
|
|
|
55
55
|
/**
|
|
@@ -103,6 +103,33 @@ export class LineageFilterComponent extends PreactLitAdapter {
|
|
|
103
103
|
@property({ type: Boolean })
|
|
104
104
|
hideCounts: boolean | undefined = false;
|
|
105
105
|
|
|
106
|
+
override updated(changedProps: Map<string, unknown>) {
|
|
107
|
+
if (changedProps.has('value') || changedProps.has('multiSelect')) {
|
|
108
|
+
if (this.multiSelect) {
|
|
109
|
+
if (typeof this.value === 'string') {
|
|
110
|
+
let parsed: unknown;
|
|
111
|
+
try {
|
|
112
|
+
parsed = JSON.parse(this.value);
|
|
113
|
+
} catch {
|
|
114
|
+
parsed = this.value.split(',').map((s) => s.trim());
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// type guard
|
|
118
|
+
if (Array.isArray(parsed) && parsed.every((v) => typeof v === 'string')) {
|
|
119
|
+
this.value = parsed;
|
|
120
|
+
} else {
|
|
121
|
+
this.value = [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
// single select: ensure value is a string
|
|
126
|
+
if (Array.isArray(this.value)) {
|
|
127
|
+
this.value = this.value[0] ?? '';
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
106
133
|
override render() {
|
|
107
134
|
return (
|
|
108
135
|
<LineageFilter
|
|
@@ -162,13 +162,15 @@ export const FiresEvents: StoryObj<Required<TextFilterProps>> = {
|
|
|
162
162
|
await step('Remove initial value', async () => {
|
|
163
163
|
await userEvent.click(canvas.getByRole('button', { name: 'clear selection' }));
|
|
164
164
|
|
|
165
|
-
await
|
|
166
|
-
expect.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
165
|
+
await waitFor(async () => {
|
|
166
|
+
await expect(listenerMock).toHaveBeenCalledWith(
|
|
167
|
+
expect.objectContaining({
|
|
168
|
+
detail: {
|
|
169
|
+
host: undefined,
|
|
170
|
+
},
|
|
171
|
+
}),
|
|
172
|
+
);
|
|
173
|
+
});
|
|
172
174
|
});
|
|
173
175
|
},
|
|
174
176
|
args: {
|
|
@@ -40199,6 +40199,21 @@ let so = class extends zn {
|
|
|
40199
40199
|
constructor() {
|
|
40200
40200
|
super(...arguments), this.value = "", this.lapisField = "", this.multiSelect = !1, this.lapisFilter = {}, this.placeholderText = void 0, this.width = "100%", this.hideCounts = !1;
|
|
40201
40201
|
}
|
|
40202
|
+
updated(n) {
|
|
40203
|
+
if (n.has("value") || n.has("multiSelect"))
|
|
40204
|
+
if (this.multiSelect) {
|
|
40205
|
+
if (typeof this.value == "string") {
|
|
40206
|
+
let e;
|
|
40207
|
+
try {
|
|
40208
|
+
e = JSON.parse(this.value);
|
|
40209
|
+
} catch {
|
|
40210
|
+
e = this.value.split(",").map((t) => t.trim());
|
|
40211
|
+
}
|
|
40212
|
+
Array.isArray(e) && e.every((t) => typeof t == "string") ? this.value = e : this.value = [];
|
|
40213
|
+
}
|
|
40214
|
+
} else
|
|
40215
|
+
Array.isArray(this.value) && (this.value = this.value[0] ?? "");
|
|
40216
|
+
}
|
|
40202
40217
|
render() {
|
|
40203
40218
|
return /* @__PURE__ */ v(
|
|
40204
40219
|
vB,
|
|
@@ -40215,7 +40230,7 @@ let so = class extends zn {
|
|
|
40215
40230
|
}
|
|
40216
40231
|
};
|
|
40217
40232
|
is([
|
|
40218
|
-
U(
|
|
40233
|
+
U()
|
|
40219
40234
|
], so.prototype, "value", 2);
|
|
40220
40235
|
is([
|
|
40221
40236
|
U()
|