@genspectrum/dashboard-components 0.17.1 → 0.18.0

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 (38) hide show
  1. package/custom-elements.json +3 -3
  2. package/dist/components.d.ts +15 -15
  3. package/dist/components.js +276 -3962
  4. package/dist/components.js.map +1 -1
  5. package/dist/style.css +2 -3687
  6. package/dist/util.d.ts +15 -15
  7. package/package.json +5 -5
  8. package/src/preact/aggregatedData/aggregate.tsx +3 -3
  9. package/src/preact/components/clearable-select.tsx +1 -1
  10. package/src/preact/components/color-scale-selector-dropdown.tsx +1 -1
  11. package/src/preact/components/confidence-interval-selector.tsx +1 -1
  12. package/src/preact/components/downshift-combobox.tsx +3 -3
  13. package/src/preact/components/fullscreen.tsx +6 -2
  14. package/src/preact/components/info.tsx +1 -1
  15. package/src/preact/components/mutation-type-selector.tsx +1 -1
  16. package/src/preact/components/percent-intput.tsx +3 -3
  17. package/src/preact/components/proportion-selector-dropdown.tsx +1 -1
  18. package/src/preact/components/scaling-selector.tsx +1 -1
  19. package/src/preact/components/select.tsx +1 -1
  20. package/src/preact/components/tabs.tsx +1 -1
  21. package/src/preact/dateRangeFilter/date-picker.tsx +1 -1
  22. package/src/preact/dateRangeFilter/date-range-filter.tsx +4 -4
  23. package/src/preact/mutationComparison/mutation-comparison.tsx +1 -1
  24. package/src/preact/mutations/mutations.tsx +2 -2
  25. package/src/preact/mutationsOverTime/mutations-over-time.tsx +1 -1
  26. package/src/preact/numberSequencesOverTime/number-sequences-over-time.tsx +1 -1
  27. package/src/preact/prevalenceOverTime/prevalence-over-time.tsx +1 -1
  28. package/src/preact/sequencesByLocation/sequences-by-location-map.tsx +1 -1
  29. package/src/preact/sequencesByLocation/sequences-by-location.tsx +3 -7
  30. package/src/styles/tailwind.css +14 -3
  31. package/src/web-components/input/gs-date-range-filter.stories.ts +2 -2
  32. package/src/web-components/input/gs-lineage-filter.stories.ts +1 -1
  33. package/src/web-components/input/gs-location-filter.stories.ts +1 -1
  34. package/src/web-components/input/gs-mutation-filter.stories.ts +1 -1
  35. package/src/web-components/input/gs-text-filter.stories.ts +1 -1
  36. package/standalone-bundle/dashboard-components.js +4279 -4280
  37. package/standalone-bundle/dashboard-components.js.map +1 -1
  38. package/standalone-bundle/style.css +1 -1
package/dist/util.d.ts CHANGED
@@ -906,7 +906,7 @@ declare global {
906
906
 
907
907
  declare global {
908
908
  interface HTMLElementTagNameMap {
909
- 'gs-mutations-component': MutationsComponent;
909
+ 'gs-prevalence-over-time': PrevalenceOverTimeComponent;
910
910
  }
911
911
  }
912
912
 
@@ -914,7 +914,7 @@ declare global {
914
914
  declare global {
915
915
  namespace JSX {
916
916
  interface IntrinsicElements {
917
- 'gs-mutations-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
917
+ 'gs-prevalence-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
918
918
  }
919
919
  }
920
920
  }
@@ -922,7 +922,7 @@ declare global {
922
922
 
923
923
  declare global {
924
924
  interface HTMLElementTagNameMap {
925
- 'gs-prevalence-over-time': PrevalenceOverTimeComponent;
925
+ 'gs-mutations-component': MutationsComponent;
926
926
  }
927
927
  }
928
928
 
@@ -930,7 +930,7 @@ declare global {
930
930
  declare global {
931
931
  namespace JSX {
932
932
  interface IntrinsicElements {
933
- 'gs-prevalence-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
933
+ 'gs-mutations-component': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
934
934
  }
935
935
  }
936
936
  }
@@ -970,7 +970,7 @@ declare global {
970
970
 
971
971
  declare global {
972
972
  interface HTMLElementTagNameMap {
973
- 'gs-mutations-over-time': MutationsOverTimeComponent;
973
+ 'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
974
974
  }
975
975
  }
976
976
 
@@ -978,7 +978,7 @@ declare global {
978
978
  declare global {
979
979
  namespace JSX {
980
980
  interface IntrinsicElements {
981
- 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
981
+ 'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
982
982
  }
983
983
  }
984
984
  }
@@ -986,7 +986,7 @@ declare global {
986
986
 
987
987
  declare global {
988
988
  interface HTMLElementTagNameMap {
989
- 'gs-number-sequences-over-time': NumberSequencesOverTimeComponent;
989
+ 'gs-mutations-over-time': MutationsOverTimeComponent;
990
990
  }
991
991
  }
992
992
 
@@ -994,7 +994,7 @@ declare global {
994
994
  declare global {
995
995
  namespace JSX {
996
996
  interface IntrinsicElements {
997
- 'gs-number-sequences-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
997
+ 'gs-mutations-over-time': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
998
998
  }
999
999
  }
1000
1000
  }
@@ -1050,11 +1050,10 @@ declare global {
1050
1050
 
1051
1051
  declare global {
1052
1052
  interface HTMLElementTagNameMap {
1053
- 'gs-date-range-filter': DateRangeFilterComponent;
1053
+ 'gs-location-filter': LocationFilterComponent;
1054
1054
  }
1055
1055
  interface HTMLElementEventMap {
1056
- 'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
1057
- 'gs-date-range-option-changed': DateRangeOptionChangedEvent;
1056
+ 'gs-location-changed': LocationChangedEvent;
1058
1057
  }
1059
1058
  }
1060
1059
 
@@ -1062,7 +1061,7 @@ declare global {
1062
1061
  declare global {
1063
1062
  namespace JSX {
1064
1063
  interface IntrinsicElements {
1065
- 'gs-date-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1064
+ 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1066
1065
  }
1067
1066
  }
1068
1067
  }
@@ -1070,10 +1069,11 @@ declare global {
1070
1069
 
1071
1070
  declare global {
1072
1071
  interface HTMLElementTagNameMap {
1073
- 'gs-location-filter': LocationFilterComponent;
1072
+ 'gs-date-range-filter': DateRangeFilterComponent;
1074
1073
  }
1075
1074
  interface HTMLElementEventMap {
1076
- 'gs-location-changed': LocationChangedEvent;
1075
+ 'gs-date-range-filter-changed': CustomEvent<Record<string, string>>;
1076
+ 'gs-date-range-option-changed': DateRangeOptionChangedEvent;
1077
1077
  }
1078
1078
  }
1079
1079
 
@@ -1081,7 +1081,7 @@ declare global {
1081
1081
  declare global {
1082
1082
  namespace JSX {
1083
1083
  interface IntrinsicElements {
1084
- 'gs-location-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1084
+ 'gs-date-range-filter': DetailedHTMLProps<HTMLAttributes<HTMLElement>, HTMLElement>;
1085
1085
  }
1086
1086
  }
1087
1087
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genspectrum/dashboard-components",
3
- "version": "0.17.1",
3
+ "version": "0.18.0",
4
4
  "description": "GenSpectrum web components for building dashboards",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-only",
@@ -102,7 +102,7 @@
102
102
  "@custom-elements-manifest/analyzer": "^0.10.2",
103
103
  "@iconify-json/mdi": "^1.1.67",
104
104
  "@iconify-json/mdi-light": "^1.1.10",
105
- "@iconify/tailwind": "^1.1.2",
105
+ "@iconify/tailwind4": "^1.0.6",
106
106
  "@playwright/test": "^1.43.1",
107
107
  "@storybook/addon-actions": "^8.0.9",
108
108
  "@storybook/addon-essentials": "^8.0.9",
@@ -116,7 +116,7 @@
116
116
  "@storybook/types": "^8.0.9",
117
117
  "@storybook/web-components": "^8.0.9",
118
118
  "@storybook/web-components-vite": "^8.0.9",
119
- "@tailwindcss/container-queries": "^0.1.1",
119
+ "@tailwindcss/postcss": "^4.0.9",
120
120
  "@testing-library/preact": "^3.2.4",
121
121
  "@types/geojson": "^7946.0.15",
122
122
  "@types/leaflet": "^1.9.15",
@@ -126,7 +126,7 @@
126
126
  "@typescript-eslint/eslint-plugin": "^8.2.0",
127
127
  "@typescript-eslint/parser": "^8.2.0",
128
128
  "autoprefixer": "^10.4.19",
129
- "daisyui": "^4.10.2",
129
+ "daisyui": "^5.0.0",
130
130
  "depcheck": "^1.4.7",
131
131
  "eslint": "^8.57.0",
132
132
  "eslint-config-preact": "^1.3.0",
@@ -142,7 +142,7 @@
142
142
  "react": "^18.3.1",
143
143
  "storybook": "^8.0.9",
144
144
  "storybook-addon-fetch-mock": "^2.0.0",
145
- "tailwindcss": "^3.4.3",
145
+ "tailwindcss": "^4.0.9",
146
146
  "typescript": "~5.7.2",
147
147
  "vite": "^6.0.3",
148
148
  "vite-plugin-dts": "^4.0.3",
@@ -119,11 +119,11 @@ type ToolbarProps = {
119
119
 
120
120
  const Toolbar: FunctionComponent<ToolbarProps> = ({ data, originalComponentProps }) => {
121
121
  return (
122
- <div class='flex flex-row'>
123
- <CsvDownloadButton className='mx-1 btn btn-xs' getData={() => data} filename='aggregate.csv' />
122
+ <>
123
+ <CsvDownloadButton className='btn btn-xs' getData={() => data} filename='aggregate.csv' />
124
124
  <AggregateInfo originalComponentProps={originalComponentProps} />
125
125
  <Fullscreen />
126
- </div>
126
+ </>
127
127
  );
128
128
  };
129
129
 
@@ -50,7 +50,7 @@ export function ClearableSelect({
50
50
  return (
51
51
  <div className={`relative inline min-w-24 ${className}`}>
52
52
  <select
53
- className={`w-full select select-bordered pr-14 ${selectClassName}`}
53
+ className={`w-full select pr-14 ${selectClassName}`}
54
54
  value={selectedOption ?? undefinedValue}
55
55
  onChange={handleChange}
56
56
  >
@@ -10,7 +10,7 @@ export const ColorScaleSelectorDropdown: FunctionComponent<ColorScaleSelectorDro
10
10
  setColorScale,
11
11
  }) => {
12
12
  return (
13
- <div className='w-20'>
13
+ <div className='w-20 inline-flex'>
14
14
  <Dropdown buttonTitle={`Color scale`} placement={'bottom-start'}>
15
15
  <ColorScaleSelector colorScale={colorScale} setColorScale={setColorScale} />
16
16
  </Dropdown>
@@ -39,7 +39,7 @@ export const ConfidenceIntervalSelector: FunctionComponent<ConfidenceIntervalSel
39
39
  const value = select.value as ConfidenceIntervalMethod;
40
40
  setConfidenceIntervalMethod(value);
41
41
  }}
42
- selectStyle={'select-xs select-bordered'}
42
+ selectStyle={'select-xs'}
43
43
  />
44
44
  );
45
45
  };
@@ -91,7 +91,7 @@ export function DownshiftCombobox<Item>({
91
91
  <div ref={divRef} className={'relative w-full'}>
92
92
  <div className='w-full flex flex-col gap-1'>
93
93
  <div
94
- className={`flex gap-0.5 input input-bordered min-w-32 ${inputClassName}`}
94
+ className={`flex gap-0.5 input min-w-32 w-full ${inputClassName}`}
95
95
  onBlur={(event) => {
96
96
  if (event.relatedTarget != buttonRef.current) {
97
97
  closeMenu();
@@ -131,7 +131,7 @@ export function DownshiftCombobox<Item>({
131
131
  {items.length > 0 ? (
132
132
  items.map((item, index) => (
133
133
  <li
134
- className={`${highlightedIndex === index ? 'bg-blue-300' : ''} ${selectedItem !== null && itemToString(selectedItem) === itemToString(item) ? 'font-bold' : ''} py-2 px-3 shadow-sm`}
134
+ className={`${highlightedIndex === index ? 'bg-blue-300' : ''} ${selectedItem !== null && itemToString(selectedItem) === itemToString(item) ? 'font-bold' : ''} py-2 px-3 shadow-xs`}
135
135
  key={itemToString(item)}
136
136
  {...getItemProps({ item, index })}
137
137
  >
@@ -139,7 +139,7 @@ export function DownshiftCombobox<Item>({
139
139
  </li>
140
140
  ))
141
141
  ) : (
142
- <li className='py-2 px-3 shadow-sm'>No elements to select.</li>
142
+ <li className='py-2 px-3 shadow-xs'>No elements to select.</li>
143
143
  )}
144
144
  </ul>
145
145
  </div>
@@ -18,9 +18,13 @@ export const Fullscreen = () => {
18
18
  }
19
19
  }
20
20
  }}
21
- className={`mt-0.5 iconify text-2xl ${isFullscreen ? 'mdi--fullscreen-exit hover:scale-90' : 'mdi--fullscreen hover:scale-110'}`}
21
+ className={`btn btn-xs`}
22
22
  title={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}
23
- />
23
+ >
24
+ <div
25
+ className={`iconify text-2xl ${isFullscreen ? 'mdi--fullscreen-exit hover:scale-90' : 'mdi--fullscreen hover:scale-110'}`}
26
+ />
27
+ </button>
24
28
  );
25
29
  };
26
30
 
@@ -4,7 +4,7 @@ import { Modal } from './modal';
4
4
 
5
5
  const Info: FunctionComponent = ({ children }) => {
6
6
  return (
7
- <div className='relative'>
7
+ <div className='relative inline-flex'>
8
8
  <Modal buttonClassName='btn btn-xs' modalContent={children}>
9
9
  ?
10
10
  </Modal>
@@ -17,7 +17,7 @@ export const MutationTypeSelector: FunctionComponent<MutationTypeSelectorProps>
17
17
  setDisplayedMutationTypes,
18
18
  }) => {
19
19
  return (
20
- <div className='w-[6rem]'>
20
+ <div className='w-[6rem] inline-flex'>
21
21
  <CheckboxSelector
22
22
  items={displayedMutationTypes}
23
23
  label={getMutationTypesSelectorLabel(displayedMutationTypes)}
@@ -40,7 +40,8 @@ export const PercentInput: FunctionComponent<PercentInputProps> = ({
40
40
 
41
41
  const isError = indicateError || !percentageInRange(internalPercentage);
42
42
  return (
43
- <label className={`input input-bordered flex items-center gap-2 w-32 ${isError ? 'input-error' : ''}`}>
43
+ <label className={`input flex items-center w-32 ${isError ? 'input-error' : ''}`}>
44
+ <span className='label'>%</span>
44
45
  <input
45
46
  type='number'
46
47
  step={0.1}
@@ -49,9 +50,8 @@ export const PercentInput: FunctionComponent<PercentInputProps> = ({
49
50
  value={internalPercentage}
50
51
  onInput={handleInputChange}
51
52
  lang='en'
52
- className={`grow w-16`}
53
+ className={`grow w-12`}
53
54
  />
54
- %
55
55
  </label>
56
56
  );
57
57
  };
@@ -16,7 +16,7 @@ export const ProportionSelectorDropdown: FunctionComponent<ProportionSelectorDro
16
16
  const width = 'w-[calc(1.5 * var(--tw-space-x-reverse) + 1.5 * var(--tw-space-x))]';
17
17
 
18
18
  return (
19
- <div className={width}>
19
+ <div className={`${width} inline-flex`}>
20
20
  <Dropdown buttonTitle={`${labelPrefix} ${percentLabel}`} placement={'bottom-start'}>
21
21
  <ProportionSelector
22
22
  proportionInterval={proportionInterval}
@@ -36,7 +36,7 @@ export const ScalingSelector: FunctionComponent<ScalingSelectorProps> = ({
36
36
  const value = select.value as ScaleType;
37
37
  setYAxisScaleType(value);
38
38
  }}
39
- selectStyle={`${className} select-xs select-bordered`}
39
+ selectStyle={`${className ?? ''} select-xs`}
40
40
  />
41
41
  );
42
42
  };
@@ -10,7 +10,7 @@ export interface SelectProps {
10
10
 
11
11
  export const Select: FunctionComponent<SelectProps> = ({ items, selected, onChange, selectStyle }) => {
12
12
  return (
13
- <select class={`select select-bordered ${selectStyle}`} value={selected} onChange={onChange}>
13
+ <select class={`select ${selectStyle} w-fit`} value={selected} onChange={onChange}>
14
14
  {items.map((item) => (
15
15
  <option key={item.value} value={item.value} disabled={item.disabled}>
16
16
  {item.label}
@@ -45,7 +45,7 @@ const Tabs: FunctionComponent<ComponentTabsProps> = ({ tabs, toolbar }) => {
45
45
  {tabElements}
46
46
  {toolbar && <div className='py-2 flex flex-wrap gap-y-1'>{toolbarElement}</div>}
47
47
  </div>
48
- <div className={`p-2 flex-grow overflow-scroll border-2 border-gray-100 rounded-b-md rounded-tr-md`}>
48
+ <div className={`p-2 grow overflow-scroll border-2 border-gray-100 rounded-b-md rounded-tr-md`}>
49
49
  {tabs.map((tab) => (
50
50
  <div className='h-full' key={tab.title} hidden={activeTab !== tab.title}>
51
51
  {tab.content}
@@ -55,7 +55,7 @@ export function DatePicker({
55
55
 
56
56
  return (
57
57
  <input
58
- className={`input input-bordered w-full ${className}`}
58
+ className={`input w-full ${className}`}
59
59
  type='text'
60
60
  placeholder={placeholderText}
61
61
  ref={inputRef}
@@ -193,7 +193,7 @@ export const DateRangeFilterInner = ({
193
193
  return (
194
194
  <div className={'@container'} ref={divRef}>
195
195
  <div className='flex min-w-[7.5rem] flex-col @md:flex-row'>
196
- <div className='flex-grow'>
196
+ <div className='grow'>
197
197
  <ClearableSelect
198
198
  items={options.map((item) => item.label)}
199
199
  placeholderText={placeholder}
@@ -205,9 +205,9 @@ export const DateRangeFilterInner = ({
205
205
  selectClassName={'rounded-t-md rounded-b-none @md:rounded-l-md @md:rounded-r-none'}
206
206
  />
207
207
  </div>
208
- <div className={'flex flex-grow flex-col @4xs:flex-row'}>
208
+ <div className={'flex grow flex-col @4xs:flex-row'}>
209
209
  <DatePicker
210
- className={'flex-grow min-w-[7.5rem] @4xs:rounded-bl-md @md:rounded-l-none rounded-none'}
210
+ className={'grow min-w-[7.5rem] @4xs:rounded-bl-md @md:rounded-l-none rounded-none'}
211
211
  value={state?.dateFrom}
212
212
  onChange={onChangeDateFrom}
213
213
  maxDate={state?.dateTo}
@@ -215,7 +215,7 @@ export const DateRangeFilterInner = ({
215
215
  />
216
216
  <DatePicker
217
217
  className={
218
- 'flex-grow min-w-[7.5rem] rounded-b-md rounded-t-none @4xs:rounded-tr-none @4xs:rounded-l-none @md:rounded-r-md '
218
+ 'grow min-w-[7.5rem] rounded-b-md rounded-t-none @4xs:rounded-tr-none @4xs:rounded-l-none @md:rounded-r-md '
219
219
  }
220
220
  value={state?.dateTo}
221
221
  onChange={onChangeDateTo}
@@ -178,7 +178,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
178
178
  setDisplayedMutationTypes={setDisplayedMutationTypes}
179
179
  />
180
180
  <CsvDownloadButton
181
- className='mx-1 btn btn-xs'
181
+ className='btn btn-xs'
182
182
  getData={() => getMutationComparisonTableData({ content: filteredData }, proportionInterval)}
183
183
  filename='mutation_comparison.csv'
184
184
  />
@@ -200,7 +200,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
200
200
  setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}
201
201
  />
202
202
  <CsvDownloadButton
203
- className='mx-1 btn btn-xs'
203
+ className='btn btn-xs'
204
204
  getData={() =>
205
205
  getMutationsTableData(
206
206
  filteredData.tableData,
@@ -215,7 +215,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
215
215
  )}
216
216
  {activeTab === 'Insertions' && (
217
217
  <CsvDownloadButton
218
- className='mx-1 btn btn-xs'
218
+ className='btn btn-xs'
219
219
  getData={() =>
220
220
  getInsertionsTableData(filteredData.insertions).map((row) => {
221
221
  return {
@@ -240,7 +240,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
240
240
  labelPrefix='Mean proportion'
241
241
  />
242
242
  <CsvDownloadButton
243
- className='mx-1 btn btn-xs'
243
+ className='btn btn-xs'
244
244
  getData={() => getDownloadData(filteredData)}
245
245
  filename='mutations_over_time.csv'
246
246
  />
@@ -167,7 +167,7 @@ const Toolbar = ({ activeTab, data, yAxisScaleType, setYAxisScaleType, originalC
167
167
  />
168
168
  )}
169
169
  <CsvDownloadButton
170
- className='mx-1 btn btn-xs'
170
+ className='btn btn-xs'
171
171
  getData={() => getNumberOfSequencesOverTimeTableData(data, originalComponentProps.granularity)}
172
172
  filename='number_of_sequences_over_time.csv'
173
173
  />
@@ -218,7 +218,7 @@ const Toolbar: FunctionComponent<ToolbarProps> = ({
218
218
  />
219
219
  )}
220
220
  <CsvDownloadButton
221
- className='mx-1 btn btn-xs'
221
+ className='btn btn-xs'
222
222
  getData={() => getPrevalenceOverTimeTableData(data, granularity)}
223
223
  filename='prevalence_over_time.csv'
224
224
  />
@@ -106,7 +106,7 @@ const DataMatchInformation: FunctionComponent<DataMatchInformationProps> = ({
106
106
 
107
107
  return (
108
108
  <Modal
109
- buttonClassName='text-sm absolute bottom-0 px-1 z-[1001] bg-white rounded border'
109
+ buttonClassName='text-sm absolute bottom-0 px-1 z-1001 bg-white rounded-sm border border-gray-200'
110
110
  modalContent={
111
111
  <>
112
112
  <InfoHeadline1>Sequences By Location - Map View</InfoHeadline1>
@@ -149,15 +149,11 @@ type ToolbarProps = {
149
149
 
150
150
  const Toolbar: FunctionComponent<ToolbarProps> = ({ originalComponentProps, tableData }) => {
151
151
  return (
152
- <div class='flex flex-row'>
153
- <CsvDownloadButton
154
- className='mx-1 btn btn-xs'
155
- getData={() => tableData}
156
- filename='sequences_by_location.csv'
157
- />
152
+ <>
153
+ <CsvDownloadButton className='btn btn-xs' getData={() => tableData} filename='sequences_by_location.csv' />
158
154
  <SequencesByLocationMapInfo originalComponentProps={originalComponentProps} />
159
155
  <Fullscreen />
160
- </div>
156
+ </>
161
157
  );
162
158
  };
163
159
 
@@ -1,3 +1,14 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
1
+ @import 'tailwindcss';
2
+
3
+ @plugin "daisyui" {
4
+ themes: light --default;
5
+ }
6
+ @plugin "@iconify/tailwind4" {
7
+ prefixes: mdi, mdi-light;
8
+ }
9
+
10
+ @theme {
11
+ --container-2xs: 18rem;
12
+ --container-3xs: 16rem;
13
+ --container-4xs: 14rem;
14
+ }
@@ -78,7 +78,7 @@ export default meta;
78
78
  export const Default: StoryObj<Required<DateRangeFilterProps>> = {
79
79
  render: (args) =>
80
80
  html` <gs-app lapis="${LAPIS_URL}">
81
- <div class="max-w-screen-lg">
81
+ <div class="max-w-(--breakpoint-lg)">
82
82
  <gs-date-range-filter
83
83
  .dateRangeOptions=${args.dateRangeOptions}
84
84
  .earliestDate=${args.earliestDate}
@@ -94,7 +94,7 @@ export const Default: StoryObj<Required<DateRangeFilterProps>> = {
94
94
  export const TestRenderAttributesInHtmlInsteadOfUsingPropertyExpression: StoryObj<Required<DateRangeFilterProps>> = {
95
95
  render: (args) =>
96
96
  html` <gs-app lapis="${LAPIS_URL}">
97
- <div class="max-w-screen-lg">
97
+ <div class="max-w-(--breakpoint-lg)">
98
98
  <gs-date-range-filter
99
99
  .dateRangeOptions=${args.dateRangeOptions}
100
100
  earliestDate="${args.earliestDate}"
@@ -87,7 +87,7 @@ export default meta;
87
87
  const Template: StoryObj<Required<LineageFilterProps>> = {
88
88
  render: (args) => {
89
89
  return html` <gs-app lapis="${LAPIS_URL}">
90
- <div class="max-w-screen-lg">
90
+ <div class="max-w-(--breakpoint-lg)">
91
91
  <gs-lineage-filter
92
92
  .lapisField=${args.lapisField}
93
93
  .lapisFilter=${args.lapisFilter}
@@ -67,7 +67,7 @@ export default meta;
67
67
  const Template: StoryObj<LocationFilterProps> = {
68
68
  render: (args) => {
69
69
  return html` <gs-app lapis="${LAPIS_URL}">
70
- <div class="max-w-screen-lg">
70
+ <div class="max-w-(--breakpoint-lg)">
71
71
  <gs-location-filter
72
72
  .fields=${args.fields}
73
73
  .lapisFilter=${args.lapisFilter}
@@ -46,7 +46,7 @@ export default meta;
46
46
  const Template: StoryObj<MutationFilterProps> = {
47
47
  render: (args) => {
48
48
  return html` <gs-app lapis="${LAPIS_URL}">
49
- <div class="max-w-screen-lg">
49
+ <div class="max-w-(--breakpoint-lg)">
50
50
  <gs-mutation-filter .initialValue=${args.initialValue} .width=${args.width}></gs-mutation-filter>
51
51
  </div>
52
52
  </gs-app>`;
@@ -86,7 +86,7 @@ export default meta;
86
86
  export const Default: StoryObj<Required<TextFilterProps>> = {
87
87
  render: (args) => {
88
88
  return html` <gs-app lapis="${LAPIS_URL}">
89
- <div class="max-w-screen-lg">
89
+ <div class="max-w-(--breakpoint-lg)">
90
90
  <gs-text-filter
91
91
  .lapisField=${args.lapisField}
92
92
  .lapisFilter=${args.lapisFilter}