@genspectrum/dashboard-components 0.11.7 → 0.12.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.
Files changed (31) hide show
  1. package/custom-elements.json +16 -16
  2. package/dist/{dateRangeOption-Bh2p78z0.js → LocationChangedEvent-CORvQvXv.js} +11 -1
  3. package/dist/LocationChangedEvent-CORvQvXv.js.map +1 -0
  4. package/dist/components.d.ts +27 -33
  5. package/dist/components.js +4034 -655
  6. package/dist/components.js.map +1 -1
  7. package/dist/style.css +151 -4
  8. package/dist/util.d.ts +32 -26
  9. package/dist/util.js +2 -1
  10. package/package.json +2 -1
  11. package/src/preact/components/csv-download-button.tsx +2 -2
  12. package/src/preact/downshift_types.d.ts +3 -0
  13. package/src/preact/locationFilter/LocationChangedEvent.ts +11 -0
  14. package/src/preact/locationFilter/fetchAutocompletionList.spec.ts +5 -5
  15. package/src/preact/locationFilter/fetchAutocompletionList.ts +9 -2
  16. package/src/preact/locationFilter/location-filter.stories.tsx +94 -10
  17. package/src/preact/locationFilter/location-filter.tsx +183 -62
  18. package/src/preact/map/sequences-by-location-map.tsx +3 -3
  19. package/src/preact/mutationFilter/mutation-filter-info.tsx +73 -10
  20. package/src/preact/textInput/TextInputChangedEvent.ts +11 -0
  21. package/src/preact/textInput/fetchAutocompleteList.ts +1 -1
  22. package/src/preact/textInput/text-input.stories.tsx +20 -3
  23. package/src/preact/textInput/text-input.tsx +139 -36
  24. package/src/utilEntrypoint.ts +2 -0
  25. package/src/web-components/input/gs-location-filter.stories.ts +34 -29
  26. package/src/web-components/input/gs-location-filter.tsx +6 -13
  27. package/src/web-components/input/gs-text-input.stories.ts +30 -7
  28. package/standalone-bundle/dashboard-components.js +11073 -8625
  29. package/standalone-bundle/dashboard-components.js.map +1 -1
  30. package/standalone-bundle/style.css +1 -1
  31. package/dist/dateRangeOption-Bh2p78z0.js.map +0 -1
@@ -714,7 +714,7 @@
714
714
  "type": {
715
715
  "text": "Meta"
716
716
  },
717
- "default": "{ title: 'Input/Location filter', component: 'gs-location-filter', parameters: withComponentDocs({ actions: { handles: ['gs-location-changed', ...previewHandles], }, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { fields: { control: { type: 'object', }, }, initialValue: { control: { type: 'text', }, }, width: { control: { type: 'text', }, }, placeholderText: { control: { type: 'text', }, }, }, tags: ['autodocs'], }"
717
+ "default": "{ title: 'Input/Location filter', component: 'gs-location-filter', parameters: withComponentDocs({ actions: { handles: ['gs-location-changed', ...previewHandles], }, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { fields: { control: { type: 'object', }, }, value: { control: { type: 'object', }, }, width: { control: { type: 'text', }, }, placeholderText: { control: { type: 'text', }, }, }, tags: ['autodocs'], }"
718
718
  },
719
719
  {
720
720
  "kind": "variable",
@@ -722,7 +722,7 @@
722
722
  "type": {
723
723
  "text": "StoryObj<LocationFilterProps>"
724
724
  },
725
- "default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); await waitFor(() => { return expect(canvas.getByRole('combobox')).toBeEnabled(); }); await waitFor(() => { return expect(canvas.getByPlaceholderText('Enter a location')).toBeInTheDocument(); }); }, }"
725
+ "default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); await waitFor(() => { return expect(canvas.getByPlaceholderText('Enter a location')).toBeVisible(); }); }, }"
726
726
  },
727
727
  {
728
728
  "kind": "variable",
@@ -746,7 +746,7 @@
746
746
  "type": {
747
747
  "text": "StoryObj<LocationFilterProps>"
748
748
  },
749
- "default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); const inputField = () => canvas.getByRole('combobox'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-location-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Input invalid location', async () => { await userEvent.type(inputField(), 'Not / A / Location'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>18/}'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: undefined, country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia', async () => { await userEvent.type(inputField(), 'Asia'); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: 'Asia', country: undefined, division: undefined, location: undefined, }); }); await step('Select Asia / Bangladesh / Rajshahi / Chapainawabgonj', async () => { await userEvent.type(inputField(), ' / Bangladesh / Rajshahi / Chapainawabgonj'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { region: 'Asia', country: 'Bangladesh', division: 'Rajshahi', location: 'Chapainawabgonj', }, }), ); }); }, }"
749
+ "default": "{ ...Template, parameters: { fetchMock: { mocks: [ { matcher: aggregatedEndpointMatcher, response: { status: 200, body: data, }, }, ], }, }, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-location-filter'); const inputField = () => canvas.getByRole('combobox'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-location-changed', listenerMock); }); await step('wait until data is loaded', async () => { await waitFor(() => { return expect(inputField()).toBeEnabled(); }); }); await step('Input invalid location', async () => { await userEvent.type(inputField(), 'Not / A / Location'); await expect(listenerMock).not.toHaveBeenCalled(); }); await step('Empty input', async () => { await userEvent.type(inputField(), '{backspace>18/}'); await userEvent.click(canvas.getByLabelText('toggle menu')); await waitFor(() => { return expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: undefined, country: undefined, division: undefined, location: undefined, }); }); }); await step('Select Asia', async () => { await userEvent.type(inputField(), 'Asia'); await userEvent.click(canvas.getByRole('option', { name: 'Asia Asia' })); await waitFor(() => { return expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: 'Asia', country: undefined, division: undefined, location: undefined, }); }); }); await step('Select Asia / Bangladesh / Rajshahi / Chapainawabgonj', async () => { await userEvent.type(inputField(), ' / Bangladesh / Rajshahi / Chapainawabgonj'); await userEvent.click(canvas.getByText('Asia / Bangladesh / Rajshahi / Chapainawabgonj')); await waitFor(() => { return expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ region: 'Asia', country: 'Bangladesh', division: 'Rajshahi', location: 'Chapainawabgonj', }); }); }); }, }"
750
750
  }
751
751
  ],
752
752
  "exports": [
@@ -798,18 +798,18 @@
798
798
  "declarations": [
799
799
  {
800
800
  "kind": "class",
801
- "description": "## Context\n\nThis component provides an input field to specify filters for locations.\n\nIt expects a list of fields that form a strict hierarchical order, such as continent, country, and city.\nThe component retrieves a list of all possible values for these fields from the Lapis instance.\nThis list is then utilized to display autocomplete suggestions and to validate the input.\n\nGiven `fields` are `['field1', 'field2', ..., 'fieldN']`,\nthen valid values for the location filter must be in the form `valueForField1 / valueForField2 / ... / valueForFieldK`,\nwhere `1 <= K <= N`.\nValues for the fields `i > K` are considered `undefined`.",
801
+ "description": "## Context\n\nThis component provides an input field to specify filters for locations.\n\nIt expects a list of fields that form a strict hierarchical order, such as continent, country, and city.\nThe component retrieves a list of all possible values for these fields from the Lapis instance.\nThis list is then utilized to display autocomplete suggestions and to validate the input.",
802
802
  "name": "LocationFilterComponent",
803
803
  "members": [
804
804
  {
805
805
  "kind": "field",
806
- "name": "initialValue",
806
+ "name": "value",
807
807
  "type": {
808
- "text": "string | undefined"
808
+ "text": "Record<string, string | null | undefined> | undefined"
809
809
  },
810
810
  "default": "undefined",
811
- "description": "The initial value to use for this location filter.\nMust be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.",
812
- "attribute": "initialValue"
811
+ "description": "The initial value to use for this location filter.",
812
+ "attribute": "value"
813
813
  },
814
814
  {
815
815
  "kind": "field",
@@ -853,13 +853,13 @@
853
853
  ],
854
854
  "attributes": [
855
855
  {
856
- "name": "initialValue",
856
+ "name": "value",
857
857
  "type": {
858
- "text": "string | undefined"
858
+ "text": "Record<string, string | null | undefined> | undefined"
859
859
  },
860
860
  "default": "undefined",
861
- "description": "The initial value to use for this location filter.\nMust be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.",
862
- "fieldName": "initialValue"
861
+ "description": "The initial value to use for this location filter.",
862
+ "fieldName": "value"
863
863
  },
864
864
  {
865
865
  "name": "fields",
@@ -1096,11 +1096,11 @@
1096
1096
  },
1097
1097
  {
1098
1098
  "kind": "variable",
1099
- "name": "FiresEvent",
1099
+ "name": "FiresEvents",
1100
1100
  "type": {
1101
1101
  "text": "StoryObj<Required<TextInputProps>>"
1102
1102
  },
1103
- "default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-input'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-text-input-changed', 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 expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ host: undefined, }); }); await step('Enter a valid host name', async () => { await userEvent.type(inputField(), 'Homo'); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo', }, }), ); }); }, args: { ...Default.args, initialValue: '', }, }"
1103
+ "default": "{ ...Default, play: async ({ canvasElement, step }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-text-input'); const inputField = () => canvas.getByPlaceholderText('Enter host name'); const listenerMock = fn(); await step('Setup event listener mock', async () => { canvasElement.addEventListener('gs-text-input-changed', 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(() => { expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: 'Homo sapiens', }, }), ); }); }); await step('Remove initial value', async () => { await fireEvent.click(canvas.getByRole('button', { name: 'clear selection' })); await expect(listenerMock).toHaveBeenCalledWith( expect.objectContaining({ detail: { host: undefined, }, }), ); }); await step('Empty input', async () => { inputField().blur(); await expect(listenerMock.mock.calls.at(-1)![0].detail).toStrictEqual({ host: undefined, }); }); }, args: { ...Default.args, initialValue: '', }, }"
1104
1104
  }
1105
1105
  ],
1106
1106
  "exports": [
@@ -1122,9 +1122,9 @@
1122
1122
  },
1123
1123
  {
1124
1124
  "kind": "js",
1125
- "name": "FiresEvent",
1125
+ "name": "FiresEvents",
1126
1126
  "declaration": {
1127
- "name": "FiresEvent",
1127
+ "name": "FiresEvents",
1128
1128
  "module": "src/web-components/input/gs-text-input.stories.ts"
1129
1129
  }
1130
1130
  }
@@ -96,8 +96,18 @@ const dateRangeOptionPresets = {
96
96
  label: "All times"
97
97
  }
98
98
  };
99
+ class LocationChangedEvent extends CustomEvent {
100
+ constructor(detail) {
101
+ super("gs-location-changed", {
102
+ detail,
103
+ bubbles: true,
104
+ composed: true
105
+ });
106
+ }
107
+ }
99
108
  export {
100
109
  DateRangeOptionChangedEvent as D,
110
+ LocationChangedEvent as L,
101
111
  dateRangeOptionSchema as a,
102
112
  toYYYYMMDD as b,
103
113
  dateRangeOptionPresets as d,
@@ -108,4 +118,4 @@ export {
108
118
  temporalGranularitySchema as t,
109
119
  views as v
110
120
  };
111
- //# sourceMappingURL=dateRangeOption-Bh2p78z0.js.map
121
+ //# sourceMappingURL=LocationChangedEvent-CORvQvXv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocationChangedEvent-CORvQvXv.js","sources":["../src/types.ts","../src/preact/dateRangeSelector/dateConversion.ts","../src/preact/dateRangeSelector/dateRangeOption.ts","../src/preact/locationFilter/LocationChangedEvent.ts"],"sourcesContent":["import z from 'zod';\n\nimport {\n type Deletion,\n type DeletionClass,\n type Insertion,\n type InsertionClass,\n type Substitution,\n type SubstitutionClass,\n} from './utils/mutations';\n\nexport const mutationsFilterSchema = z.object({\n nucleotideMutations: z.array(z.string()),\n aminoAcidMutations: z.array(z.string()),\n nucleotideInsertions: z.array(z.string()),\n aminoAcidInsertions: z.array(z.string()),\n});\nexport type MutationsFilter = z.infer<typeof mutationsFilterSchema>;\n\nexport const lapisFilterSchema = z\n .record(z.union([z.string(), z.array(z.string()), z.number(), z.null(), z.boolean(), z.undefined()]))\n .and(mutationsFilterSchema.partial());\nexport type LapisFilter = z.infer<typeof lapisFilterSchema>;\n\nexport const namedLapisFilterSchema = z.object({\n lapisFilter: lapisFilterSchema,\n displayName: z.string(),\n});\nexport type NamedLapisFilter = z.infer<typeof namedLapisFilterSchema>;\n\nexport const temporalGranularitySchema = z.union([\n z.literal('day'),\n z.literal('week'),\n z.literal('month'),\n z.literal('year'),\n]);\nexport type TemporalGranularity = z.infer<typeof temporalGranularitySchema>;\n\nexport const sequenceTypeSchema = z.union([z.literal('nucleotide'), z.literal('amino acid')]);\nexport type SequenceType = z.infer<typeof sequenceTypeSchema>;\n\nexport type SubstitutionOrDeletion = 'substitution' | 'deletion';\n\nexport type MutationType = SubstitutionOrDeletion | 'insertion';\n\nexport type SubstitutionEntry<T extends Substitution = SubstitutionClass> = {\n type: 'substitution';\n mutation: T;\n count: number;\n proportion: number;\n};\n\nexport type DeletionEntry<T extends Deletion = DeletionClass> = {\n type: 'deletion';\n mutation: T;\n count: number;\n proportion: number;\n};\n\nexport type InsertionEntry<T extends Insertion = InsertionClass> = { type: 'insertion'; mutation: T; count: number };\n\nexport type SubstitutionOrDeletionEntry<\n S extends Substitution = SubstitutionClass,\n D extends Deletion = DeletionClass,\n> = SubstitutionEntry<S> | DeletionEntry<D>;\n\nexport type MutationEntry = SubstitutionEntry | DeletionEntry | InsertionEntry;\n\nexport const views = {\n table: 'table',\n venn: 'venn',\n grid: 'grid',\n insertions: 'insertions',\n bar: 'bar',\n line: 'line',\n bubble: 'bubble',\n map: 'map',\n} as const;\n","export const toYYYYMMDD = (date: Date) => {\n const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit' };\n return date.toLocaleDateString('en-CA', options);\n};\n","import z from 'zod';\n\nimport { toYYYYMMDD } from './dateConversion';\n\n/**\n * A date range option that can be used in the `gs-date-range-selector` component.\n */\nexport const dateRangeOptionSchema = z.object({\n /** The label of the date range option that will be shown to the user */\n label: z.string(),\n /**\n * The start date of the date range in the format `YYYY-MM-DD`.\n * If not set, the date range selector will default to the `earliestDate` property.\n */\n dateFrom: z.string().date().optional(),\n /**\n * The end date of the date range in the format `YYYY-MM-DD`.\n * If not set, the date range selector will default to the current date.\n */\n dateTo: z.string().date().optional(),\n});\n\nexport type DateRangeOption = z.infer<typeof dateRangeOptionSchema>;\n\nexport type DateRangeSelectOption = string | { dateFrom: string; dateTo: string };\n\nexport class DateRangeOptionChangedEvent extends CustomEvent<DateRangeSelectOption> {\n constructor(detail: DateRangeSelectOption) {\n super('gs-date-range-option-changed', {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n\nconst today = new Date();\n\nconst twoWeeksAgo = new Date();\ntwoWeeksAgo.setDate(today.getDate() - 14);\n\nconst lastMonth = new Date(today);\nlastMonth.setMonth(today.getMonth() - 1);\n\nconst last2Months = new Date(today);\nlast2Months.setMonth(today.getMonth() - 2);\n\nconst last3Months = new Date(today);\nlast3Months.setMonth(today.getMonth() - 3);\n\nconst last6Months = new Date(today);\nlast6Months.setMonth(today.getMonth() - 6);\n\nconst lastYear = new Date(today);\nlastYear.setFullYear(today.getFullYear() - 1);\n\n/**\n * Presets for the `gs-date-range-selector` component that can be used as `dateRangeOptions`.\n */\nexport const dateRangeOptionPresets = {\n last2Weeks: {\n label: 'Last 2 weeks',\n dateFrom: toYYYYMMDD(twoWeeksAgo),\n },\n lastMonth: {\n label: 'Last month',\n dateFrom: toYYYYMMDD(lastMonth),\n },\n last2Months: {\n label: 'Last 2 months',\n dateFrom: toYYYYMMDD(last2Months),\n },\n last3Months: {\n label: 'Last 3 months',\n dateFrom: toYYYYMMDD(last3Months),\n },\n last6Months: {\n label: 'Last 6 months',\n dateFrom: toYYYYMMDD(last6Months),\n },\n lastYear: {\n label: 'Last year',\n dateFrom: toYYYYMMDD(lastYear),\n },\n allTimes: {\n label: 'All times',\n },\n} satisfies Record<string, DateRangeOption>;\n","export type LapisLocationFilter = Record<string, string | null | undefined>;\n\nexport class LocationChangedEvent extends CustomEvent<LapisLocationFilter> {\n constructor(detail: LapisLocationFilter) {\n super('gs-location-changed', {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -278,11 +278,6 @@ export declare class LineageFilterComponent extends PreactLitAdapter {
278
278
  * The component retrieves a list of all possible values for these fields from the Lapis instance.
279
279
  * This list is then utilized to display autocomplete suggestions and to validate the input.
280
280
  *
281
- * Given `fields` are `['field1', 'field2', ..., 'fieldN']`,
282
- * then valid values for the location filter must be in the form `valueForField1 / valueForField2 / ... / valueForFieldK`,
283
- * where `1 <= K <= N`.
284
- * Values for the fields `i > K` are considered `undefined`.
285
- *
286
281
  * @fires {CustomEvent<Record<string, string>>} gs-location-changed
287
282
  * Fired when a value from the datalist is selected or when a valid value is typed into the field.
288
283
  * The `details` of this event contain an object with all `fields` as keys
@@ -300,9 +295,8 @@ export declare class LineageFilterComponent extends PreactLitAdapter {
300
295
  export declare class LocationFilterComponent extends PreactLitAdapter {
301
296
  /**
302
297
  * The initial value to use for this location filter.
303
- * Must be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.
304
298
  */
305
- initialValue: string | undefined;
299
+ value: Record<string, string | null | undefined> | undefined;
306
300
  /**
307
301
  * Required.
308
302
  *
@@ -1333,7 +1327,7 @@ declare global {
1333
1327
 
1334
1328
  declare global {
1335
1329
  interface HTMLElementTagNameMap {
1336
- 'gs-aggregate': AggregateComponent;
1330
+ 'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
1337
1331
  }
1338
1332
  }
1339
1333
 
@@ -1341,7 +1335,7 @@ declare global {
1341
1335
  declare global {
1342
1336
  namespace JSX {
1343
1337
  interface IntrinsicElements {
1344
- 'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1338
+ 'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1345
1339
  }
1346
1340
  }
1347
1341
  }
@@ -1349,7 +1343,7 @@ declare global {
1349
1343
 
1350
1344
  declare global {
1351
1345
  interface HTMLElementTagNameMap {
1352
- 'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
1346
+ 'gs-aggregate': AggregateComponent;
1353
1347
  }
1354
1348
  }
1355
1349
 
@@ -1357,7 +1351,7 @@ declare global {
1357
1351
  declare global {
1358
1352
  namespace JSX {
1359
1353
  interface IntrinsicElements {
1360
- 'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1354
+ 'gs-aggregate': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1361
1355
  }
1362
1356
  }
1363
1357
  }
@@ -1365,7 +1359,7 @@ declare global {
1365
1359
 
1366
1360
  declare global {
1367
1361
  interface HTMLElementTagNameMap {
1368
- 'gs-sequences-by-location': SequencesByLocationComponent;
1362
+ 'gs-mutations-over-time': MutationsOverTimeComponent;
1369
1363
  }
1370
1364
  }
1371
1365
 
@@ -1373,7 +1367,7 @@ declare global {
1373
1367
  declare global {
1374
1368
  namespace JSX {
1375
1369
  interface IntrinsicElements {
1376
- 'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1370
+ 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1377
1371
  }
1378
1372
  }
1379
1373
  }
@@ -1381,7 +1375,7 @@ declare global {
1381
1375
 
1382
1376
  declare global {
1383
1377
  interface HTMLElementTagNameMap {
1384
- 'gs-statistics': StatisticsComponent;
1378
+ 'gs-sequences-by-location': SequencesByLocationComponent;
1385
1379
  }
1386
1380
  }
1387
1381
 
@@ -1389,7 +1383,7 @@ declare global {
1389
1383
  declare global {
1390
1384
  namespace JSX {
1391
1385
  interface IntrinsicElements {
1392
- 'gs-statistics': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1386
+ 'gs-sequences-by-location': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1393
1387
  }
1394
1388
  }
1395
1389
  }
@@ -1397,7 +1391,7 @@ declare global {
1397
1391
 
1398
1392
  declare global {
1399
1393
  interface HTMLElementTagNameMap {
1400
- 'gs-mutations-over-time': MutationsOverTimeComponent;
1394
+ 'gs-statistics': StatisticsComponent;
1401
1395
  }
1402
1396
  }
1403
1397
 
@@ -1405,7 +1399,7 @@ declare global {
1405
1399
  declare global {
1406
1400
  namespace JSX {
1407
1401
  interface IntrinsicElements {
1408
- 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1402
+ 'gs-statistics': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1409
1403
  }
1410
1404
  }
1411
1405
  }
@@ -1413,10 +1407,11 @@ declare global {
1413
1407
 
1414
1408
  declare global {
1415
1409
  interface HTMLElementTagNameMap {
1416
- 'gs-text-input': TextInputComponent;
1410
+ 'gs-date-range-selector': DateRangeSelectorComponent;
1417
1411
  }
1418
1412
  interface HTMLElementEventMap {
1419
- 'gs-text-input-changed': CustomEvent<Record<string, string>>;
1413
+ 'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
1414
+ 'gs-date-range-option-changed': DateRangeOptionChangedEvent;
1420
1415
  }
1421
1416
  }
1422
1417
 
@@ -1424,7 +1419,7 @@ declare global {
1424
1419
  declare global {
1425
1420
  namespace JSX {
1426
1421
  interface IntrinsicElements {
1427
- 'gs-text-input': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1422
+ 'gs-date-range-selector': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1428
1423
  }
1429
1424
  }
1430
1425
  }
@@ -1432,11 +1427,10 @@ declare global {
1432
1427
 
1433
1428
  declare global {
1434
1429
  interface HTMLElementTagNameMap {
1435
- 'gs-date-range-selector': DateRangeSelectorComponent;
1430
+ 'gs-location-filter': LocationFilterComponent;
1436
1431
  }
1437
1432
  interface HTMLElementEventMap {
1438
- 'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
1439
- 'gs-date-range-option-changed': DateRangeOptionChangedEvent;
1433
+ 'gs-location-changed': LocationChangedEvent;
1440
1434
  }
1441
1435
  }
1442
1436
 
@@ -1444,7 +1438,7 @@ declare global {
1444
1438
  declare global {
1445
1439
  namespace JSX {
1446
1440
  interface IntrinsicElements {
1447
- 'gs-date-range-selector': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1441
+ 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1448
1442
  }
1449
1443
  }
1450
1444
  }
@@ -1452,10 +1446,10 @@ declare global {
1452
1446
 
1453
1447
  declare global {
1454
1448
  interface HTMLElementTagNameMap {
1455
- 'gs-location-filter': LocationFilterComponent;
1449
+ 'gs-mutation-filter': MutationFilterComponent;
1456
1450
  }
1457
1451
  interface HTMLElementEventMap {
1458
- 'gs-location-changed': CustomEvent<Record<string, string>>;
1452
+ 'gs-mutation-filter-changed': CustomEvent<MutationsFilter>;
1459
1453
  }
1460
1454
  }
1461
1455
 
@@ -1463,7 +1457,7 @@ declare global {
1463
1457
  declare global {
1464
1458
  namespace JSX {
1465
1459
  interface IntrinsicElements {
1466
- 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1460
+ 'gs-mutation-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1467
1461
  }
1468
1462
  }
1469
1463
  }
@@ -1471,10 +1465,10 @@ declare global {
1471
1465
 
1472
1466
  declare global {
1473
1467
  interface HTMLElementTagNameMap {
1474
- 'gs-mutation-filter': MutationFilterComponent;
1468
+ 'gs-lineage-filter': LineageFilterComponent;
1475
1469
  }
1476
1470
  interface HTMLElementEventMap {
1477
- 'gs-mutation-filter-changed': CustomEvent<MutationsFilter>;
1471
+ 'gs-lineage-filter-changed': CustomEvent<Record<string, string>>;
1478
1472
  }
1479
1473
  }
1480
1474
 
@@ -1482,7 +1476,7 @@ declare global {
1482
1476
  declare global {
1483
1477
  namespace JSX {
1484
1478
  interface IntrinsicElements {
1485
- 'gs-mutation-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1479
+ 'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1486
1480
  }
1487
1481
  }
1488
1482
  }
@@ -1490,10 +1484,10 @@ declare global {
1490
1484
 
1491
1485
  declare global {
1492
1486
  interface HTMLElementTagNameMap {
1493
- 'gs-lineage-filter': LineageFilterComponent;
1487
+ 'gs-text-input': TextInputComponent;
1494
1488
  }
1495
1489
  interface HTMLElementEventMap {
1496
- 'gs-lineage-filter-changed': CustomEvent<Record<string, string>>;
1490
+ 'gs-text-input-changed': CustomEvent<Record<string, string>>;
1497
1491
  }
1498
1492
  }
1499
1493
 
@@ -1501,7 +1495,7 @@ declare global {
1501
1495
  declare global {
1502
1496
  namespace JSX {
1503
1497
  interface IntrinsicElements {
1504
- 'gs-lineage-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1498
+ 'gs-text-input': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1505
1499
  }
1506
1500
  }
1507
1501
  }