@genspectrum/dashboard-components 0.10.1 → 0.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.
Files changed (79) hide show
  1. package/README.md +19 -19
  2. package/custom-elements.json +72 -56
  3. package/dist/assets/{mutationOverTimeWorker-CvZg52rf.js.map → mutationOverTimeWorker-CNg_ztNp.js.map} +1 -1
  4. package/dist/components.d.ts +19 -28
  5. package/dist/components.js +343 -96
  6. package/dist/components.js.map +1 -1
  7. package/dist/{utilEntrypoint-g4DsyhU7.js → dateRangeOption-DjtcAEWq.js} +46 -2
  8. package/dist/dateRangeOption-DjtcAEWq.js.map +1 -0
  9. package/dist/style.css +11 -5
  10. package/dist/util.d.ts +112 -21
  11. package/dist/util.js +3 -2
  12. package/package.json +2 -2
  13. package/src/preact/aggregatedData/aggregate.stories.tsx +14 -0
  14. package/src/preact/aggregatedData/aggregate.tsx +17 -15
  15. package/src/preact/components/color-scale-selector.tsx +7 -3
  16. package/src/preact/components/error-boundary.stories.tsx +24 -3
  17. package/src/preact/components/error-boundary.tsx +38 -5
  18. package/src/preact/components/error-display.tsx +62 -6
  19. package/src/preact/components/tabs.tsx +2 -2
  20. package/src/preact/dateRangeSelector/computeInitialValues.spec.ts +8 -2
  21. package/src/preact/dateRangeSelector/computeInitialValues.ts +6 -0
  22. package/src/preact/dateRangeSelector/date-range-selector.stories.tsx +16 -2
  23. package/src/preact/dateRangeSelector/date-range-selector.tsx +20 -15
  24. package/src/preact/dateRangeSelector/dateRangeOption.ts +10 -5
  25. package/src/preact/lineageFilter/lineage-filter.stories.tsx +18 -4
  26. package/src/preact/lineageFilter/lineage-filter.tsx +15 -10
  27. package/src/preact/locationFilter/location-filter.stories.tsx +14 -0
  28. package/src/preact/locationFilter/location-filter.tsx +15 -10
  29. package/src/preact/mutationComparison/mutation-comparison-venn.tsx +17 -18
  30. package/src/preact/mutationComparison/mutation-comparison.tsx +18 -12
  31. package/src/preact/mutationFilter/mutation-filter.tsx +26 -13
  32. package/src/preact/mutations/mutations.tsx +16 -12
  33. package/src/preact/mutationsOverTime/__mockData__/aminoAcidMutationsByDay.ts +1326 -9341
  34. package/src/preact/mutationsOverTime/__mockData__/byWeek.ts +615 -4920
  35. package/src/preact/mutationsOverTime/__mockData__/defaultMockData.ts +2203 -17624
  36. package/src/preact/mutationsOverTime/mutations-over-time-grid.tsx +16 -8
  37. package/src/preact/mutationsOverTime/mutations-over-time.stories.tsx +14 -0
  38. package/src/preact/mutationsOverTime/mutations-over-time.tsx +19 -17
  39. package/src/preact/numberSequencesOverTime/number-sequences-over-time.stories.tsx +14 -0
  40. package/src/preact/numberSequencesOverTime/number-sequences-over-time.tsx +22 -14
  41. package/src/preact/prevalenceOverTime/prevalence-over-time.stories.tsx +14 -0
  42. package/src/preact/prevalenceOverTime/prevalence-over-time.tsx +28 -19
  43. package/src/preact/relativeGrowthAdvantage/relative-growth-advantage.stories.tsx +14 -0
  44. package/src/preact/relativeGrowthAdvantage/relative-growth-advantage.tsx +18 -15
  45. package/src/preact/shared/charts/confideceInterval.ts +10 -8
  46. package/src/preact/shared/charts/getYAxisMax.ts +10 -5
  47. package/src/preact/shared/stories/expectInvalidAttributesErrorMessage.ts +13 -0
  48. package/src/preact/statistic/statistics.tsx +10 -8
  49. package/src/preact/textInput/text-input.stories.tsx +14 -0
  50. package/src/preact/textInput/text-input.tsx +16 -11
  51. package/src/preact/webWorkers/useWebWorker.ts +8 -4
  52. package/src/query/queryAggregateData.ts +2 -1
  53. package/src/query/queryMutationsOverTime.spec.ts +12 -27
  54. package/src/query/queryMutationsOverTime.ts +2 -6
  55. package/src/types.ts +31 -7
  56. package/src/utilEntrypoint.ts +15 -0
  57. package/src/utils/map2d.spec.ts +10 -10
  58. package/src/utils/map2d.ts +10 -10
  59. package/src/web-components/app.stories.ts +17 -2
  60. package/src/web-components/app.ts +17 -5
  61. package/src/web-components/input/gs-date-range-selector.stories.ts +2 -2
  62. package/src/web-components/input/gs-date-range-selector.tsx +3 -3
  63. package/src/web-components/input/gs-lineage-filter.tsx +1 -1
  64. package/src/web-components/input/gs-location-filter.tsx +2 -2
  65. package/src/web-components/input/gs-mutation-filter.stories.ts +2 -0
  66. package/src/web-components/input/gs-text-input.tsx +2 -2
  67. package/src/web-components/introduction.mdx +4 -4
  68. package/src/web-components/visualization/data_visualization_statistical_analysis.mdx +3 -3
  69. package/src/web-components/visualization/gs-aggregate.tsx +2 -2
  70. package/src/web-components/visualization/gs-mutations-over-time.tsx +1 -3
  71. package/src/web-components/visualization/gs-mutations.tsx +1 -3
  72. package/src/web-components/visualization/gs-number-sequences-over-time.tsx +1 -3
  73. package/src/web-components/visualization/gs-prevalence-over-time.tsx +3 -6
  74. package/src/web-components/visualization/gs-relative-growth-advantage.tsx +1 -5
  75. package/standalone-bundle/assets/{mutationOverTimeWorker-CypX_PYM.js.map → mutationOverTimeWorker-cIyshfj_.js.map} +1 -1
  76. package/standalone-bundle/dashboard-components.js +8800 -8577
  77. package/standalone-bundle/dashboard-components.js.map +1 -1
  78. package/standalone-bundle/style.css +1 -1
  79. package/dist/utilEntrypoint-g4DsyhU7.js.map +0 -1
package/README.md CHANGED
@@ -44,19 +44,19 @@ We use [Lit](https://lit.dev/) to create web components.
44
44
 
45
45
  We have split the package into two parts:
46
46
 
47
- - The components, which are web components that can be used in the browser.
48
- - They can be imported with `import '@genspectrum/dashboard-components/components';`
49
- - utility functions, which can also be used in a node environment.
50
- - They can be imported with `import '@genspectrum/dashboard-components/util';`
47
+ - The components, which are web components that can be used in the browser.
48
+ - They can be imported with `import '@genspectrum/dashboard-components/components';`
49
+ - utility functions, which can also be used in a node environment.
50
+ - They can be imported with `import '@genspectrum/dashboard-components/util';`
51
51
 
52
52
  We primarily provide two kinds of components:
53
53
 
54
- - **Visualization components** (charts, tables, etc.)
55
- - Those components fetch data from the LAPIS instance and visualize it.
56
- - **Input components** that let you specify sequence filters for the LAPIS requests.
57
- - Input changes will fire events that can be listened to by the visualization components.
58
- It is the responsibility of the dashbaord maintainer to listen to those events
59
- and to wire the data correctly into the visualization components.
54
+ - **Visualization components** (charts, tables, etc.)
55
+ - Those components fetch data from the LAPIS instance and visualize it.
56
+ - **Input components** that let you specify sequence filters for the LAPIS requests.
57
+ - Input changes will fire events that can be listened to by the visualization components.
58
+ It is the responsibility of the dashbaord maintainer to listen to those events
59
+ and to wire the data correctly into the visualization components.
60
60
 
61
61
  ## Local Development
62
62
 
@@ -125,15 +125,15 @@ This assumes that the Storybooks are running.
125
125
 
126
126
  We follow this testing concept:
127
127
 
128
- - Domain logic is tested with unit tests. Thus, that code should be kept separate from the components.
129
- - Detailed tests of the components are done with interaction tests in the Preact Storybook.
130
- - The Lit Storybook only contains tests for the most important functionality to ensure that the web component build
131
- works.
132
- - We use Playwright for
133
- - snapshot tests of the visualization components:
134
- - Screenshots of charts and tables that serve as visual regression.
135
- - Snapshots of the CSV data that the visualization components offer as download.
136
- - testing functionality of components that cannot be tested within Storybook due to technical limitations.
128
+ - Domain logic is tested with unit tests. Thus, that code should be kept separate from the components.
129
+ - Detailed tests of the components are done with interaction tests in the Preact Storybook.
130
+ - The Lit Storybook only contains tests for the most important functionality to ensure that the web component build
131
+ works.
132
+ - We use Playwright for
133
+ - snapshot tests of the visualization components:
134
+ - Screenshots of charts and tables that serve as visual regression.
135
+ - Snapshots of the CSV data that the visualization components offer as download.
136
+ - testing functionality of components that cannot be tested within Storybook due to technical limitations.
137
137
 
138
138
  #### Mocking
139
139
 
@@ -80,6 +80,14 @@
80
80
  },
81
81
  "default": "{ ...Template, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await waitFor(() => { expect(canvas.getByText(LAPIS_URL)).toBeVisible(); expect(canvas.getByText('\"name\": \"ORF1a\",', { exact: false })).toBeVisible(); }); }, }"
82
82
  },
83
+ {
84
+ "kind": "variable",
85
+ "name": "WithNoLapisUrl",
86
+ "type": {
87
+ "text": "StoryObj<{ lapis: string }>"
88
+ },
89
+ "default": "{ ...Default, args: { ...Default.args, lapis: 'notAValidUrl', }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await waitFor(() => { expect(canvas.getByText(\"Error: Invalid LAPIS URL: 'notAValidUrl'\", { exact: false })).toBeVisible(); }); }, }"
90
+ },
83
91
  {
84
92
  "kind": "variable",
85
93
  "name": "DelayFetchingReferenceGenome",
@@ -94,7 +102,7 @@
94
102
  "type": {
95
103
  "text": "StoryObj<{ lapis: string }>"
96
104
  },
97
- "default": "{ ...Template, args: { lapis: 'definitely-not-a-valid-url', }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await waitFor(() => { expect(canvas.getByText('Error', { exact: false })).toBeVisible(); }); }, }"
105
+ "default": "{ ...Template, args: { lapis: 'https://url.to.lapis-definitely-not-a-valid-url', }, play: async ({ canvasElement }) => { const canvas = within(canvasElement); await waitFor(() => { expect(canvas.getByText('Error: Cannot fetch reference genome.', { exact: false })).toBeVisible(); }); }, }"
98
106
  },
99
107
  {
100
108
  "kind": "class",
@@ -143,6 +151,14 @@
143
151
  "module": "src/web-components/app.stories.ts"
144
152
  }
145
153
  },
154
+ {
155
+ "kind": "js",
156
+ "name": "WithNoLapisUrl",
157
+ "declaration": {
158
+ "name": "WithNoLapisUrl",
159
+ "module": "src/web-components/app.stories.ts"
160
+ }
161
+ },
146
162
  {
147
163
  "kind": "js",
148
164
  "name": "DelayFetchingReferenceGenome",
@@ -274,7 +290,7 @@
274
290
  "type": {
275
291
  "text": "Meta<Required<DateRangeSelectorProps>>"
276
292
  },
277
- "default": "{ title: 'Input/DateRangeSelector', component: 'gs-date-range-selector', parameters: withComponentDocs({ actions: { handles: ['gs-date-range-filter-changed', 'gs-date-range-option-changed', ...previewHandles], }, fetchMock: {}, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { initialValue: { control: { type: 'select', }, options: [dateRangeOptionPresets.lastMonth.label, dateRangeOptionPresets.allTimes.label, 'CustomDateRange'], }, dateColumn: { control: { type: 'text' } }, dateRangeOptions: { control: { type: 'object', }, }, earliestDate: { control: { type: 'text', }, }, width: { control: { type: 'text', }, }, }, args: { dateRangeOptions: [ dateRangeOptionPresets.lastMonth, dateRangeOptionPresets.last3Months, dateRangeOptionPresets.allTimes, customDateRange, ], earliestDate: '1970-01-01', initialValue: dateRangeOptionPresets.lastMonth.label, dateColumn: 'aDateColumn', width: '100%', initialDateFrom: '', initialDateTo: '', }, tags: ['autodocs'], }"
293
+ "default": "{ title: 'Input/DateRangeSelector', component: 'gs-date-range-selector', parameters: withComponentDocs({ actions: { handles: ['gs-date-range-filter-changed', 'gs-date-range-option-changed', ...previewHandles], }, fetchMock: {}, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { initialValue: { control: { type: 'select', }, options: [dateRangeOptionPresets.lastMonth.label, dateRangeOptionPresets.allTimes.label, 'CustomDateRange'], }, dateColumn: { control: { type: 'text' } }, dateRangeOptions: { control: { type: 'object', }, }, earliestDate: { control: { type: 'text', }, }, width: { control: { type: 'text', }, }, }, args: { dateRangeOptions: [ dateRangeOptionPresets.lastMonth, dateRangeOptionPresets.last3Months, dateRangeOptionPresets.allTimes, customDateRange, ], earliestDate: '1970-01-01', initialValue: dateRangeOptionPresets.lastMonth.label, dateColumn: 'aDateColumn', width: '100%', initialDateFrom: undefined, initialDateTo: undefined, }, tags: ['autodocs'], }"
278
294
  },
279
295
  {
280
296
  "kind": "variable",
@@ -363,9 +379,9 @@
363
379
  "kind": "field",
364
380
  "name": "initialDateFrom",
365
381
  "type": {
366
- "text": "string"
382
+ "text": "string | undefined"
367
383
  },
368
- "default": "''",
384
+ "default": "undefined",
369
385
  "description": "A date string in the format `YYYY-MM-DD`.\nIf set, the date range selector will be initialized with the given date (overwriting `initialValue` to `custom`).\nIf `initialDateTo` is set, but this is unset, it will default to `earliestDate`.",
370
386
  "attribute": "initialDateFrom"
371
387
  },
@@ -373,9 +389,9 @@
373
389
  "kind": "field",
374
390
  "name": "initialDateTo",
375
391
  "type": {
376
- "text": "string"
392
+ "text": "string | undefined"
377
393
  },
378
- "default": "''",
394
+ "default": "undefined",
379
395
  "description": "A date string in the format `YYYY-MM-DD`.\nIf set, the date range selector will be initialized with the given date (overwriting `initialValue` to `custom`).\nIf `initialDateFrom` is set, but this is unset, it will default to the current date.",
380
396
  "attribute": "initialDateTo"
381
397
  },
@@ -395,7 +411,7 @@
395
411
  "type": {
396
412
  "text": "string"
397
413
  },
398
- "default": "'date'",
414
+ "default": "''",
399
415
  "description": "The name of the column in LAPIS that contains the date information.",
400
416
  "attribute": "dateColumn"
401
417
  }
@@ -447,18 +463,18 @@
447
463
  {
448
464
  "name": "initialDateFrom",
449
465
  "type": {
450
- "text": "string"
466
+ "text": "string | undefined"
451
467
  },
452
- "default": "''",
468
+ "default": "undefined",
453
469
  "description": "A date string in the format `YYYY-MM-DD`.\nIf set, the date range selector will be initialized with the given date (overwriting `initialValue` to `custom`).\nIf `initialDateTo` is set, but this is unset, it will default to `earliestDate`.",
454
470
  "fieldName": "initialDateFrom"
455
471
  },
456
472
  {
457
473
  "name": "initialDateTo",
458
474
  "type": {
459
- "text": "string"
475
+ "text": "string | undefined"
460
476
  },
461
- "default": "''",
477
+ "default": "undefined",
462
478
  "description": "A date string in the format `YYYY-MM-DD`.\nIf set, the date range selector will be initialized with the given date (overwriting `initialValue` to `custom`).\nIf `initialDateFrom` is set, but this is unset, it will default to the current date.",
463
479
  "fieldName": "initialDateTo"
464
480
  },
@@ -476,7 +492,7 @@
476
492
  "type": {
477
493
  "text": "string"
478
494
  },
479
- "default": "'date'",
495
+ "default": "''",
480
496
  "description": "The name of the column in LAPIS that contains the date information.",
481
497
  "fieldName": "dateColumn"
482
498
  }
@@ -597,9 +613,9 @@
597
613
  "kind": "field",
598
614
  "name": "placeholderText",
599
615
  "type": {
600
- "text": "string"
616
+ "text": "string | undefined"
601
617
  },
602
- "default": "''",
618
+ "default": "undefined",
603
619
  "description": "The placeholder text to display in the input field.",
604
620
  "attribute": "placeholderText"
605
621
  },
@@ -645,9 +661,9 @@
645
661
  {
646
662
  "name": "placeholderText",
647
663
  "type": {
648
- "text": "string"
664
+ "text": "string | undefined"
649
665
  },
650
- "default": "''",
666
+ "default": "undefined",
651
667
  "description": "The placeholder text to display in the input field.",
652
668
  "fieldName": "placeholderText"
653
669
  },
@@ -789,9 +805,9 @@
789
805
  "kind": "field",
790
806
  "name": "initialValue",
791
807
  "type": {
792
- "text": "string"
808
+ "text": "string | undefined"
793
809
  },
794
- "default": "''",
810
+ "default": "undefined",
795
811
  "description": "The initial value to use for this location filter.\nMust be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.",
796
812
  "attribute": "initialValue"
797
813
  },
@@ -819,9 +835,9 @@
819
835
  "kind": "field",
820
836
  "name": "placeholderText",
821
837
  "type": {
822
- "text": "string"
838
+ "text": "string | undefined"
823
839
  },
824
- "default": "''",
840
+ "default": "undefined",
825
841
  "description": "The placeholder text to display in the input field, if it is empty.",
826
842
  "attribute": "placeholderText"
827
843
  }
@@ -839,9 +855,9 @@
839
855
  {
840
856
  "name": "initialValue",
841
857
  "type": {
842
- "text": "string"
858
+ "text": "string | undefined"
843
859
  },
844
- "default": "''",
860
+ "default": "undefined",
845
861
  "description": "The initial value to use for this location filter.\nMust be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.",
846
862
  "fieldName": "initialValue"
847
863
  },
@@ -866,9 +882,9 @@
866
882
  {
867
883
  "name": "placeholderText",
868
884
  "type": {
869
- "text": "string"
885
+ "text": "string | undefined"
870
886
  },
871
- "default": "''",
887
+ "default": "undefined",
872
888
  "description": "The placeholder text to display in the input field, if it is empty.",
873
889
  "fieldName": "placeholderText"
874
890
  }
@@ -918,7 +934,7 @@
918
934
  "type": {
919
935
  "text": "StoryObj<MutationFilterProps>"
920
936
  },
921
- "default": "{ ...Template, args: { initialValue: ['A123T'], }, }"
937
+ "default": "{ ...Template, args: { ...Template.args, initialValue: ['A123T'], }, }"
922
938
  },
923
939
  {
924
940
  "kind": "variable",
@@ -934,7 +950,7 @@
934
950
  "type": {
935
951
  "text": "StoryObj<MutationFilterProps>"
936
952
  },
937
- "default": "{ ...Template, args: { initialValue: ['seg1:123T', 'gene2:56', 'ins_seg2:78:AAA'], }, parameters: { fetchMock: { mocks: [ { matcher: { name: 'referenceGenome', url: REFERENCE_GENOME_ENDPOINT, }, response: { status: 200, body: { nucleotideSequences: [ { name: 'seg1', sequence: 'dummy', }, { name: 'seg2', sequence: 'dummy', }, ], genes: [ { name: 'gene1', sequence: 'dummy', }, { name: 'gene2', sequence: 'dummy', }, ], }, }, options: { overwriteRoutes: false, }, }, ], }, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-mutation-filter'); const inputField = () => canvas.getByPlaceholderText('Enter a mutation', { exact: false }); await waitFor(() => { const placeholderText = inputField().getAttribute('placeholder'); expect(placeholderText).toEqual( 'Enter a mutation (e.g. seg1:A123T, ins_seg1:123:AT, gene1:M123E, ins_gene1:123:ME)', ); }); await waitFor(() => { expect(canvas.getByText('seg1:123T')).toBeVisible(); expect(canvas.getByText('gene2:56')).toBeVisible(); return expect(canvas.getByText('ins_seg2:78:AAA')).toBeVisible(); }); }, }"
953
+ "default": "{ ...Template, args: { ...Template.args, initialValue: ['seg1:123T', 'gene2:56', 'ins_seg2:78:AAA'], }, parameters: { fetchMock: { mocks: [ { matcher: { name: 'referenceGenome', url: REFERENCE_GENOME_ENDPOINT, }, response: { status: 200, body: { nucleotideSequences: [ { name: 'seg1', sequence: 'dummy', }, { name: 'seg2', sequence: 'dummy', }, ], genes: [ { name: 'gene1', sequence: 'dummy', }, { name: 'gene2', sequence: 'dummy', }, ], }, }, options: { overwriteRoutes: false, }, }, ], }, }, play: async ({ canvasElement }) => { const canvas = await withinShadowRoot(canvasElement, 'gs-mutation-filter'); const inputField = () => canvas.getByPlaceholderText('Enter a mutation', { exact: false }); await waitFor(() => { const placeholderText = inputField().getAttribute('placeholder'); expect(placeholderText).toEqual( 'Enter a mutation (e.g. seg1:A123T, ins_seg1:123:AT, gene1:M123E, ins_gene1:123:ME)', ); }); await waitFor(() => { expect(canvas.getByText('seg1:123T')).toBeVisible(); expect(canvas.getByText('gene2:56')).toBeVisible(); return expect(canvas.getByText('ins_seg2:78:AAA')).toBeVisible(); }); }, }"
938
954
  }
939
955
  ],
940
956
  "exports": [
@@ -1127,9 +1143,9 @@
1127
1143
  "kind": "field",
1128
1144
  "name": "initialValue",
1129
1145
  "type": {
1130
- "text": "string"
1146
+ "text": "string | undefined"
1131
1147
  },
1132
- "default": "''",
1148
+ "default": "undefined",
1133
1149
  "description": "The initial value to use for this text input.",
1134
1150
  "attribute": "initialValue"
1135
1151
  },
@@ -1147,9 +1163,9 @@
1147
1163
  "kind": "field",
1148
1164
  "name": "placeholderText",
1149
1165
  "type": {
1150
- "text": "string"
1166
+ "text": "string | undefined"
1151
1167
  },
1152
- "default": "''",
1168
+ "default": "undefined",
1153
1169
  "description": "The placeholder text to display in the input field.",
1154
1170
  "attribute": "placeholderText"
1155
1171
  },
@@ -1177,9 +1193,9 @@
1177
1193
  {
1178
1194
  "name": "initialValue",
1179
1195
  "type": {
1180
- "text": "string"
1196
+ "text": "string | undefined"
1181
1197
  },
1182
- "default": "''",
1198
+ "default": "undefined",
1183
1199
  "description": "The initial value to use for this text input.",
1184
1200
  "fieldName": "initialValue"
1185
1201
  },
@@ -1195,9 +1211,9 @@
1195
1211
  {
1196
1212
  "name": "placeholderText",
1197
1213
  "type": {
1198
- "text": "string"
1214
+ "text": "string | undefined"
1199
1215
  },
1200
- "default": "''",
1216
+ "default": "undefined",
1201
1217
  "description": "The placeholder text to display in the input field.",
1202
1218
  "fieldName": "placeholderText"
1203
1219
  },
@@ -1887,7 +1903,7 @@
1887
1903
  "text": "Record<string, string | number | null | boolean>"
1888
1904
  },
1889
1905
  "default": "{}",
1890
- "description": "Required.\n\nLAPIS filter to select the displayed data.",
1906
+ "description": "LAPIS filter to select the displayed data. If not provided, all data is displayed.",
1891
1907
  "attribute": "lapisFilter"
1892
1908
  },
1893
1909
  {
@@ -1958,7 +1974,7 @@
1958
1974
  "text": "Record<string, string | number | null | boolean>"
1959
1975
  },
1960
1976
  "default": "{}",
1961
- "description": "Required.\n\nLAPIS filter to select the displayed data.",
1977
+ "description": "LAPIS filter to select the displayed data. If not provided, all data is displayed.",
1962
1978
  "fieldName": "lapisFilter"
1963
1979
  },
1964
1980
  {
@@ -2131,7 +2147,7 @@
2131
2147
  "text": "Record<string, string | number | null | boolean>"
2132
2148
  },
2133
2149
  "default": "{}",
2134
- "description": "Required.\n\nLAPIS filter to select the displayed data.",
2150
+ "description": "LAPIS filter to select the displayed data. If not provided, all data is displayed.",
2135
2151
  "attribute": "lapisFilter"
2136
2152
  },
2137
2153
  {
@@ -2192,7 +2208,7 @@
2192
2208
  "text": "Record<string, string | number | null | boolean>"
2193
2209
  },
2194
2210
  "default": "{}",
2195
- "description": "Required.\n\nLAPIS filter to select the displayed data.",
2211
+ "description": "LAPIS filter to select the displayed data. If not provided, all data is displayed.",
2196
2212
  "fieldName": "lapisFilter"
2197
2213
  },
2198
2214
  {
@@ -2388,7 +2404,7 @@
2388
2404
  "text": "{\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }\n | {\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }[]"
2389
2405
  },
2390
2406
  "default": "{ displayName: '', lapisFilter: {} }",
2391
- "description": "Required.\n\nEither a LAPIS filter or an array of LAPIS filters to fetch the number of sequences for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used to label the component views.\nIt should be human-readable.",
2407
+ "description": "Either a LAPIS filter or an array of LAPIS filters to fetch the number of sequences for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used to label the component views.\nIt should be human-readable.",
2392
2408
  "attribute": "lapisFilter"
2393
2409
  },
2394
2410
  {
@@ -2397,7 +2413,7 @@
2397
2413
  "type": {
2398
2414
  "text": "string"
2399
2415
  },
2400
- "default": "'date'",
2416
+ "default": "''",
2401
2417
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
2402
2418
  "attribute": "lapisDateField"
2403
2419
  },
@@ -2469,7 +2485,7 @@
2469
2485
  "text": "{\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }\n | {\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }[]"
2470
2486
  },
2471
2487
  "default": "{ displayName: '', lapisFilter: {} }",
2472
- "description": "Required.\n\nEither a LAPIS filter or an array of LAPIS filters to fetch the number of sequences for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used to label the component views.\nIt should be human-readable.",
2488
+ "description": "Either a LAPIS filter or an array of LAPIS filters to fetch the number of sequences for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used to label the component views.\nIt should be human-readable.",
2473
2489
  "fieldName": "lapisFilter"
2474
2490
  },
2475
2491
  {
@@ -2477,7 +2493,7 @@
2477
2493
  "type": {
2478
2494
  "text": "string"
2479
2495
  },
2480
- "default": "'date'",
2496
+ "default": "''",
2481
2497
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
2482
2498
  "fieldName": "lapisDateField"
2483
2499
  },
@@ -2682,8 +2698,8 @@
2682
2698
  "type": {
2683
2699
  "text": "{\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }\n | {\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }[]"
2684
2700
  },
2685
- "default": "{displayName: '', lapisFilter: {}}",
2686
- "description": "Required.\nEither a LAPIS filter or an array of LAPIS filters to calculate the prevalence for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used as the label the prevalence in the views.\nIt should be human-readable.",
2701
+ "default": "{ displayName: '', lapisFilter: {} }",
2702
+ "description": "Either a LAPIS filter or an array of LAPIS filters to calculate the prevalence for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used as the label the prevalence in the views.\nIt should be human-readable.",
2687
2703
  "attribute": "numeratorFilter"
2688
2704
  },
2689
2705
  {
@@ -2693,7 +2709,7 @@
2693
2709
  "text": "Record<string, string | number | null | boolean>"
2694
2710
  },
2695
2711
  "default": "{}",
2696
- "description": "Required.\n\nThe LAPIS filter, to select the data of the reference.\nIt must be a valid LAPIS filter object.",
2712
+ "description": "The LAPIS filter, to select the data of the reference.\nIt must be a valid LAPIS filter object.",
2697
2713
  "attribute": "denominatorFilter"
2698
2714
  },
2699
2715
  {
@@ -2762,7 +2778,7 @@
2762
2778
  "type": {
2763
2779
  "text": "string"
2764
2780
  },
2765
- "default": "'date'",
2781
+ "default": "''",
2766
2782
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
2767
2783
  "attribute": "lapisDateField"
2768
2784
  },
@@ -2803,8 +2819,8 @@
2803
2819
  "type": {
2804
2820
  "text": "{\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }\n | {\n lapisFilter: Record<string, string | number | null | boolean>;\n displayName: string;\n }[]"
2805
2821
  },
2806
- "default": "{displayName: '', lapisFilter: {}}",
2807
- "description": "Required.\nEither a LAPIS filter or an array of LAPIS filters to calculate the prevalence for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used as the label the prevalence in the views.\nIt should be human-readable.",
2822
+ "default": "{ displayName: '', lapisFilter: {} }",
2823
+ "description": "Either a LAPIS filter or an array of LAPIS filters to calculate the prevalence for.\n\nThe `lapisFilter` will be sent as is to LAPIS to select the data.\nIt must be a valid LAPIS filter object.\n\nThe `displayName` will be used as the label the prevalence in the views.\nIt should be human-readable.",
2808
2824
  "fieldName": "numeratorFilter"
2809
2825
  },
2810
2826
  {
@@ -2813,7 +2829,7 @@
2813
2829
  "text": "Record<string, string | number | null | boolean>"
2814
2830
  },
2815
2831
  "default": "{}",
2816
- "description": "Required.\n\nThe LAPIS filter, to select the data of the reference.\nIt must be a valid LAPIS filter object.",
2832
+ "description": "The LAPIS filter, to select the data of the reference.\nIt must be a valid LAPIS filter object.",
2817
2833
  "fieldName": "denominatorFilter"
2818
2834
  },
2819
2835
  {
@@ -2875,7 +2891,7 @@
2875
2891
  "type": {
2876
2892
  "text": "string"
2877
2893
  },
2878
- "default": "'date'",
2894
+ "default": "''",
2879
2895
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
2880
2896
  "fieldName": "lapisDateField"
2881
2897
  },
@@ -2990,7 +3006,7 @@
2990
3006
  "text": "Record<string, string | number | null | boolean>"
2991
3007
  },
2992
3008
  "default": "{}",
2993
- "description": "Required.\n\nLAPIS filter to select the data of the focal variant.\nIt must be a valid LAPIS filter object.",
3009
+ "description": "LAPIS filter to select the data of the focal variant.\nIt must be a valid LAPIS filter object.",
2994
3010
  "attribute": "numeratorFilter"
2995
3011
  },
2996
3012
  {
@@ -3000,7 +3016,7 @@
3000
3016
  "text": "Record<string, string | number | null | boolean>"
3001
3017
  },
3002
3018
  "default": "{}",
3003
- "description": "Required.\n\nLAPIS filter to select the data of the baseline variant.\nIt must be a valid LAPIS filter object.",
3019
+ "description": "LAPIS filter to select the data of the baseline variant.\nIt must be a valid LAPIS filter object.",
3004
3020
  "attribute": "denominatorFilter"
3005
3021
  },
3006
3022
  {
@@ -3049,7 +3065,7 @@
3049
3065
  "type": {
3050
3066
  "text": "string"
3051
3067
  },
3052
- "default": "'date'",
3068
+ "default": "''",
3053
3069
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
3054
3070
  "attribute": "lapisDateField"
3055
3071
  },
@@ -3081,7 +3097,7 @@
3081
3097
  "text": "Record<string, string | number | null | boolean>"
3082
3098
  },
3083
3099
  "default": "{}",
3084
- "description": "Required.\n\nLAPIS filter to select the data of the focal variant.\nIt must be a valid LAPIS filter object.",
3100
+ "description": "LAPIS filter to select the data of the focal variant.\nIt must be a valid LAPIS filter object.",
3085
3101
  "fieldName": "numeratorFilter"
3086
3102
  },
3087
3103
  {
@@ -3090,7 +3106,7 @@
3090
3106
  "text": "Record<string, string | number | null | boolean>"
3091
3107
  },
3092
3108
  "default": "{}",
3093
- "description": "Required.\n\nLAPIS filter to select the data of the baseline variant.\nIt must be a valid LAPIS filter object.",
3109
+ "description": "LAPIS filter to select the data of the baseline variant.\nIt must be a valid LAPIS filter object.",
3094
3110
  "fieldName": "denominatorFilter"
3095
3111
  },
3096
3112
  {
@@ -3134,7 +3150,7 @@
3134
3150
  "type": {
3135
3151
  "text": "string"
3136
3152
  },
3137
- "default": "'date'",
3153
+ "default": "''",
3138
3154
  "description": "Required.\n\nThe LAPIS field that the data should be aggregated by.\nThe values will be used on the x-axis of the diagram.\nMust be a field of type `date` in LAPIS.",
3139
3155
  "fieldName": "lapisDateField"
3140
3156
  },