@genspectrum/dashboard-components 0.16.0 → 0.16.2
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 +56 -2
- package/dist/components.d.ts +28 -11
- package/dist/components.js +64 -32
- package/dist/components.js.map +1 -1
- package/dist/util.d.ts +11 -11
- package/package.json +1 -1
- package/src/preact/ReferenceGenomeContext.ts +4 -2
- package/src/preact/components/downshift-combobox.tsx +6 -4
- package/src/preact/components/info.tsx +1 -0
- package/src/preact/mutationsOverTime/getFilteredMutationsOverTime.spec.ts +70 -14
- package/src/preact/mutationsOverTime/getFilteredMutationsOverTimeData.ts +30 -7
- package/src/preact/mutationsOverTime/mutations-over-time-grid.tsx +56 -55
- package/src/preact/mutationsOverTime/mutations-over-time.stories.tsx +26 -37
- package/src/preact/mutationsOverTime/mutations-over-time.tsx +21 -6
- package/src/preact/wastewater/mutationsOverTime/wastewater-mutations-over-time.tsx +1 -1
- package/src/web-components/PreactLitAdapter.tsx +2 -5
- package/src/web-components/gs-app.ts +2 -4
- package/src/web-components/visualization/gs-mutations-over-time.stories.ts +15 -0
- package/src/web-components/visualization/gs-mutations-over-time.tsx +29 -0
- package/standalone-bundle/dashboard-components.js +4835 -4812
- package/standalone-bundle/dashboard-components.js.map +1 -1
package/custom-elements.json
CHANGED
|
@@ -1983,7 +1983,7 @@
|
|
|
1983
1983
|
"type": {
|
|
1984
1984
|
"text": "Meta<Required<MutationsOverTimeProps>>"
|
|
1985
1985
|
},
|
|
1986
|
-
"default": "{ title: 'Visualization/Mutations over time', component: 'gs-mutations-over-time', argTypes: { lapisFilter: { control: 'object' }, sequenceType: { options: ['nucleotide', 'amino acid'], control: { type: 'radio' }, }, views: { options: ['grid'], control: { type: 'check' }, }, width: { control: 'text' }, height: { control: 'text' }, granularity: { options: ['day', 'week', 'month', 'year'], control: { type: 'radio' }, }, lapisDateField: { control: 'text' }, }, args: { lapisFilter: { pangoLineage: 'JN.1*', dateFrom: '2024-01-15', dateTo: '2024-07-10' }, sequenceType: 'nucleotide', views: ['grid'], width: '100%', granularity: 'month', lapisDateField: 'date', }, parameters: withComponentDocs({ componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, fetchMock: {}, }), tags: ['autodocs'], }"
|
|
1986
|
+
"default": "{ title: 'Visualization/Mutations over time', component: 'gs-mutations-over-time', argTypes: { lapisFilter: { control: 'object' }, sequenceType: { options: ['nucleotide', 'amino acid'], control: { type: 'radio' }, }, views: { options: ['grid'], control: { type: 'check' }, }, width: { control: 'text' }, height: { control: 'text' }, granularity: { options: ['day', 'week', 'month', 'year'], control: { type: 'radio' }, }, lapisDateField: { control: 'text' }, displayMutations: { control: 'object' }, initialMeanProportionInterval: { control: 'object' }, }, args: { lapisFilter: { pangoLineage: 'JN.1*', dateFrom: '2024-01-15', dateTo: '2024-07-10' }, sequenceType: 'nucleotide', views: ['grid'], width: '100%', granularity: 'month', lapisDateField: 'date', initialMeanProportionInterval: { min: 0.05, max: 0.9 }, }, parameters: withComponentDocs({ componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, fetchMock: {}, }), tags: ['autodocs'], }"
|
|
1987
1987
|
},
|
|
1988
1988
|
{
|
|
1989
1989
|
"kind": "variable",
|
|
@@ -1993,6 +1993,14 @@
|
|
|
1993
1993
|
},
|
|
1994
1994
|
"default": "{ ...Template, }"
|
|
1995
1995
|
},
|
|
1996
|
+
{
|
|
1997
|
+
"kind": "variable",
|
|
1998
|
+
"name": "ByMonthWithFilterOnDisplayedMutations",
|
|
1999
|
+
"type": {
|
|
2000
|
+
"text": "StoryObj<Required<MutationsOverTimeProps>>"
|
|
2001
|
+
},
|
|
2002
|
+
"default": "{ ...Template, args: { ...Template.args, displayMutations: ['A19722G', 'G21641T', 'T21653-'], }, }"
|
|
2003
|
+
},
|
|
1996
2004
|
{
|
|
1997
2005
|
"kind": "variable",
|
|
1998
2006
|
"name": "ByWeek",
|
|
@@ -2043,6 +2051,14 @@
|
|
|
2043
2051
|
"module": "src/web-components/visualization/gs-mutations-over-time.stories.ts"
|
|
2044
2052
|
}
|
|
2045
2053
|
},
|
|
2054
|
+
{
|
|
2055
|
+
"kind": "js",
|
|
2056
|
+
"name": "ByMonthWithFilterOnDisplayedMutations",
|
|
2057
|
+
"declaration": {
|
|
2058
|
+
"name": "ByMonthWithFilterOnDisplayedMutations",
|
|
2059
|
+
"module": "src/web-components/visualization/gs-mutations-over-time.stories.ts"
|
|
2060
|
+
}
|
|
2061
|
+
},
|
|
2046
2062
|
{
|
|
2047
2063
|
"kind": "js",
|
|
2048
2064
|
"name": "ByWeek",
|
|
@@ -2083,7 +2099,7 @@
|
|
|
2083
2099
|
"declarations": [
|
|
2084
2100
|
{
|
|
2085
2101
|
"kind": "class",
|
|
2086
|
-
"description": "## Context\n\nThis component displays mutations (substitutions and deletions) over time for a dataset selected by a LAPIS filter.\nThe shown date range is determined by the date field in the LAPIS filter.\nIf the date field is not set, the date range is determined by all available dates in the dataset.\n\n## Views\n\n### Grid View\n\nThe grid view shows the proportion for each mutation over date ranges.\n\nThe grid limits the number of rows and columns for browser performance reasons as\ntoo much data might make the browser unresponsive.\n\nThe number of columns is limited to 200.\nIf this number are exceeded, an error message will be shown.\nIt is your responsibility to make sure that this does not happen.\nDepending on the selected date range in the `lapisFilter`, you can adapt the granularity accordingly\n(e.g. use months instead of days).\n\nThe number of rows is limited to 100.\nIf there are more, the component will only show 100 mutations and notify the user
|
|
2102
|
+
"description": "## Context\n\nThis component displays mutations (substitutions and deletions) over time for a dataset selected by a LAPIS filter.\nThe shown date range is determined by the date field in the LAPIS filter.\nIf the date field is not set, the date range is determined by all available dates in the dataset.\n\n## Views\n\n### Grid View\n\nThe grid view shows the proportion for each mutation over date ranges.\n\nThe grid limits the number of rows and columns for browser performance reasons as\ntoo much data might make the browser unresponsive.\n\nThe number of columns is limited to 200.\nIf this number are exceeded, an error message will be shown.\nIt is your responsibility to make sure that this does not happen.\nDepending on the selected date range in the `lapisFilter`, you can adapt the granularity accordingly\n(e.g. use months instead of days).\n\nThe number of rows is limited to 100.\nIf there are more, the component will only show 100 mutations and notify the user.\n\nUsers can filter the displayed rows by mean proportion via a slider in the toolbar.\nThe mean proportion of each row is calculated by LAPIS over the whole data range that the component displays.\nThe initial mean proportion can be set via `initialMeanProportionInterval`.",
|
|
2087
2103
|
"name": "MutationsOverTimeComponent",
|
|
2088
2104
|
"members": [
|
|
2089
2105
|
{
|
|
@@ -2155,6 +2171,26 @@
|
|
|
2155
2171
|
"default": "'date'",
|
|
2156
2172
|
"description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used for the columns of the grid.\nMust be a field of type `date` in LAPIS.",
|
|
2157
2173
|
"attribute": "lapisDateField"
|
|
2174
|
+
},
|
|
2175
|
+
{
|
|
2176
|
+
"kind": "field",
|
|
2177
|
+
"name": "displayMutations",
|
|
2178
|
+
"type": {
|
|
2179
|
+
"text": "string[] | undefined"
|
|
2180
|
+
},
|
|
2181
|
+
"default": "undefined",
|
|
2182
|
+
"description": "If provided, only the given mutations will be displayed.\nThe mutations must be provided in the exact format as they would be displayed by the component.",
|
|
2183
|
+
"attribute": "displayMutations"
|
|
2184
|
+
},
|
|
2185
|
+
{
|
|
2186
|
+
"kind": "field",
|
|
2187
|
+
"name": "initialMeanProportionInterval",
|
|
2188
|
+
"type": {
|
|
2189
|
+
"text": "{ min: number; max: number }"
|
|
2190
|
+
},
|
|
2191
|
+
"default": "{ min: 0.05, max: 0.9 }",
|
|
2192
|
+
"description": "The initial proportion interval for the grid view.\nThe values must be between 0 and 1, inclusive.",
|
|
2193
|
+
"attribute": "initialMeanProportionInterval"
|
|
2158
2194
|
}
|
|
2159
2195
|
],
|
|
2160
2196
|
"attributes": [
|
|
@@ -2220,6 +2256,24 @@
|
|
|
2220
2256
|
"default": "'date'",
|
|
2221
2257
|
"description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used for the columns of the grid.\nMust be a field of type `date` in LAPIS.",
|
|
2222
2258
|
"fieldName": "lapisDateField"
|
|
2259
|
+
},
|
|
2260
|
+
{
|
|
2261
|
+
"name": "displayMutations",
|
|
2262
|
+
"type": {
|
|
2263
|
+
"text": "string[] | undefined"
|
|
2264
|
+
},
|
|
2265
|
+
"default": "undefined",
|
|
2266
|
+
"description": "If provided, only the given mutations will be displayed.\nThe mutations must be provided in the exact format as they would be displayed by the component.",
|
|
2267
|
+
"fieldName": "displayMutations"
|
|
2268
|
+
},
|
|
2269
|
+
{
|
|
2270
|
+
"name": "initialMeanProportionInterval",
|
|
2271
|
+
"type": {
|
|
2272
|
+
"text": "{ min: number; max: number }"
|
|
2273
|
+
},
|
|
2274
|
+
"default": "{ min: 0.05, max: 0.9 }",
|
|
2275
|
+
"description": "The initial proportion interval for the grid view.\nThe values must be between 0 and 1, inclusive.",
|
|
2276
|
+
"fieldName": "initialMeanProportionInterval"
|
|
2223
2277
|
}
|
|
2224
2278
|
],
|
|
2225
2279
|
"superclass": {
|
package/dist/components.d.ts
CHANGED
|
@@ -594,6 +594,10 @@ export declare class MutationsComponent extends PreactLitAdapterWithGridJsStyles
|
|
|
594
594
|
*
|
|
595
595
|
* The number of rows is limited to 100.
|
|
596
596
|
* If there are more, the component will only show 100 mutations and notify the user.
|
|
597
|
+
*
|
|
598
|
+
* Users can filter the displayed rows by mean proportion via a slider in the toolbar.
|
|
599
|
+
* The mean proportion of each row is calculated by LAPIS over the whole data range that the component displays.
|
|
600
|
+
* The initial mean proportion can be set via `initialMeanProportionInterval`.
|
|
597
601
|
*/
|
|
598
602
|
export declare class MutationsOverTimeComponent extends PreactLitAdapterWithGridJsStyles {
|
|
599
603
|
/**
|
|
@@ -637,6 +641,19 @@ export declare class MutationsOverTimeComponent extends PreactLitAdapterWithGrid
|
|
|
637
641
|
* Must be a field of type `date` in LAPIS.
|
|
638
642
|
*/
|
|
639
643
|
lapisDateField: string;
|
|
644
|
+
/**
|
|
645
|
+
* If provided, only the given mutations will be displayed.
|
|
646
|
+
* The mutations must be provided in the exact format as they would be displayed by the component.
|
|
647
|
+
*/
|
|
648
|
+
displayMutations: string[] | undefined;
|
|
649
|
+
/**
|
|
650
|
+
* The initial proportion interval for the grid view.
|
|
651
|
+
* The values must be between 0 and 1, inclusive.
|
|
652
|
+
*/
|
|
653
|
+
initialMeanProportionInterval: {
|
|
654
|
+
min: number;
|
|
655
|
+
max: number;
|
|
656
|
+
};
|
|
640
657
|
render(): JSX_2.Element;
|
|
641
658
|
}
|
|
642
659
|
|
|
@@ -1406,7 +1423,7 @@ declare global {
|
|
|
1406
1423
|
|
|
1407
1424
|
declare global {
|
|
1408
1425
|
interface HTMLElementTagNameMap {
|
|
1409
|
-
'gs-
|
|
1426
|
+
'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
|
|
1410
1427
|
}
|
|
1411
1428
|
}
|
|
1412
1429
|
|
|
@@ -1414,7 +1431,7 @@ declare global {
|
|
|
1414
1431
|
declare global {
|
|
1415
1432
|
namespace JSX {
|
|
1416
1433
|
interface IntrinsicElements {
|
|
1417
|
-
'gs-
|
|
1434
|
+
'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1418
1435
|
}
|
|
1419
1436
|
}
|
|
1420
1437
|
}
|
|
@@ -1422,7 +1439,7 @@ declare global {
|
|
|
1422
1439
|
|
|
1423
1440
|
declare global {
|
|
1424
1441
|
interface HTMLElementTagNameMap {
|
|
1425
|
-
'gs-
|
|
1442
|
+
'gs-aggregate': AggregateComponent;
|
|
1426
1443
|
}
|
|
1427
1444
|
}
|
|
1428
1445
|
|
|
@@ -1430,7 +1447,7 @@ declare global {
|
|
|
1430
1447
|
declare global {
|
|
1431
1448
|
namespace JSX {
|
|
1432
1449
|
interface IntrinsicElements {
|
|
1433
|
-
'gs-
|
|
1450
|
+
'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1434
1451
|
}
|
|
1435
1452
|
}
|
|
1436
1453
|
}
|
|
@@ -1486,11 +1503,10 @@ declare global {
|
|
|
1486
1503
|
|
|
1487
1504
|
declare global {
|
|
1488
1505
|
interface HTMLElementTagNameMap {
|
|
1489
|
-
'gs-
|
|
1506
|
+
'gs-location-filter': LocationFilterComponent;
|
|
1490
1507
|
}
|
|
1491
1508
|
interface HTMLElementEventMap {
|
|
1492
|
-
'gs-
|
|
1493
|
-
'gs-date-range-option-changed': DateRangeOptionChangedEvent;
|
|
1509
|
+
'gs-location-changed': LocationChangedEvent;
|
|
1494
1510
|
}
|
|
1495
1511
|
}
|
|
1496
1512
|
|
|
@@ -1498,7 +1514,7 @@ declare global {
|
|
|
1498
1514
|
declare global {
|
|
1499
1515
|
namespace JSX {
|
|
1500
1516
|
interface IntrinsicElements {
|
|
1501
|
-
'gs-
|
|
1517
|
+
'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1502
1518
|
}
|
|
1503
1519
|
}
|
|
1504
1520
|
}
|
|
@@ -1506,10 +1522,11 @@ declare global {
|
|
|
1506
1522
|
|
|
1507
1523
|
declare global {
|
|
1508
1524
|
interface HTMLElementTagNameMap {
|
|
1509
|
-
'gs-
|
|
1525
|
+
'gs-date-range-filter': DateRangeFilterComponent;
|
|
1510
1526
|
}
|
|
1511
1527
|
interface HTMLElementEventMap {
|
|
1512
|
-
'gs-
|
|
1528
|
+
'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
|
|
1529
|
+
'gs-date-range-option-changed': DateRangeOptionChangedEvent;
|
|
1513
1530
|
}
|
|
1514
1531
|
}
|
|
1515
1532
|
|
|
@@ -1517,7 +1534,7 @@ declare global {
|
|
|
1517
1534
|
declare global {
|
|
1518
1535
|
namespace JSX {
|
|
1519
1536
|
interface IntrinsicElements {
|
|
1520
|
-
'gs-
|
|
1537
|
+
'gs-date-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1521
1538
|
}
|
|
1522
1539
|
}
|
|
1523
1540
|
}
|
package/dist/components.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createContext, provide, consume } from "@lit/context";
|
|
|
2
2
|
import { Task } from "@lit/task";
|
|
3
3
|
import { LitElement, html, unsafeCSS } from "lit";
|
|
4
4
|
import z$2 from "zod";
|
|
5
|
-
import {
|
|
5
|
+
import { createContext as createContext$1, options, Fragment, render, Component, createRef, createElement, toChildArray, cloneElement, hydrate } from "preact";
|
|
6
6
|
import { Grid } from "gridjs";
|
|
7
7
|
import { Chart, registerables, Scale, BarController } from "chart.js";
|
|
8
8
|
import { VennDiagramController, ArcSlice, extractSets } from "chartjs-chart-venn";
|
|
@@ -539,6 +539,15 @@ const substitutionsOrDeletionsEndpoint = (lapisUrl, sequenceType) => {
|
|
|
539
539
|
return sequenceType === "amino acid" ? `${lapisUrl}/sample/aminoAcidMutations` : `${lapisUrl}/sample/nucleotideMutations`;
|
|
540
540
|
};
|
|
541
541
|
const referenceGenomeEndpoint = (lapisUrl) => `${lapisUrl}/sample/referenceGenome`;
|
|
542
|
+
const UNINITIALIZED_SEQUENCE = "__uninitialized__";
|
|
543
|
+
const INITIAL_REFERENCE_GENOMES = {
|
|
544
|
+
nucleotideSequences: [{ name: UNINITIALIZED_SEQUENCE, sequence: "" }],
|
|
545
|
+
genes: []
|
|
546
|
+
};
|
|
547
|
+
const ReferenceGenomeContext = createContext$1(INITIAL_REFERENCE_GENOMES);
|
|
548
|
+
function isNotInitialized(referenceGenome) {
|
|
549
|
+
return referenceGenome.genes.length === 0 && referenceGenome.nucleotideSequences.length === 1 && referenceGenome.nucleotideSequences[0].name === UNINITIALIZED_SEQUENCE;
|
|
550
|
+
}
|
|
542
551
|
var __defProp$g = Object.defineProperty;
|
|
543
552
|
var __getOwnPropDesc$f = Object.getOwnPropertyDescriptor;
|
|
544
553
|
var __decorateClass$g = (decorators, target, key, kind) => {
|
|
@@ -554,10 +563,7 @@ let AppComponent = class extends LitElement {
|
|
|
554
563
|
constructor() {
|
|
555
564
|
super(...arguments);
|
|
556
565
|
this.lapis = "";
|
|
557
|
-
this.referenceGenome =
|
|
558
|
-
nucleotideSequences: [],
|
|
559
|
-
genes: []
|
|
560
|
-
};
|
|
566
|
+
this.referenceGenome = INITIAL_REFERENCE_GENOMES;
|
|
561
567
|
this.updateReferenceGenome = new Task(this, {
|
|
562
568
|
task: async () => {
|
|
563
569
|
const lapisUrl = lapisUrlSchema.parse(this.lapis);
|
|
@@ -1375,7 +1381,7 @@ function componentParametersToCode(componentName, params, lapisUrl) {
|
|
|
1375
1381
|
return typeof value === "object" ? JSON.stringify(value) : value;
|
|
1376
1382
|
};
|
|
1377
1383
|
const attributes = indentLines(
|
|
1378
|
-
Object.entries(params).map(([key, value]) => `${key}='${stringifyIfNeeded(value)}'`).join("\n"),
|
|
1384
|
+
Object.entries(params).filter(([_2, value]) => value !== void 0).map(([key, value]) => `${key}='${stringifyIfNeeded(value)}'`).join("\n"),
|
|
1379
1385
|
4
|
|
1380
1386
|
);
|
|
1381
1387
|
return `<gs-app lapis="${lapisUrl}">
|
|
@@ -2019,14 +2025,6 @@ const ProportionSelectorDropdown = ({
|
|
|
2019
2025
|
}
|
|
2020
2026
|
) }) });
|
|
2021
2027
|
};
|
|
2022
|
-
const UNINITIALIZED_SEQUENCE = "__uninitialized__";
|
|
2023
|
-
const ReferenceGenomeContext = createContext$1({
|
|
2024
|
-
nucleotideSequences: [{ name: UNINITIALIZED_SEQUENCE, sequence: "" }],
|
|
2025
|
-
genes: []
|
|
2026
|
-
});
|
|
2027
|
-
function isNotInitialized(referenceGenome) {
|
|
2028
|
-
return referenceGenome.genes.length === 0 && referenceGenome.nucleotideSequences.length === 1 && referenceGenome.nucleotideSequences[0].name === UNINITIALIZED_SEQUENCE;
|
|
2029
|
-
}
|
|
2030
2028
|
const SegmentSelector = ({
|
|
2031
2029
|
displayedSegments,
|
|
2032
2030
|
setDisplayedSegments
|
|
@@ -5581,10 +5579,7 @@ const _PreactLitAdapter = class _PreactLitAdapter extends ReactiveElement {
|
|
|
5581
5579
|
constructor() {
|
|
5582
5580
|
super(...arguments);
|
|
5583
5581
|
this.lapis = "";
|
|
5584
|
-
this.referenceGenome =
|
|
5585
|
-
nucleotideSequences: [],
|
|
5586
|
-
genes: []
|
|
5587
|
-
};
|
|
5582
|
+
this.referenceGenome = INITIAL_REFERENCE_GENOMES;
|
|
5588
5583
|
}
|
|
5589
5584
|
update(changedProperties) {
|
|
5590
5585
|
const vdom = /* @__PURE__ */ u$1(LapisUrlContextProvider, { value: this.lapis, children: /* @__PURE__ */ u$1(ReferenceGenomeContext.Provider, { value: this.referenceGenome, children: this.render() }) });
|
|
@@ -9510,8 +9505,17 @@ class BaseMutationOverTimeDataMap extends Map2dBase {
|
|
|
9510
9505
|
super(serializeSubstitutionOrDeletion, serializeTemporal, initialContent);
|
|
9511
9506
|
}
|
|
9512
9507
|
}
|
|
9513
|
-
|
|
9508
|
+
const displayMutationsSchema = z$2.array(z$2.string()).min(1);
|
|
9509
|
+
function getFilteredMutationOverTimeData({
|
|
9510
|
+
data,
|
|
9511
|
+
overallMutationData,
|
|
9512
|
+
displayedSegments,
|
|
9513
|
+
displayedMutationTypes,
|
|
9514
|
+
proportionInterval,
|
|
9515
|
+
displayMutations
|
|
9516
|
+
}) {
|
|
9514
9517
|
const filteredData = new Map2dView(data);
|
|
9518
|
+
const displayMutationsSet = displayMutations === void 0 ? null : new Set(displayMutations.map((it) => it.toUpperCase()));
|
|
9515
9519
|
const mutationsToFilterOut = overallMutationData.filter((entry) => {
|
|
9516
9520
|
if (entry.proportion < proportionInterval.min || entry.proportion > proportionInterval.max) {
|
|
9517
9521
|
return true;
|
|
@@ -9519,6 +9523,9 @@ function getFilteredMutationOverTimeData(data, overallMutationData, displayedSeg
|
|
|
9519
9523
|
if (displayedSegments.some((segment) => segment.segment === entry.mutation.segment && !segment.checked)) {
|
|
9520
9524
|
return true;
|
|
9521
9525
|
}
|
|
9526
|
+
if (displayMutationsSet !== null && !displayMutationsSet.has(entry.mutation.code)) {
|
|
9527
|
+
return true;
|
|
9528
|
+
}
|
|
9522
9529
|
return displayedMutationTypes.some(
|
|
9523
9530
|
(mutationType) => mutationType.type === entry.mutation.type && !mutationType.checked
|
|
9524
9531
|
);
|
|
@@ -9641,8 +9648,7 @@ const MutationsOverTimeGrid = ({
|
|
|
9641
9648
|
allMutations.length,
|
|
9642
9649
|
" mutations. You can narrow the filter to reduce the number of mutations."
|
|
9643
9650
|
] }),
|
|
9644
|
-
allMutations.length === 0
|
|
9645
|
-
/* @__PURE__ */ u$1(
|
|
9651
|
+
allMutations.length === 0 ? /* @__PURE__ */ u$1("div", { className: "flex justify-center", children: "No data available for your filters." }) : /* @__PURE__ */ u$1(
|
|
9646
9652
|
"div",
|
|
9647
9653
|
{
|
|
9648
9654
|
ref: gridRef,
|
|
@@ -9816,6 +9822,11 @@ const mutationOverTimeSchema = z$2.object({
|
|
|
9816
9822
|
views: z$2.array(mutationsOverTimeViewSchema),
|
|
9817
9823
|
granularity: temporalGranularitySchema,
|
|
9818
9824
|
lapisDateField: z$2.string().min(1),
|
|
9825
|
+
displayMutations: displayMutationsSchema.optional(),
|
|
9826
|
+
initialMeanProportionInterval: z$2.object({
|
|
9827
|
+
min: z$2.number().min(0).max(1),
|
|
9828
|
+
max: z$2.number().min(0).max(1)
|
|
9829
|
+
}),
|
|
9819
9830
|
width: z$2.string(),
|
|
9820
9831
|
height: z$2.string().optional()
|
|
9821
9832
|
});
|
|
@@ -9866,22 +9877,31 @@ const MutationsOverTimeTabs$1 = ({
|
|
|
9866
9877
|
originalComponentProps,
|
|
9867
9878
|
overallMutationData
|
|
9868
9879
|
}) => {
|
|
9869
|
-
const [proportionInterval, setProportionInterval] = h(
|
|
9880
|
+
const [proportionInterval, setProportionInterval] = h(originalComponentProps.initialMeanProportionInterval);
|
|
9870
9881
|
const [colorScale, setColorScale] = h({ min: 0, max: 1, color: "indigo" });
|
|
9871
9882
|
const [displayedSegments, setDisplayedSegments] = useDisplayedSegments(originalComponentProps.sequenceType);
|
|
9872
9883
|
const [displayedMutationTypes, setDisplayedMutationTypes] = h([
|
|
9873
9884
|
{ label: "Substitutions", checked: true, type: "substitution" },
|
|
9874
9885
|
{ label: "Deletions", checked: true, type: "deletion" }
|
|
9875
9886
|
]);
|
|
9887
|
+
const displayMutations = originalComponentProps.displayMutations;
|
|
9876
9888
|
const filteredData = T$1(() => {
|
|
9877
|
-
return getFilteredMutationOverTimeData(
|
|
9878
|
-
mutationOverTimeData,
|
|
9889
|
+
return getFilteredMutationOverTimeData({
|
|
9890
|
+
data: mutationOverTimeData,
|
|
9879
9891
|
overallMutationData,
|
|
9880
9892
|
displayedSegments,
|
|
9881
9893
|
displayedMutationTypes,
|
|
9882
|
-
proportionInterval
|
|
9883
|
-
|
|
9884
|
-
|
|
9894
|
+
proportionInterval,
|
|
9895
|
+
displayMutations
|
|
9896
|
+
});
|
|
9897
|
+
}, [
|
|
9898
|
+
mutationOverTimeData,
|
|
9899
|
+
overallMutationData,
|
|
9900
|
+
displayedSegments,
|
|
9901
|
+
displayedMutationTypes,
|
|
9902
|
+
proportionInterval,
|
|
9903
|
+
displayMutations
|
|
9904
|
+
]);
|
|
9885
9905
|
const getTab = (view) => {
|
|
9886
9906
|
if (filteredData === void 0) {
|
|
9887
9907
|
return {
|
|
@@ -10011,6 +10031,8 @@ let MutationsOverTimeComponent = class extends PreactLitAdapterWithGridJsStyles
|
|
|
10011
10031
|
this.height = void 0;
|
|
10012
10032
|
this.granularity = "week";
|
|
10013
10033
|
this.lapisDateField = "date";
|
|
10034
|
+
this.displayMutations = void 0;
|
|
10035
|
+
this.initialMeanProportionInterval = { min: 0.05, max: 0.9 };
|
|
10014
10036
|
}
|
|
10015
10037
|
render() {
|
|
10016
10038
|
return /* @__PURE__ */ u$1(
|
|
@@ -10022,7 +10044,9 @@ let MutationsOverTimeComponent = class extends PreactLitAdapterWithGridJsStyles
|
|
|
10022
10044
|
width: this.width,
|
|
10023
10045
|
height: this.height,
|
|
10024
10046
|
granularity: this.granularity,
|
|
10025
|
-
lapisDateField: this.lapisDateField
|
|
10047
|
+
lapisDateField: this.lapisDateField,
|
|
10048
|
+
displayMutations: this.displayMutations,
|
|
10049
|
+
initialMeanProportionInterval: this.initialMeanProportionInterval
|
|
10026
10050
|
}
|
|
10027
10051
|
);
|
|
10028
10052
|
}
|
|
@@ -10048,6 +10072,12 @@ __decorateClass$8([
|
|
|
10048
10072
|
__decorateClass$8([
|
|
10049
10073
|
n$1({ type: String })
|
|
10050
10074
|
], MutationsOverTimeComponent.prototype, "lapisDateField", 2);
|
|
10075
|
+
__decorateClass$8([
|
|
10076
|
+
n$1({ type: Array })
|
|
10077
|
+
], MutationsOverTimeComponent.prototype, "displayMutations", 2);
|
|
10078
|
+
__decorateClass$8([
|
|
10079
|
+
n$1({ type: Object })
|
|
10080
|
+
], MutationsOverTimeComponent.prototype, "initialMeanProportionInterval", 2);
|
|
10051
10081
|
MutationsOverTimeComponent = __decorateClass$8([
|
|
10052
10082
|
t$3("gs-mutations-over-time")
|
|
10053
10083
|
], MutationsOverTimeComponent);
|
|
@@ -11410,7 +11440,7 @@ const WastewaterMutationsOverTimeInner = (componentProps) => {
|
|
|
11410
11440
|
componentProps.lapisFilter,
|
|
11411
11441
|
componentProps.sequenceType
|
|
11412
11442
|
),
|
|
11413
|
-
[]
|
|
11443
|
+
[componentProps.lapisFilter, componentProps.sequenceType]
|
|
11414
11444
|
);
|
|
11415
11445
|
if (isLoading) {
|
|
11416
11446
|
return /* @__PURE__ */ u$1(LoadingDisplay, {});
|
|
@@ -14837,8 +14867,10 @@ function DownshiftCombobox({
|
|
|
14837
14867
|
}) {
|
|
14838
14868
|
var _a;
|
|
14839
14869
|
const initialSelectedItem = value ?? null;
|
|
14840
|
-
const [
|
|
14841
|
-
|
|
14870
|
+
const [itemsFilter, setItemsFilter] = h(itemToString2(initialSelectedItem));
|
|
14871
|
+
const items = T$1(
|
|
14872
|
+
() => allItems.filter((item) => filterItemsByInputValue(item, itemsFilter)),
|
|
14873
|
+
[allItems, filterItemsByInputValue, itemsFilter]
|
|
14842
14874
|
);
|
|
14843
14875
|
const divRef = A$1(null);
|
|
14844
14876
|
const shadowRoot = ((_a = divRef.current) == null ? void 0 : _a.shadowRoot) ?? void 0;
|
|
@@ -14862,7 +14894,7 @@ function DownshiftCombobox({
|
|
|
14862
14894
|
closeMenu
|
|
14863
14895
|
} = useCombobox({
|
|
14864
14896
|
onInputValueChange({ inputValue: inputValue2 }) {
|
|
14865
|
-
|
|
14897
|
+
setItemsFilter(inputValue2);
|
|
14866
14898
|
},
|
|
14867
14899
|
onSelectedItemChange({ selectedItem: selectedItem2 }) {
|
|
14868
14900
|
var _a2;
|