@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/custom-elements.json
CHANGED
|
@@ -622,6 +622,22 @@
|
|
|
622
622
|
},
|
|
623
623
|
"default": "{ ...Template, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter'); await waitFor(() => { return expect(canvas.getByPlaceholderText('Enter a lineage')).toBeVisible(); }); }, }"
|
|
624
624
|
},
|
|
625
|
+
{
|
|
626
|
+
"kind": "variable",
|
|
627
|
+
"name": "LineageFilterStringValue",
|
|
628
|
+
"type": {
|
|
629
|
+
"text": "StoryObj<Required<LineageFilterProps>>"
|
|
630
|
+
},
|
|
631
|
+
"default": "{ render: (args) => { return html` <gs-app lapis=\"${LAPIS_URL}\"> <div class=\"max-w-(--breakpoint-lg)\"> <gs-lineage-filter lapisField=\"pangoLineage\" placeholderText=\"Enter a lineage\" value=\"B.1.1.7\" .multiSelect=${args.multiSelect} ></gs-lineage-filter> </div> </gs-app>`; }, args: { multiSelect: false, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter'); await waitFor(() => { return expect(canvas.getByPlaceholderText('Enter a lineage')).toBeVisible(); }); }, }"
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
"kind": "variable",
|
|
635
|
+
"name": "LineageFilterArrayValue",
|
|
636
|
+
"type": {
|
|
637
|
+
"text": "StoryObj<Required<LineageFilterProps>>"
|
|
638
|
+
},
|
|
639
|
+
"default": "{ render: (args) => { return html` <gs-app lapis=\"${LAPIS_URL}\"> <div class=\"max-w-(--breakpoint-lg)\"> <gs-lineage-filter lapisField=\"pangoLineage\" placeholderText=\"Enter a lineage\" value='[\"B.1.1.7\", \"B.1.1.10\"]' .multiSelect=${args.multiSelect} ></gs-lineage-filter> </div> </gs-app>`; }, args: { multiSelect: true, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-lineage-filter'); await waitFor(() => { return expect(canvas.getByPlaceholderText('Enter a lineage')).toBeVisible(); }); }, }"
|
|
640
|
+
},
|
|
625
641
|
{
|
|
626
642
|
"kind": "variable",
|
|
627
643
|
"name": "DelayToShowLoadingState",
|
|
@@ -672,6 +688,22 @@
|
|
|
672
688
|
"module": "src/web-components/input/gs-lineage-filter.stories.ts"
|
|
673
689
|
}
|
|
674
690
|
},
|
|
691
|
+
{
|
|
692
|
+
"kind": "js",
|
|
693
|
+
"name": "LineageFilterStringValue",
|
|
694
|
+
"declaration": {
|
|
695
|
+
"name": "LineageFilterStringValue",
|
|
696
|
+
"module": "src/web-components/input/gs-lineage-filter.stories.ts"
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"kind": "js",
|
|
701
|
+
"name": "LineageFilterArrayValue",
|
|
702
|
+
"declaration": {
|
|
703
|
+
"name": "LineageFilterArrayValue",
|
|
704
|
+
"module": "src/web-components/input/gs-lineage-filter.stories.ts"
|
|
705
|
+
}
|
|
706
|
+
},
|
|
675
707
|
{
|
|
676
708
|
"kind": "js",
|
|
677
709
|
"name": "DelayToShowLoadingState",
|
|
@@ -1578,7 +1610,7 @@
|
|
|
1578
1610
|
"type": {
|
|
1579
1611
|
"text": "StoryObj<Required<TextFilterProps>>"
|
|
1580
1612
|
},
|
|
1581
|
-
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-filter'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', () => { canvasElement.addEventListener(gsEventNames.textFilterChanged, listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid host name', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); }); await step('Enter a valid host name', async () => { await userEvent.type(inputField(), 'Homo s'); const dropdownOption = await canvas.findByText('Homo sapiens'); await userEvent.click(dropdownOption); }); await step('Verify event is fired with correct detail', async () => { await waitFor(async () => { await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo sapiens', }, }), ); }); }); await step('Remove initial value', async () => { await userEvent.click(canvas.getByRole('button', { name: 'clear selection' })); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: undefined, }, }), ); }); }, args: { ...Default.args, value: '', }, }"
|
|
1613
|
+
"default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-filter'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', () => { canvasElement.addEventListener(gsEventNames.textFilterChanged, listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Enters an invalid host name', async () => { await userEvent.type(inputField(), 'notInList'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>9/}'); }); await step('Enter a valid host name', async () => { await userEvent.type(inputField(), 'Homo s'); const dropdownOption = await canvas.findByText('Homo sapiens'); await userEvent.click(dropdownOption); }); await step('Verify event is fired with correct detail', async () => { await waitFor(async () => { await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo sapiens', }, }), ); }); }); await step('Remove initial value', async () => { await userEvent.click(canvas.getByRole('button', { name: 'clear selection' })); await waitFor(async () => { await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: undefined, }, }), ); }); }); }, args: { ...Default.args, value: '', }, }"
|
|
1582
1614
|
}
|
|
1583
1615
|
],
|
|
1584
1616
|
"exports": [
|
package/dist/components.d.ts
CHANGED
|
@@ -353,6 +353,7 @@ export declare class LineageFilterComponent extends PreactLitAdapter {
|
|
|
353
353
|
* Defaults to false.
|
|
354
354
|
*/
|
|
355
355
|
hideCounts: boolean | undefined;
|
|
356
|
+
updated(changedProps: Map<string, unknown>): void;
|
|
356
357
|
render(): JSX_2.Element;
|
|
357
358
|
}
|
|
358
359
|
|
|
@@ -1672,7 +1673,7 @@ declare global {
|
|
|
1672
1673
|
|
|
1673
1674
|
declare global {
|
|
1674
1675
|
interface HTMLElementTagNameMap {
|
|
1675
|
-
'gs-
|
|
1676
|
+
'gs-mutation-comparison-component': MutationComparisonComponent;
|
|
1676
1677
|
}
|
|
1677
1678
|
}
|
|
1678
1679
|
|
|
@@ -1680,7 +1681,7 @@ declare global {
|
|
|
1680
1681
|
declare global {
|
|
1681
1682
|
namespace JSX {
|
|
1682
1683
|
interface IntrinsicElements {
|
|
1683
|
-
'gs-
|
|
1684
|
+
'gs-mutation-comparison-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1684
1685
|
}
|
|
1685
1686
|
}
|
|
1686
1687
|
}
|
|
@@ -1688,7 +1689,7 @@ declare global {
|
|
|
1688
1689
|
|
|
1689
1690
|
declare global {
|
|
1690
1691
|
interface HTMLElementTagNameMap {
|
|
1691
|
-
'gs-
|
|
1692
|
+
'gs-mutations': MutationsComponent;
|
|
1692
1693
|
}
|
|
1693
1694
|
}
|
|
1694
1695
|
|
|
@@ -1696,7 +1697,7 @@ declare global {
|
|
|
1696
1697
|
declare global {
|
|
1697
1698
|
namespace JSX {
|
|
1698
1699
|
interface IntrinsicElements {
|
|
1699
|
-
'gs-
|
|
1700
|
+
'gs-mutations': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1700
1701
|
}
|
|
1701
1702
|
}
|
|
1702
1703
|
}
|
|
@@ -1720,7 +1721,7 @@ declare global {
|
|
|
1720
1721
|
|
|
1721
1722
|
declare global {
|
|
1722
1723
|
interface HTMLElementTagNameMap {
|
|
1723
|
-
'gs-
|
|
1724
|
+
'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;
|
|
1724
1725
|
}
|
|
1725
1726
|
}
|
|
1726
1727
|
|
|
@@ -1728,7 +1729,7 @@ declare global {
|
|
|
1728
1729
|
declare global {
|
|
1729
1730
|
namespace JSX {
|
|
1730
1731
|
interface IntrinsicElements {
|
|
1731
|
-
'gs-
|
|
1732
|
+
'gs-relative-growth-advantage': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1732
1733
|
}
|
|
1733
1734
|
}
|
|
1734
1735
|
}
|
|
@@ -1736,7 +1737,7 @@ declare global {
|
|
|
1736
1737
|
|
|
1737
1738
|
declare global {
|
|
1738
1739
|
interface HTMLElementTagNameMap {
|
|
1739
|
-
'gs-
|
|
1740
|
+
'gs-aggregate': AggregateComponent;
|
|
1740
1741
|
}
|
|
1741
1742
|
}
|
|
1742
1743
|
|
|
@@ -1744,7 +1745,7 @@ declare global {
|
|
|
1744
1745
|
declare global {
|
|
1745
1746
|
namespace JSX {
|
|
1746
1747
|
interface IntrinsicElements {
|
|
1747
|
-
'gs-
|
|
1748
|
+
'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1748
1749
|
}
|
|
1749
1750
|
}
|
|
1750
1751
|
}
|
|
@@ -1752,7 +1753,7 @@ declare global {
|
|
|
1752
1753
|
|
|
1753
1754
|
declare global {
|
|
1754
1755
|
interface HTMLElementTagNameMap {
|
|
1755
|
-
'gs-
|
|
1756
|
+
'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
|
|
1756
1757
|
}
|
|
1757
1758
|
}
|
|
1758
1759
|
|
|
@@ -1760,7 +1761,7 @@ declare global {
|
|
|
1760
1761
|
declare global {
|
|
1761
1762
|
namespace JSX {
|
|
1762
1763
|
interface IntrinsicElements {
|
|
1763
|
-
'gs-
|
|
1764
|
+
'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1764
1765
|
}
|
|
1765
1766
|
}
|
|
1766
1767
|
}
|
|
@@ -1768,7 +1769,7 @@ declare global {
|
|
|
1768
1769
|
|
|
1769
1770
|
declare global {
|
|
1770
1771
|
interface HTMLElementTagNameMap {
|
|
1771
|
-
'gs-
|
|
1772
|
+
'gs-sequences-by-location': SequencesByLocationComponent;
|
|
1772
1773
|
}
|
|
1773
1774
|
}
|
|
1774
1775
|
|
|
@@ -1776,7 +1777,7 @@ declare global {
|
|
|
1776
1777
|
declare global {
|
|
1777
1778
|
namespace JSX {
|
|
1778
1779
|
interface IntrinsicElements {
|
|
1779
|
-
'gs-
|
|
1780
|
+
'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1780
1781
|
}
|
|
1781
1782
|
}
|
|
1782
1783
|
}
|
|
@@ -1800,7 +1801,7 @@ declare global {
|
|
|
1800
1801
|
|
|
1801
1802
|
declare global {
|
|
1802
1803
|
interface HTMLElementTagNameMap {
|
|
1803
|
-
'gs-
|
|
1804
|
+
'gs-genome-data-viewer': GenomeDataViewerComponent;
|
|
1804
1805
|
}
|
|
1805
1806
|
}
|
|
1806
1807
|
|
|
@@ -1808,7 +1809,7 @@ declare global {
|
|
|
1808
1809
|
declare global {
|
|
1809
1810
|
namespace JSX {
|
|
1810
1811
|
interface IntrinsicElements {
|
|
1811
|
-
'gs-
|
|
1812
|
+
'gs-genome-data-viewer': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1812
1813
|
}
|
|
1813
1814
|
}
|
|
1814
1815
|
}
|
|
@@ -1909,11 +1910,11 @@ declare global {
|
|
|
1909
1910
|
|
|
1910
1911
|
declare global {
|
|
1911
1912
|
interface HTMLElementTagNameMap {
|
|
1912
|
-
'gs-
|
|
1913
|
+
'gs-number-range-filter': NumberRangeFilterComponent;
|
|
1913
1914
|
}
|
|
1914
1915
|
interface HTMLElementEventMap {
|
|
1915
|
-
[gsEventNames.
|
|
1916
|
-
[gsEventNames.
|
|
1916
|
+
[gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
|
|
1917
|
+
[gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
|
|
1917
1918
|
}
|
|
1918
1919
|
}
|
|
1919
1920
|
|
|
@@ -1921,7 +1922,7 @@ declare global {
|
|
|
1921
1922
|
declare global {
|
|
1922
1923
|
namespace JSX {
|
|
1923
1924
|
interface IntrinsicElements {
|
|
1924
|
-
'gs-
|
|
1925
|
+
'gs-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1925
1926
|
}
|
|
1926
1927
|
}
|
|
1927
1928
|
}
|
|
@@ -1929,11 +1930,11 @@ declare global {
|
|
|
1929
1930
|
|
|
1930
1931
|
declare global {
|
|
1931
1932
|
interface HTMLElementTagNameMap {
|
|
1932
|
-
'gs-
|
|
1933
|
+
'gs-lineage-filter': LineageFilterComponent;
|
|
1933
1934
|
}
|
|
1934
1935
|
interface HTMLElementEventMap {
|
|
1935
|
-
[gsEventNames.
|
|
1936
|
-
[gsEventNames.
|
|
1936
|
+
[gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
|
|
1937
|
+
[gsEventNames.lineageFilterMultiChanged]: LineageMultiFilterChangedEvent;
|
|
1937
1938
|
}
|
|
1938
1939
|
}
|
|
1939
1940
|
|
|
@@ -1941,7 +1942,7 @@ declare global {
|
|
|
1941
1942
|
declare global {
|
|
1942
1943
|
namespace JSX {
|
|
1943
1944
|
interface IntrinsicElements {
|
|
1944
|
-
'gs-
|
|
1945
|
+
'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
|
|
1945
1946
|
}
|
|
1946
1947
|
}
|
|
1947
1948
|
}
|
package/dist/components.js
CHANGED
|
@@ -15839,6 +15839,29 @@ let LineageFilterComponent = class extends PreactLitAdapter {
|
|
|
15839
15839
|
this.width = "100%";
|
|
15840
15840
|
this.hideCounts = false;
|
|
15841
15841
|
}
|
|
15842
|
+
updated(changedProps) {
|
|
15843
|
+
if (changedProps.has("value") || changedProps.has("multiSelect")) {
|
|
15844
|
+
if (this.multiSelect) {
|
|
15845
|
+
if (typeof this.value === "string") {
|
|
15846
|
+
let parsed;
|
|
15847
|
+
try {
|
|
15848
|
+
parsed = JSON.parse(this.value);
|
|
15849
|
+
} catch {
|
|
15850
|
+
parsed = this.value.split(",").map((s2) => s2.trim());
|
|
15851
|
+
}
|
|
15852
|
+
if (Array.isArray(parsed) && parsed.every((v2) => typeof v2 === "string")) {
|
|
15853
|
+
this.value = parsed;
|
|
15854
|
+
} else {
|
|
15855
|
+
this.value = [];
|
|
15856
|
+
}
|
|
15857
|
+
}
|
|
15858
|
+
} else {
|
|
15859
|
+
if (Array.isArray(this.value)) {
|
|
15860
|
+
this.value = this.value[0] ?? "";
|
|
15861
|
+
}
|
|
15862
|
+
}
|
|
15863
|
+
}
|
|
15864
|
+
}
|
|
15842
15865
|
render() {
|
|
15843
15866
|
return /* @__PURE__ */ u$1(
|
|
15844
15867
|
LineageFilter,
|
|
@@ -15855,7 +15878,7 @@ let LineageFilterComponent = class extends PreactLitAdapter {
|
|
|
15855
15878
|
}
|
|
15856
15879
|
};
|
|
15857
15880
|
__decorateClass$1([
|
|
15858
|
-
n$1(
|
|
15881
|
+
n$1()
|
|
15859
15882
|
], LineageFilterComponent.prototype, "value", 2);
|
|
15860
15883
|
__decorateClass$1([
|
|
15861
15884
|
n$1()
|