@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.
@@ -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": [
@@ -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-genome-data-viewer': GenomeDataViewerComponent;
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-genome-data-viewer': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-mutation-comparison-component': MutationComparisonComponent;
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-mutation-comparison-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-mutations': MutationsComponent;
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-mutations': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-relative-growth-advantage': RelativeGrowthAdvantageComponent;
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-relative-growth-advantage': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-aggregate': AggregateComponent;
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-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-number-sequences-over-time': NumberSequencesOverTimeComponent;
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-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-sequences-by-location': SequencesByLocationComponent;
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-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-lineage-filter': LineageFilterComponent;
1913
+ 'gs-number-range-filter': NumberRangeFilterComponent;
1913
1914
  }
1914
1915
  interface HTMLElementEventMap {
1915
- [gsEventNames.lineageFilterChanged]: LineageFilterChangedEvent;
1916
- [gsEventNames.lineageFilterMultiChanged]: LineageMultiFilterChangedEvent;
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-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
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-number-range-filter': NumberRangeFilterComponent;
1933
+ 'gs-lineage-filter': LineageFilterComponent;
1933
1934
  }
1934
1935
  interface HTMLElementEventMap {
1935
- [gsEventNames.numberRangeFilterChanged]: NumberRangeFilterChangedEvent;
1936
- [gsEventNames.numberRangeValueChanged]: NumberRangeValueChangedEvent;
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-number-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1945
+ 'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1945
1946
  }
1946
1947
  }
1947
1948
  }
@@ -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({ type: Array })
15881
+ n$1()
15859
15882
  ], LineageFilterComponent.prototype, "value", 2);
15860
15883
  __decorateClass$1([
15861
15884
  n$1()