@genspectrum/dashboard-components 0.19.8 → 0.20.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 (28) hide show
  1. package/custom-elements.json +32 -14
  2. package/dist/{NumberRangeFilterChangedEvent-RZ8haPHq.js → NumberRangeFilterChangedEvent-RqWinxhE.js} +50 -41
  3. package/dist/NumberRangeFilterChangedEvent-RqWinxhE.js.map +1 -0
  4. package/dist/assets/mutationOverTimeWorker-BzmkceEA.js.map +1 -0
  5. package/dist/components.d.ts +35 -35
  6. package/dist/components.js +5 -7
  7. package/dist/components.js.map +1 -1
  8. package/dist/util.d.ts +46 -64
  9. package/dist/util.js +1 -1
  10. package/package.json +1 -1
  11. package/src/preact/dateRangeFilter/date-range-filter.stories.tsx +3 -3
  12. package/src/preact/dateRangeFilter/dateRangeOption.ts +71 -45
  13. package/src/web-components/input/gs-date-range-filter.stories.ts +4 -4
  14. package/src/web-components/input/introduction.mdx +57 -2
  15. package/src/web-components/tutorials/CreateYourFirstOwnDashboard.mdx +85 -0
  16. package/src/web-components/tutorials/UseTheComponentsWithPlainJavaScript.mdx +140 -0
  17. package/src/web-components/tutorials/UseTheComponentsWithReact.mdx +166 -0
  18. package/src/web-components/visualization/gs-mutations.tsx +2 -2
  19. package/src/web-components/visualization/introduction.mdx +51 -0
  20. package/standalone-bundle/assets/mutationOverTimeWorker-jUeItsGM.js.map +1 -0
  21. package/standalone-bundle/dashboard-components.js +7088 -7112
  22. package/standalone-bundle/dashboard-components.js.map +1 -1
  23. package/dist/NumberRangeFilterChangedEvent-RZ8haPHq.js.map +0 -1
  24. package/dist/assets/mutationOverTimeWorker-CBXsEsiT.js.map +0 -1
  25. package/src/web-components/visualization/data_visualization_statistical_analysis.mdx +0 -26
  26. package/standalone-bundle/assets/mutationOverTimeWorker-CN4SJC7C.js.map +0 -1
  27. /package/src/web-components/{MutationAnnotations.mdx → mutationAnnotations.mdx} +0 -0
  28. /package/src/web-components/{ResizeContainer.mdx → sizeOfComponents.mdx} +0 -0
@@ -2,12 +2,6 @@
2
2
  "schemaVersion": "1.0.0",
3
3
  "readme": "",
4
4
  "modules": [
5
- {
6
- "kind": "javascript-module",
7
- "path": "src/web-components/MutationAnnotations.mdx",
8
- "declarations": [],
9
- "exports": []
10
- },
11
5
  {
12
6
  "kind": "javascript-module",
13
7
  "path": "src/web-components/PreactLitAdapter.tsx",
@@ -60,12 +54,6 @@
60
54
  }
61
55
  ]
62
56
  },
63
- {
64
- "kind": "javascript-module",
65
- "path": "src/web-components/ResizeContainer.mdx",
66
- "declarations": [],
67
- "exports": []
68
- },
69
57
  {
70
58
  "kind": "javascript-module",
71
59
  "path": "src/web-components/errorHandling.mdx",
@@ -337,7 +325,7 @@
337
325
  "type": {
338
326
  "text": "Meta<Required<DateRangeFilterProps>>"
339
327
  },
340
- "default": "{ title: 'Input/DateRangeFilter', component: 'gs-date-range-filter', parameters: withComponentDocs({ actions: { handles: [gsEventNames.dateRangeFilterChanged, gsEventNames.dateRangeOptionChanged, ...previewHandles], }, fetchMock: {}, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { value: { control: { type: 'object' }, }, lapisDateField: { control: { type: 'text' } }, dateRangeOptions: { control: { type: 'object' }, }, earliestDate: { control: { type: 'text' }, }, width: { control: { type: 'text' }, }, placeholder: { control: { type: 'text' }, }, }, args: { dateRangeOptions: [ dateRangeOptionPresets.lastMonth, dateRangeOptionPresets.last3Months, dateRangeOptionPresets.allTimes, { label: '2021', dateFrom: '2021-01-01', dateTo: '2021-12-31' }, customDateRange, ], earliestDate: '1970-01-01', value: dateRangeOptionPresets.lastMonth.label, lapisDateField: 'aDateColumn', width: '100%', placeholder: 'Date range', }, tags: ['autodocs'], }"
328
+ "default": "{ title: 'Input/DateRangeFilter', component: 'gs-date-range-filter', parameters: withComponentDocs({ actions: { handles: [gsEventNames.dateRangeFilterChanged, gsEventNames.dateRangeOptionChanged, ...previewHandles], }, fetchMock: {}, componentDocs: { opensShadowDom: true, expectsChildren: false, codeExample, }, }), argTypes: { value: { control: { type: 'object' }, }, lapisDateField: { control: { type: 'text' } }, dateRangeOptions: { control: { type: 'object' }, }, earliestDate: { control: { type: 'text' }, }, width: { control: { type: 'text' }, }, placeholder: { control: { type: 'text' }, }, }, args: { dateRangeOptions: [ dateRangeOptionPresets().lastMonth, dateRangeOptionPresets().last3Months, dateRangeOptionPresets().allTimes, { label: '2021', dateFrom: '2021-01-01', dateTo: '2021-12-31' }, customDateRange, ], earliestDate: '1970-01-01', value: dateRangeOptionPresets().lastMonth.label, lapisDateField: 'aDateColumn', width: '100%', placeholder: 'Date range', }, tags: ['autodocs'], }"
341
329
  },
342
330
  {
343
331
  "kind": "variable",
@@ -1737,6 +1725,12 @@
1737
1725
  }
1738
1726
  ]
1739
1727
  },
1728
+ {
1729
+ "kind": "javascript-module",
1730
+ "path": "src/web-components/mutationAnnotations.mdx",
1731
+ "declarations": [],
1732
+ "exports": []
1733
+ },
1740
1734
  {
1741
1735
  "kind": "javascript-module",
1742
1736
  "path": "src/web-components/reference-genome-context.ts",
@@ -1759,7 +1753,25 @@
1759
1753
  },
1760
1754
  {
1761
1755
  "kind": "javascript-module",
1762
- "path": "src/web-components/visualization/data_visualization_statistical_analysis.mdx",
1756
+ "path": "src/web-components/sizeOfComponents.mdx",
1757
+ "declarations": [],
1758
+ "exports": []
1759
+ },
1760
+ {
1761
+ "kind": "javascript-module",
1762
+ "path": "src/web-components/tutorials/CreateYourFirstOwnDashboard.mdx",
1763
+ "declarations": [],
1764
+ "exports": []
1765
+ },
1766
+ {
1767
+ "kind": "javascript-module",
1768
+ "path": "src/web-components/tutorials/UseTheComponentsWithPlainJavaScript.mdx",
1769
+ "declarations": [],
1770
+ "exports": []
1771
+ },
1772
+ {
1773
+ "kind": "javascript-module",
1774
+ "path": "src/web-components/tutorials/UseTheComponentsWithReact.mdx",
1763
1775
  "declarations": [],
1764
1776
  "exports": []
1765
1777
  },
@@ -4707,6 +4719,12 @@
4707
4719
  }
4708
4720
  ]
4709
4721
  },
4722
+ {
4723
+ "kind": "javascript-module",
4724
+ "path": "src/web-components/visualization/introduction.mdx",
4725
+ "declarations": [],
4726
+ "exports": []
4727
+ },
4710
4728
  {
4711
4729
  "kind": "javascript-module",
4712
4730
  "path": "src/web-components/wastewaterVisualization/gs-wastewater-mutations-over-time.spec-d.ts",
@@ -74,47 +74,56 @@ class DateRangeOptionChangedEvent extends CustomEvent {
74
74
  });
75
75
  }
76
76
  }
77
- const today = /* @__PURE__ */ new Date();
78
- const twoWeeksAgo = /* @__PURE__ */ new Date();
79
- twoWeeksAgo.setDate(today.getDate() - 14);
80
- const lastMonth = new Date(today);
81
- lastMonth.setMonth(today.getMonth() - 1);
82
- const last2Months = new Date(today);
83
- last2Months.setMonth(today.getMonth() - 2);
84
- const last3Months = new Date(today);
85
- last3Months.setMonth(today.getMonth() - 3);
86
- const last6Months = new Date(today);
87
- last6Months.setMonth(today.getMonth() - 6);
88
- const lastYear = new Date(today);
89
- lastYear.setFullYear(today.getFullYear() - 1);
90
- const dateRangeOptionPresets = {
91
- last2Weeks: {
92
- label: "Last 2 weeks",
93
- dateFrom: toYYYYMMDD(twoWeeksAgo)
94
- },
95
- lastMonth: {
96
- label: "Last month",
97
- dateFrom: toYYYYMMDD(lastMonth)
98
- },
99
- last2Months: {
100
- label: "Last 2 months",
101
- dateFrom: toYYYYMMDD(last2Months)
102
- },
103
- last3Months: {
104
- label: "Last 3 months",
105
- dateFrom: toYYYYMMDD(last3Months)
106
- },
107
- last6Months: {
108
- label: "Last 6 months",
109
- dateFrom: toYYYYMMDD(last6Months)
110
- },
111
- lastYear: {
112
- label: "Last year",
113
- dateFrom: toYYYYMMDD(lastYear)
114
- },
115
- allTimes: {
116
- label: "All times"
77
+ let dateRangeOptionsPresetsCacheDate = null;
78
+ let dateRangeOptionPresetsCache = null;
79
+ const dateRangeOptionPresets = () => {
80
+ const today = /* @__PURE__ */ new Date();
81
+ const todayString = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
82
+ if (dateRangeOptionPresetsCache === null || dateRangeOptionsPresetsCacheDate === null || dateRangeOptionsPresetsCacheDate !== todayString) {
83
+ dateRangeOptionsPresetsCacheDate = todayString;
84
+ const twoWeeksAgo = /* @__PURE__ */ new Date();
85
+ twoWeeksAgo.setDate(today.getDate() - 14);
86
+ const lastMonth = new Date(today);
87
+ lastMonth.setMonth(today.getMonth() - 1);
88
+ const last2Months = new Date(today);
89
+ last2Months.setMonth(today.getMonth() - 2);
90
+ const last3Months = new Date(today);
91
+ last3Months.setMonth(today.getMonth() - 3);
92
+ const last6Months = new Date(today);
93
+ last6Months.setMonth(today.getMonth() - 6);
94
+ const lastYear = new Date(today);
95
+ lastYear.setFullYear(today.getFullYear() - 1);
96
+ dateRangeOptionPresetsCache = {
97
+ last2Weeks: {
98
+ label: "Last 2 weeks",
99
+ dateFrom: toYYYYMMDD(twoWeeksAgo)
100
+ },
101
+ lastMonth: {
102
+ label: "Last month",
103
+ dateFrom: toYYYYMMDD(lastMonth)
104
+ },
105
+ last2Months: {
106
+ label: "Last 2 months",
107
+ dateFrom: toYYYYMMDD(last2Months)
108
+ },
109
+ last3Months: {
110
+ label: "Last 3 months",
111
+ dateFrom: toYYYYMMDD(last3Months)
112
+ },
113
+ last6Months: {
114
+ label: "Last 6 months",
115
+ dateFrom: toYYYYMMDD(last6Months)
116
+ },
117
+ lastYear: {
118
+ label: "Last year",
119
+ dateFrom: toYYYYMMDD(lastYear)
120
+ },
121
+ allTimes: {
122
+ label: "All times"
123
+ }
124
+ };
117
125
  }
126
+ return dateRangeOptionPresetsCache;
118
127
  };
119
128
  class LocationChangedEvent extends CustomEvent {
120
129
  constructor(detail) {
@@ -186,4 +195,4 @@ export {
186
195
  temporalGranularitySchema as t,
187
196
  views as v
188
197
  };
189
- //# sourceMappingURL=NumberRangeFilterChangedEvent-RZ8haPHq.js.map
198
+ //# sourceMappingURL=NumberRangeFilterChangedEvent-RqWinxhE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberRangeFilterChangedEvent-RqWinxhE.js","sources":["../src/utils/gsEventNames.ts","../src/types.ts","../src/preact/dateRangeFilter/dateConversion.ts","../src/preact/dateRangeFilter/dateRangeOption.ts","../src/preact/locationFilter/LocationChangedEvent.ts","../src/preact/textFilter/TextFilterChangedEvent.ts","../src/preact/lineageFilter/LineageFilterChangedEvent.ts","../src/preact/numberRangeFilter/NumberRangeFilterChangedEvent.ts"],"sourcesContent":["export const gsEventNames = {\n error: 'gs-error',\n componentFinishedLoading: 'gs-component-finished-loading',\n dateRangeFilterChanged: 'gs-date-range-filter-changed',\n dateRangeOptionChanged: 'gs-date-range-option-changed',\n mutationFilterChanged: 'gs-mutation-filter-changed',\n lineageFilterChanged: 'gs-lineage-filter-changed',\n locationChanged: 'gs-location-changed',\n textFilterChanged: 'gs-text-filter-changed',\n numberRangeFilterChanged: 'gs-number-range-filter-changed',\n numberRangeValueChanged: 'gs-number-range-value-changed',\n} as const;\n","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 lapisLocationFilterSchema = z.record(z.union([z.string(), z.undefined()]));\nexport type LapisLocationFilter = z.infer<typeof lapisLocationFilterSchema>;\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';\nimport { gsEventNames } from '../../utils/gsEventNames';\n\n/**\n * A date range option that can be used in the `gs-date-range-filter` 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 const dateRangeValueSchema = z\n .union([\n z.string(),\n z.object({\n dateFrom: z.string().date().optional(),\n dateTo: z.string().date().optional(),\n }),\n ])\n .nullable();\n\nexport type DateRangeValue = z.infer<typeof dateRangeValueSchema>;\n\nexport class DateRangeOptionChangedEvent extends CustomEvent<DateRangeValue> {\n constructor(detail: DateRangeValue) {\n super(gsEventNames.dateRangeOptionChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n\ntype DateRangeOptionPresets = {\n last2Weeks: DateRangeOption;\n lastMonth: DateRangeOption;\n last2Months: DateRangeOption;\n last3Months: DateRangeOption;\n last6Months: DateRangeOption;\n lastYear: DateRangeOption;\n allTimes: DateRangeOption;\n};\n\nlet dateRangeOptionsPresetsCacheDate: string | null = null;\nlet dateRangeOptionPresetsCache: DateRangeOptionPresets | null = null;\n\n/**\n * Presets for the `gs-date-range-filter` component that can be used as `dateRangeOptions`.\n */\nexport const dateRangeOptionPresets = (): DateRangeOptionPresets => {\n const today = new Date();\n const todayString = new Date().toISOString().slice(0, 10);\n\n if (\n dateRangeOptionPresetsCache === null ||\n dateRangeOptionsPresetsCacheDate === null ||\n dateRangeOptionsPresetsCacheDate !== todayString\n ) {\n dateRangeOptionsPresetsCacheDate = todayString;\n\n const twoWeeksAgo = new Date();\n twoWeeksAgo.setDate(today.getDate() - 14);\n\n const lastMonth = new Date(today);\n lastMonth.setMonth(today.getMonth() - 1);\n\n const last2Months = new Date(today);\n last2Months.setMonth(today.getMonth() - 2);\n\n const last3Months = new Date(today);\n last3Months.setMonth(today.getMonth() - 3);\n\n const last6Months = new Date(today);\n last6Months.setMonth(today.getMonth() - 6);\n\n const lastYear = new Date(today);\n lastYear.setFullYear(today.getFullYear() - 1);\n\n dateRangeOptionPresetsCache = {\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 };\n }\n\n return dateRangeOptionPresetsCache;\n};\n","import { type LapisLocationFilter } from '../../types';\nimport { gsEventNames } from '../../utils/gsEventNames';\n\nexport class LocationChangedEvent extends CustomEvent<LapisLocationFilter> {\n constructor(detail: LapisLocationFilter) {\n super(gsEventNames.locationChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n","import { gsEventNames } from '../../utils/gsEventNames';\n\ntype LapisTextFilter = Record<string, string | undefined>;\n\nexport class TextFilterChangedEvent extends CustomEvent<LapisTextFilter> {\n constructor(detail: LapisTextFilter) {\n super(gsEventNames.textFilterChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n","import { gsEventNames } from '../../utils/gsEventNames';\n\ntype LapisLineageFilter = Record<string, string | undefined>;\n\nexport class LineageFilterChangedEvent extends CustomEvent<LapisLineageFilter> {\n constructor(detail: LapisLineageFilter) {\n super(gsEventNames.lineageFilterChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n","import z from 'zod';\n\nimport { gsEventNames } from '../../utils/gsEventNames';\n\nexport type LapisNumberFilter = Record<string, number | undefined>;\n\nexport const numberRangeSchema = z.object({\n min: z.number().optional(),\n max: z.number().optional(),\n});\nexport type NumberRange = z.infer<typeof numberRangeSchema>;\n\nexport class NumberRangeValueChangedEvent extends CustomEvent<NumberRange> {\n constructor(detail: NumberRange) {\n super(gsEventNames.numberRangeValueChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n\nexport class NumberRangeFilterChangedEvent extends CustomEvent<LapisNumberFilter> {\n constructor(detail: LapisNumberFilter) {\n super(gsEventNames.numberRangeFilterChanged, {\n detail,\n bubbles: true,\n composed: true,\n });\n }\n}\n"],"names":[],"mappings":"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"}