@genspectrum/dashboard-components 1.10.1 → 1.10.3

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/util.d.ts CHANGED
@@ -942,7 +942,7 @@ declare global {
942
942
 
943
943
  declare global {
944
944
  interface HTMLElementTagNameMap {
945
- 'gs-mutation-comparison-component': MutationComparisonComponent;
945
+ 'gs-wastewater-mutations-over-time': WastewaterMutationsOverTimeComponent;
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-mutation-comparison-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
953
+ 'gs-wastewater-mutations-over-time': 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-mutations': MutationsComponent;
961
+ 'gs-mutation-comparison-component': MutationComparisonComponent;
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-mutations': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
969
+ 'gs-mutation-comparison-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
970
970
  }
971
971
  }
972
972
  }
@@ -974,7 +974,7 @@ declare global {
974
974
 
975
975
  declare global {
976
976
  interface HTMLElementTagNameMap {
977
- 'gs-prevalence-over-time': PrevalenceOverTimeComponent;
977
+ 'gs-genome-data-viewer': GenomeDataViewerComponent;
978
978
  }
979
979
  }
980
980
 
@@ -982,7 +982,7 @@ declare global {
982
982
  declare global {
983
983
  namespace JSX {
984
984
  interface IntrinsicElements {
985
- 'gs-prevalence-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
985
+ 'gs-genome-data-viewer': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
986
986
  }
987
987
  }
988
988
  }
@@ -990,7 +990,7 @@ declare global {
990
990
 
991
991
  declare global {
992
992
  interface HTMLElementTagNameMap {
993
- 'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;
993
+ 'gs-mutations': MutationsComponent;
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-relative-growth-advantage': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1001
+ 'gs-mutations': 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-aggregate': AggregateComponent;
1009
+ 'gs-prevalence-over-time': PrevalenceOverTimeComponent;
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-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1017
+ 'gs-prevalence-over-time': 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-number-sequences-over-time': NumberSequencesOverTimeComponent;
1025
+ 'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;
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-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1033
+ 'gs-relative-growth-advantage': 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-sequences-by-location': SequencesByLocationComponent;
1041
+ 'gs-aggregate': AggregateComponent;
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-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1049
+ 'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1050
1050
  }
1051
1051
  }
1052
1052
  }
@@ -1054,7 +1054,7 @@ declare global {
1054
1054
 
1055
1055
  declare global {
1056
1056
  interface HTMLElementTagNameMap {
1057
- 'gs-mutations-over-time': MutationsOverTimeComponent;
1057
+ 'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
1058
1058
  }
1059
1059
  }
1060
1060
 
@@ -1062,7 +1062,7 @@ declare global {
1062
1062
  declare global {
1063
1063
  namespace JSX {
1064
1064
  interface IntrinsicElements {
1065
- 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1065
+ 'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1066
1066
  }
1067
1067
  }
1068
1068
  }
@@ -1070,7 +1070,7 @@ declare global {
1070
1070
 
1071
1071
  declare global {
1072
1072
  interface HTMLElementTagNameMap {
1073
- 'gs-genome-data-viewer': GenomeDataViewerComponent;
1073
+ 'gs-mutations-over-time': MutationsOverTimeComponent;
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-genome-data-viewer': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1081
+ 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1082
1082
  }
1083
1083
  }
1084
1084
  }
@@ -1086,7 +1086,7 @@ declare global {
1086
1086
 
1087
1087
  declare global {
1088
1088
  interface HTMLElementTagNameMap {
1089
- 'gs-statistics': StatisticsComponent;
1089
+ 'gs-sequences-by-location': SequencesByLocationComponent;
1090
1090
  }
1091
1091
  }
1092
1092
 
@@ -1094,7 +1094,7 @@ declare global {
1094
1094
  declare global {
1095
1095
  namespace JSX {
1096
1096
  interface IntrinsicElements {
1097
- 'gs-statistics': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1097
+ 'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1098
1098
  }
1099
1099
  }
1100
1100
  }
@@ -1122,10 +1122,7 @@ declare global {
1122
1122
 
1123
1123
  declare global {
1124
1124
  interface HTMLElementTagNameMap {
1125
- 'gs-location-filter': LocationFilterComponent;
1126
- }
1127
- interface HTMLElementEventMap {
1128
- [gsEventNames.locationChanged]: LocationChangedEvent;
1125
+ 'gs-statistics': StatisticsComponent;
1129
1126
  }
1130
1127
  }
1131
1128
 
@@ -1133,7 +1130,7 @@ declare global {
1133
1130
  declare global {
1134
1131
  namespace JSX {
1135
1132
  interface IntrinsicElements {
1136
- 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1133
+ 'gs-statistics': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1137
1134
  }
1138
1135
  }
1139
1136
  }
@@ -1160,10 +1157,10 @@ declare global {
1160
1157
 
1161
1158
  declare global {
1162
1159
  interface HTMLElementTagNameMap {
1163
- 'gs-mutation-filter': MutationFilterComponent;
1160
+ 'gs-location-filter': LocationFilterComponent;
1164
1161
  }
1165
1162
  interface HTMLElementEventMap {
1166
- [gsEventNames.mutationFilterChanged]: CustomEvent<MutationsFilter>;
1163
+ [gsEventNames.locationChanged]: LocationChangedEvent;
1167
1164
  }
1168
1165
  }
1169
1166
 
@@ -1171,7 +1168,7 @@ declare global {
1171
1168
  declare global {
1172
1169
  namespace JSX {
1173
1170
  interface IntrinsicElements {
1174
- 'gs-mutation-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1171
+ 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1175
1172
  }
1176
1173
  }
1177
1174
  }
@@ -1179,11 +1176,10 @@ declare global {
1179
1176
 
1180
1177
  declare global {
1181
1178
  interface HTMLElementTagNameMap {
1182
- 'gs-number-range-filter': NumberRangeFilterComponent;
1179
+ 'gs-mutation-filter': MutationFilterComponent;
1183
1180
  }
1184
1181
  interface HTMLElementEventMap {
1185
- [gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
1186
- [gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
1182
+ [gsEventNames.mutationFilterChanged]: CustomEvent<MutationsFilter>;
1187
1183
  }
1188
1184
  }
1189
1185
 
@@ -1191,7 +1187,7 @@ declare global {
1191
1187
  declare global {
1192
1188
  namespace JSX {
1193
1189
  interface IntrinsicElements {
1194
- 'gs-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1190
+ 'gs-mutation-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1195
1191
  }
1196
1192
  }
1197
1193
  }
@@ -1199,11 +1195,11 @@ declare global {
1199
1195
 
1200
1196
  declare global {
1201
1197
  interface HTMLElementTagNameMap {
1202
- 'gs-lineage-filter': LineageFilterComponent;
1198
+ 'gs-number-range-filter': NumberRangeFilterComponent;
1203
1199
  }
1204
1200
  interface HTMLElementEventMap {
1205
- [gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
1206
- [gsEventNames.lineageFilterMultiChanged]: LineageMultiFilterChangedEvent;
1201
+ [gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
1202
+ [gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
1207
1203
  }
1208
1204
  }
1209
1205
 
@@ -1211,7 +1207,7 @@ declare global {
1211
1207
  declare global {
1212
1208
  namespace JSX {
1213
1209
  interface IntrinsicElements {
1214
- 'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1210
+ 'gs-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1215
1211
  }
1216
1212
  }
1217
1213
  }
@@ -1219,7 +1215,11 @@ declare global {
1219
1215
 
1220
1216
  declare global {
1221
1217
  interface HTMLElementTagNameMap {
1222
- 'gs-wastewater-mutations-over-time': WastewaterMutationsOverTimeComponent;
1218
+ 'gs-lineage-filter': LineageFilterComponent;
1219
+ }
1220
+ interface HTMLElementEventMap {
1221
+ [gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
1222
+ [gsEventNames.lineageFilterMultiChanged]: LineageMultiFilterChangedEvent;
1223
1223
  }
1224
1224
  }
1225
1225
 
@@ -1227,7 +1227,7 @@ declare global {
1227
1227
  declare global {
1228
1228
  namespace JSX {
1229
1229
  interface IntrinsicElements {
1230
- 'gs-wastewater-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1230
+ 'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1231
1231
  }
1232
1232
  }
1233
1233
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genspectrum/dashboard-components",
3
- "version": "1.10.1",
3
+ "version": "1.10.3",
4
4
  "description": "GenSpectrum web components for building dashboards",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",
@@ -4,11 +4,15 @@ import { forwardRef } from 'preact/compat';
4
4
  export type Size = {
5
5
  width: string;
6
6
  height?: string;
7
+ minHeight?: string;
7
8
  };
8
9
 
9
10
  export const ResizeContainer = forwardRef<HTMLDivElement, { size: Size; children: ComponentChildren }>(
10
11
  ({ size, children }, ref) => (
11
- <div ref={ref} style={{ width: size.width, height: size.height, position: 'relative' }}>
12
+ <div
13
+ ref={ref}
14
+ style={{ width: size.width, height: size.height, minHeight: size.minHeight, position: 'relative' }}
15
+ >
12
16
  {children}
13
17
  </div>
14
18
  ),
@@ -52,7 +52,7 @@ type LineageSelectorProps = z.infer<typeof lineageSelectorPropsSchema>;
52
52
 
53
53
  export const LineageFilter: FunctionComponent<LineageFilterProps> = (props) => {
54
54
  const { width, ...innerProps } = props;
55
- const size = { width, height: '3rem' };
55
+ const size = { width, minHeight: '3rem' };
56
56
 
57
57
  return (
58
58
  <ErrorBoundary size={size} layout='horizontal' componentProps={props} schema={lineageFilterPropsSchema}>
@@ -49,7 +49,22 @@ 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
+ converter: (value) => {
54
+ if (value === null) {
55
+ return value;
56
+ }
57
+ try {
58
+ const parsed = JSON.parse(value) as unknown;
59
+ if (Array.isArray(parsed) && parsed.every((v) => typeof v === 'string')) {
60
+ return parsed;
61
+ }
62
+ return value;
63
+ } catch {
64
+ return value;
65
+ }
66
+ },
67
+ })
53
68
  value: string | string[] = '';
54
69
 
55
70
  /**
@@ -103,33 +118,6 @@ export class LineageFilterComponent extends PreactLitAdapter {
103
118
  @property({ type: Boolean })
104
119
  hideCounts: boolean | undefined = false;
105
120
 
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
-
133
121
  override render() {
134
122
  return (
135
123
  <LineageFilter
@@ -5209,7 +5209,14 @@ var MT = function(n, e) {
5209
5209
  return n(e);
5210
5210
  }, TT = ke, AT = Yd, vd = { useState: xe, useId: gx, useReducer: Wc, useEffect: je, useLayoutEffect: qo, useInsertionEffect: Tx, useTransition: Cx, useDeferredValue: Mx, useSyncExternalStore: kx, startTransition: Sx, useRef: Le, useImperativeHandle: px, useMemo: He, useCallback: dt, useContext: Mn, useDebugValue: mx, version: "18.3.1", Children: nT, render: hT, hydrate: fT, unmountComponentAtNode: kT, createPortal: Ix, createElement: eo, createContext: Ua, createFactory: _T, cloneElement: wT, createRef: L2, Fragment: ke, isValidElement: Yd, isElement: AT, isFragment: bT, isMemo: xT, findDOMNode: ST, Component: ar, PureComponent: gp, memo: eT, forwardRef: km, flushSync: CT, unstable_batchedUpdates: MT, StrictMode: TT, Suspense: Yu, SuspenseList: Il, lazy: rT, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: yT };
5211
5211
  const Kt = km(
5212
- ({ size: n, children: e }, t) => /* @__PURE__ */ v("div", { ref: t, style: { width: n.width, height: n.height, position: "relative" }, children: e })
5212
+ ({ size: n, children: e }, t) => /* @__PURE__ */ v(
5213
+ "div",
5214
+ {
5215
+ ref: t,
5216
+ style: { width: n.width, height: n.height, minHeight: n.minHeight, position: "relative" },
5217
+ children: e
5218
+ }
5219
+ )
5213
5220
  ), dn = ({
5214
5221
  size: n,
5215
5222
  layout: e,
@@ -40111,7 +40118,7 @@ const pB = T.object({
40111
40118
  path: ["value"]
40112
40119
  })
40113
40120
  ), vB = (n) => {
40114
- const { width: e, ...t } = n, i = { width: e, height: "3rem" };
40121
+ const { width: e, ...t } = n, i = { width: e, minHeight: "3rem" };
40115
40122
  return /* @__PURE__ */ v(dn, { size: i, layout: "horizontal", componentProps: n, schema: gB, children: /* @__PURE__ */ v(Kt, { size: i, children: /* @__PURE__ */ v(yB, { ...t }) }) });
40116
40123
  }, yB = ({
40117
40124
  lapisField: n,
@@ -40199,21 +40206,6 @@ let so = class extends zn {
40199
40206
  constructor() {
40200
40207
  super(...arguments), this.value = "", this.lapisField = "", this.multiSelect = !1, this.lapisFilter = {}, this.placeholderText = void 0, this.width = "100%", this.hideCounts = !1;
40201
40208
  }
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
- }
40217
40209
  render() {
40218
40210
  return /* @__PURE__ */ v(
40219
40211
  vB,
@@ -40230,7 +40222,18 @@ let so = class extends zn {
40230
40222
  }
40231
40223
  };
40232
40224
  is([
40233
- U()
40225
+ U({
40226
+ converter: (n) => {
40227
+ if (n === null)
40228
+ return n;
40229
+ try {
40230
+ const e = JSON.parse(n);
40231
+ return Array.isArray(e) && e.every((t) => typeof t == "string") ? e : n;
40232
+ } catch {
40233
+ return n;
40234
+ }
40235
+ }
40236
+ })
40234
40237
  ], so.prototype, "value", 2);
40235
40238
  is([
40236
40239
  U()