@genspectrum/dashboard-components 0.1.4 → 0.1.5

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 +213 -78
  2. package/dist/dashboard-components.js +303 -53
  3. package/dist/dashboard-components.js.map +1 -1
  4. package/dist/genspectrum-components.d.ts +288 -69
  5. package/dist/style.css +142 -15
  6. package/package.json +3 -3
  7. package/src/preact/aggregatedData/aggregate.stories.tsx +2 -0
  8. package/src/preact/aggregatedData/aggregate.tsx +9 -4
  9. package/src/preact/components/headline.stories.tsx +19 -1
  10. package/src/preact/components/headline.tsx +9 -1
  11. package/src/preact/components/info.stories.tsx +24 -3
  12. package/src/preact/components/info.tsx +49 -5
  13. package/src/preact/dateRangeSelector/date-range-selector.tsx +10 -10
  14. package/src/preact/mutationComparison/mutation-comparison.stories.tsx +3 -0
  15. package/src/preact/mutationComparison/mutation-comparison.tsx +3 -3
  16. package/src/preact/mutationFilter/mutation-filter.tsx +1 -1
  17. package/src/preact/mutations/mutations.stories.tsx +3 -0
  18. package/src/preact/mutations/mutations.tsx +9 -3
  19. package/src/preact/prevalenceOverTime/prevalence-over-time.stories.tsx +4 -0
  20. package/src/preact/prevalenceOverTime/prevalence-over-time.tsx +14 -4
  21. package/src/preact/relativeGrowthAdvantage/relative-growth-advantage.stories.tsx +3 -0
  22. package/src/preact/relativeGrowthAdvantage/relative-growth-advantage.tsx +49 -4
  23. package/src/web-components/display/aggregate-component.stories.ts +3 -0
  24. package/src/web-components/display/aggregate-component.tsx +15 -1
  25. package/src/web-components/display/mutation-comparison-component.stories.ts +3 -0
  26. package/src/web-components/display/mutation-comparison-component.tsx +7 -0
  27. package/src/web-components/display/mutations-component.stories.ts +27 -7
  28. package/src/web-components/display/mutations-component.tsx +58 -4
  29. package/src/web-components/display/prevalence-over-time-component.stories.ts +24 -0
  30. package/src/web-components/display/prevalence-over-time-component.tsx +93 -5
  31. package/src/web-components/display/relative-growth-advantage-component.stories.ts +21 -0
  32. package/src/web-components/display/relative-growth-advantage-component.tsx +54 -3
  33. package/src/web-components/input/date-range-selector-component.stories.ts +17 -2
  34. package/src/web-components/input/date-range-selector-component.tsx +57 -5
  35. package/src/web-components/input/mutation-filter-component.stories.ts +13 -3
  36. package/src/web-components/input/mutation-filter-component.tsx +50 -2
  37. package/src/web-components/input/text-input-component.stories.ts +14 -3
  38. package/src/web-components/input/text-input-component.tsx +23 -1
@@ -1225,6 +1225,12 @@ const ErrorDisplay = ({ error }) => {
1225
1225
  ] });
1226
1226
  };
1227
1227
  const Headline = ({ heading, children }) => {
1228
+ if (!heading) {
1229
+ return /* @__PURE__ */ u$1(Fragment, { children });
1230
+ }
1231
+ return /* @__PURE__ */ u$1(ResizingHeadline, { heading, children });
1232
+ };
1233
+ const ResizingHeadline = ({ heading, children }) => {
1228
1234
  const ref = F(null);
1229
1235
  const [h1Height, setH1Height] = p("2rem");
1230
1236
  _(() => {
@@ -1238,8 +1244,37 @@ const Headline = ({ heading, children }) => {
1238
1244
  /* @__PURE__ */ u$1("div", { style: { height: `calc(100% - ${h1Height})` }, children })
1239
1245
  ] });
1240
1246
  };
1241
- const Info = ({ content, className }) => {
1242
- return /* @__PURE__ */ u$1("div", { class: `${className} tooltip`, "data-tip": content, children: /* @__PURE__ */ u$1("button", { class: "btn btn-xs", children: "?" }) });
1247
+ const Info = ({ children, size }) => {
1248
+ const [showHelp, setShowHelp] = p(false);
1249
+ const toggleHelp = () => {
1250
+ setShowHelp(!showHelp);
1251
+ };
1252
+ return /* @__PURE__ */ u$1("div", { className: "relative", children: [
1253
+ /* @__PURE__ */ u$1("button", { className: "btn btn-xs", onClick: toggleHelp, children: "?" }),
1254
+ showHelp && /* @__PURE__ */ u$1(
1255
+ "div",
1256
+ {
1257
+ className: "absolute top-8 right-6 bg-white p-2 border border-black flex flex-col overflow-auto shadow-lg rounded z-50",
1258
+ style: size,
1259
+ children: [
1260
+ /* @__PURE__ */ u$1("div", { className: "flex flex-col", children }),
1261
+ /* @__PURE__ */ u$1("div", { className: "flex justify-end", children: /* @__PURE__ */ u$1("button", { className: "text-sm underline mt-2", onClick: toggleHelp, children: "Close" }) })
1262
+ ]
1263
+ }
1264
+ )
1265
+ ] });
1266
+ };
1267
+ const InfoHeadline1 = ({ children }) => {
1268
+ return /* @__PURE__ */ u$1("h1", { className: "text-lg font-bold", children });
1269
+ };
1270
+ const InfoHeadline2 = ({ children }) => {
1271
+ return /* @__PURE__ */ u$1("h2", { className: "text-base font-bold mt-4", children });
1272
+ };
1273
+ const InfoParagraph = ({ children }) => {
1274
+ return /* @__PURE__ */ u$1("p", { className: "text-justify my-1", children });
1275
+ };
1276
+ const InfoLink = ({ children, href }) => {
1277
+ return /* @__PURE__ */ u$1("a", { className: "text-blue-600 hover:text-blue-800", href, target: "_blank", rel: "noopener noreferrer", children });
1243
1278
  };
1244
1279
  const LoadingDisplay = () => {
1245
1280
  return /* @__PURE__ */ u$1("div", { children: "Loading..." });
@@ -1503,13 +1538,13 @@ const MutationComparison = ({
1503
1538
  variants,
1504
1539
  sequenceType,
1505
1540
  views,
1506
- size
1541
+ size,
1542
+ headline = "Mutation comparison"
1507
1543
  }) => {
1508
1544
  const lapis = P(LapisUrlContext);
1509
1545
  const { data, error, isLoading } = useQuery(async () => {
1510
1546
  return queryMutationData(variants, sequenceType, lapis);
1511
1547
  }, [variants, sequenceType, lapis]);
1512
- const headline = "Mutation comparison";
1513
1548
  if (isLoading) {
1514
1549
  return /* @__PURE__ */ u$1(Headline, { heading: headline, children: /* @__PURE__ */ u$1(LoadingDisplay, {}) });
1515
1550
  }
@@ -1612,7 +1647,7 @@ const Toolbar$3 = ({
1612
1647
  filename: "mutation_comparison.csv"
1613
1648
  }
1614
1649
  ),
1615
- /* @__PURE__ */ u$1(Info, { className: "mx-1", content: "Info for mutation comparison" })
1650
+ /* @__PURE__ */ u$1(Info, { children: "Info for mutation comparison" })
1616
1651
  ] });
1617
1652
  };
1618
1653
  const gridJsStyle = '.gridjs-head button, .gridjs-footer button {\n cursor: pointer;\n background-color: transparent;\n background-image: none;\n padding: 0;\n margin: 0;\n border: none;\n outline: none;\n}\n\n.gridjs-temp {\n position: relative;\n}\n\n.gridjs-head {\n width: 100%;\n margin-bottom: 5px;\n padding: 5px 1px;\n}\n.gridjs-head::after {\n content: "";\n display: block;\n clear: both;\n}\n.gridjs-head:empty {\n padding: 0;\n border: none;\n}\n\n.gridjs-container {\n overflow: hidden;\n display: inline-block;\n padding: 2px;\n color: #000;\n position: relative;\n z-index: 0;\n}\n\n.gridjs-footer {\n display: block;\n position: relative;\n width: 100%;\n z-index: 5;\n padding: 12px 24px;\n border-top: 1px solid #e5e7eb;\n background-color: #fff;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.26);\n border-radius: 0 0 8px 8px;\n border-bottom-width: 1px;\n border-color: #e5e7eb;\n}\n.gridjs-footer:empty {\n padding: 0;\n border: none;\n}\n\ninput.gridjs-input {\n outline: none;\n background-color: #fff;\n border: 1px solid #d2d6dc;\n border-radius: 5px;\n padding: 10px 13px;\n font-size: 14px;\n line-height: 1.45;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\ninput.gridjs-input:focus {\n box-shadow: 0 0 0 3px rgba(149, 189, 243, 0.5);\n border-color: #9bc2f7;\n}\n\n.gridjs-pagination {\n color: #3d4044;\n}\n.gridjs-pagination::after {\n content: "";\n display: block;\n clear: both;\n}\n.gridjs-pagination .gridjs-summary {\n float: left;\n margin-top: 5px;\n}\n.gridjs-pagination .gridjs-pages {\n float: right;\n}\n.gridjs-pagination .gridjs-pages button {\n padding: 5px 14px;\n border: 1px solid #d2d6dc;\n background-color: #fff;\n border-right: none;\n outline: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.gridjs-pagination .gridjs-pages button:focus {\n box-shadow: 0 0 0 2px rgba(149, 189, 243, 0.5);\n position: relative;\n margin-right: -1px;\n border-right: 1px solid #d2d6dc;\n}\n.gridjs-pagination .gridjs-pages button:hover {\n background-color: #f7f7f7;\n color: rgb(60, 66, 87);\n outline: none;\n}\n.gridjs-pagination .gridjs-pages button:disabled,\n.gridjs-pagination .gridjs-pages button[disabled],\n.gridjs-pagination .gridjs-pages button:hover:disabled {\n cursor: default;\n background-color: #fff;\n color: #6b7280;\n}\n.gridjs-pagination .gridjs-pages button.gridjs-spread {\n cursor: default;\n box-shadow: none;\n background-color: #fff;\n}\n.gridjs-pagination .gridjs-pages button.gridjs-currentPage {\n background-color: #f7f7f7;\n font-weight: bold;\n}\n.gridjs-pagination .gridjs-pages button:last-child {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n border-right: 1px solid #d2d6dc;\n}\n.gridjs-pagination .gridjs-pages button:first-child {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.gridjs-pagination .gridjs-pages button:last-child:focus {\n margin-right: 0;\n}\n\nbutton.gridjs-sort {\n float: right;\n height: 24px;\n width: 13px;\n background-color: transparent;\n background-repeat: no-repeat;\n background-position-x: center;\n cursor: pointer;\n padding: 0;\n margin: 0;\n border: none;\n outline: none;\n background-size: contain;\n}\nbutton.gridjs-sort-neutral {\n opacity: 0.3;\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSI0MDEuOTk4cHgiIGhlaWdodD0iNDAxLjk5OHB4IiB2aWV3Qm94PSIwIDAgNDAxLjk5OCA0MDEuOTk4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MDEuOTk4IDQwMS45OTg7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik03My4wOTIsMTY0LjQ1MmgyNTUuODEzYzQuOTQ5LDAsOS4yMzMtMS44MDcsMTIuODQ4LTUuNDI0YzMuNjEzLTMuNjE2LDUuNDI3LTcuODk4LDUuNDI3LTEyLjg0NwoJCQljMC00Ljk0OS0xLjgxMy05LjIyOS01LjQyNy0xMi44NUwyMTMuODQ2LDUuNDI0QzIxMC4yMzIsMS44MTIsMjA1Ljk1MSwwLDIwMC45OTksMHMtOS4yMzMsMS44MTItMTIuODUsNS40MjRMNjAuMjQyLDEzMy4zMzEKCQkJYy0zLjYxNywzLjYxNy01LjQyNCw3LjkwMS01LjQyNCwxMi44NWMwLDQuOTQ4LDEuODA3LDkuMjMxLDUuNDI0LDEyLjg0N0M2My44NjMsMTYyLjY0NSw2OC4xNDQsMTY0LjQ1Miw3My4wOTIsMTY0LjQ1MnoiLz4KCQk8cGF0aCBkPSJNMzI4LjkwNSwyMzcuNTQ5SDczLjA5MmMtNC45NTIsMC05LjIzMywxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MTctNS40MjQsNy44OTgtNS40MjQsMTIuODQ3CgkJCWMwLDQuOTQ5LDEuODA3LDkuMjMzLDUuNDI0LDEyLjg0OEwxODguMTQ5LDM5Ni41N2MzLjYyMSwzLjYxNyw3LjkwMiw1LjQyOCwxMi44NSw1LjQyOHM5LjIzMy0xLjgxMSwxMi44NDctNS40MjhsMTI3LjkwNy0xMjcuOTA2CgkJCWMzLjYxMy0zLjYxNCw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDhjMC00Ljk0OC0xLjgxMy05LjIyOS01LjQyNy0xMi44NDdDMzM4LjEzOSwyMzkuMzUzLDMzMy44NTQsMjM3LjU0OSwzMjguOTA1LDIzNy41NDl6Ii8+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: center;\n}\nbutton.gridjs-sort-asc {\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MXB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjE7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDE5Ny4yODdMMTU5LjAyOCw2OS4zODFjLTMuNjEzLTMuNjE3LTcuODk1LTUuNDI0LTEyLjg0Ny01LjQyNHMtOS4yMzMsMS44MDctMTIuODUsNS40MjRMNS40MjQsMTk3LjI4NwoJCUMxLjgwNywyMDAuOTA0LDAsMjA1LjE4NiwwLDIxMC4xMzRzMS44MDcsOS4yMzMsNS40MjQsMTIuODQ3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI1LDEyLjg1LDUuNDI1aDI1NS44MTMKCQljNC45NDksMCw5LjIzMy0xLjgwOCwxMi44NDgtNS40MjVjMy42MTMtMy42MTMsNS40MjctNy44OTgsNS40MjctMTIuODQ3UzI5MC41NDgsMjAwLjkwNCwyODYuOTM1LDE5Ny4yODd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: 35%;\n background-size: 10px;\n}\nbutton.gridjs-sort-desc {\n background-image: url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHdpZHRoPSIyOTIuMzYycHgiIGhlaWdodD0iMjkyLjM2MnB4IiB2aWV3Qm94PSIwIDAgMjkyLjM2MiAyOTIuMzYyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTIuMzYyIDI5Mi4zNjI7IgoJIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8Zz4KCTxwYXRoIGQ9Ik0yODYuOTM1LDY5LjM3N2MtMy42MTQtMy42MTctNy44OTgtNS40MjQtMTIuODQ4LTUuNDI0SDE4LjI3NGMtNC45NTIsMC05LjIzMywxLjgwNy0xMi44NSw1LjQyNAoJCUMxLjgwNyw3Mi45OTgsMCw3Ny4yNzksMCw4Mi4yMjhjMCw0Ljk0OCwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDdsMTI3LjkwNywxMjcuOTA3YzMuNjIxLDMuNjE3LDcuOTAyLDUuNDI4LDEyLjg1LDUuNDI4CgkJczkuMjMzLTEuODExLDEyLjg0Ny01LjQyOEwyODYuOTM1LDk1LjA3NGMzLjYxMy0zLjYxNyw1LjQyNy03Ljg5OCw1LjQyNy0xMi44NDdDMjkyLjM2Miw3Ny4yNzksMjkwLjU0OCw3Mi45OTgsMjg2LjkzNSw2OS4zNzd6Ii8+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+");\n background-position-y: 65%;\n background-size: 10px;\n}\nbutton.gridjs-sort:focus {\n outline: none;\n}\n\ntable.gridjs-table {\n width: 100%;\n max-width: 100%;\n border-collapse: collapse;\n text-align: left;\n display: table;\n margin: 0;\n padding: 0;\n overflow: auto;\n table-layout: fixed;\n}\n\n.gridjs-tbody {\n background-color: #fff;\n}\n\ntd.gridjs-td {\n border: 1px solid #e5e7eb;\n padding: 12px 24px;\n background-color: #fff;\n box-sizing: content-box;\n}\ntd.gridjs-td:first-child {\n border-left: none;\n}\ntd.gridjs-td:last-child {\n border-right: none;\n}\ntd.gridjs-message {\n text-align: center;\n}\n\nth.gridjs-th {\n position: relative;\n color: #6b7280;\n background-color: #f9fafb;\n border: 1px solid #e5e7eb;\n border-top: none;\n padding: 14px 24px;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n box-sizing: border-box;\n white-space: nowrap;\n outline: none;\n vertical-align: middle;\n}\nth.gridjs-th .gridjs-th-content {\n text-overflow: ellipsis;\n overflow: hidden;\n width: 100%;\n float: left;\n}\nth.gridjs-th-sort {\n cursor: pointer;\n}\nth.gridjs-th-sort .gridjs-th-content {\n width: calc(100% - 15px);\n}\nth.gridjs-th-sort:hover {\n background-color: #e5e7eb;\n}\nth.gridjs-th-sort:focus {\n background-color: #e5e7eb;\n}\nth.gridjs-th-fixed {\n position: sticky;\n box-shadow: 0 1px 0 0 #e5e7eb;\n}\n@supports (-moz-appearance: none) {\n th.gridjs-th-fixed {\n box-shadow: 0 0 0 1px #e5e7eb;\n }\n}\nth.gridjs-th:first-child {\n border-left: none;\n}\nth.gridjs-th:last-child {\n border-right: none;\n}\n\n.gridjs-tr {\n border: none;\n}\n.gridjs-tr-selected td {\n background-color: #ebf5ff;\n}\n.gridjs-tr:last-child td {\n border-bottom: 0;\n}\n\n.gridjs *,\n.gridjs :after,\n.gridjs :before {\n box-sizing: border-box;\n}\n\n.gridjs-wrapper {\n position: relative;\n z-index: 1;\n overflow: auto;\n width: 100%;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.26);\n border-radius: 8px 8px 0 0;\n display: block;\n border-top-width: 1px;\n border-color: #e5e7eb;\n}\n.gridjs-wrapper:nth-last-of-type(2) {\n border-radius: 8px;\n border-bottom-width: 1px;\n}\n\n.gridjs-search {\n float: left;\n}\n.gridjs-search-input {\n width: 250px;\n}\n\n.gridjs-loading-bar {\n z-index: 10;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background-color: #fff;\n opacity: 0.5;\n}\n.gridjs-loading-bar::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n transform: translateX(-100%);\n background-image: linear-gradient(90deg, rgba(204, 204, 204, 0) 0, rgba(204, 204, 204, 0.2) 20%, rgba(204, 204, 204, 0.5) 60%, rgba(204, 204, 204, 0));\n animation: shimmer 2s infinite;\n content: "";\n}\n@keyframes shimmer {\n 100% {\n transform: translateX(100%);\n }\n}\n\n.gridjs-td .gridjs-checkbox {\n display: block;\n margin: auto;\n cursor: pointer;\n}\n\n.gridjs-resizable {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n width: 5px;\n}\n.gridjs-resizable:hover {\n cursor: ew-resize;\n background-color: #9bc2f7;\n}\n/*# sourceMappingURL=mermaid.css?inline.map */';
@@ -2307,7 +2342,6 @@ html {
2307
2342
  transition-duration: 200ms;
2308
2343
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
2309
2344
  border-width: var(--border-btn, 1px);
2310
- animation: button-pop var(--animation-btn, 0.25s) ease-out;
2311
2345
  transition-property: color, background-color, border-color, opacity, box-shadow, transform;
2312
2346
  --tw-text-opacity: 1;
2313
2347
  color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));
@@ -2782,6 +2816,14 @@ html {
2782
2816
  z-index: 3;
2783
2817
  opacity: 1;
2784
2818
  }
2819
+ .steps {
2820
+ display: inline-grid;
2821
+ grid-auto-flow: column;
2822
+ overflow: hidden;
2823
+ overflow-x: auto;
2824
+ counter-reset: step;
2825
+ grid-auto-columns: 1fr;
2826
+ }
2785
2827
  .steps .step {
2786
2828
  display: grid;
2787
2829
  grid-template-columns: repeat(1, minmax(0, 1fr));
@@ -2796,8 +2838,7 @@ html {
2796
2838
  display: grid;
2797
2839
  align-items: flex-end;
2798
2840
  }
2799
- .tabs-lifted:has(.tab-content[class^="rounded-"]) .tab:first-child:not(.tab-active),
2800
- .tabs-lifted:has(.tab-content[class*=" rounded-"]) .tab:first-child:not(.tab-active) {
2841
+ .tabs-lifted:has(.tab-content[class^="rounded-"]) .tab:first-child:not(:is(.tab-active, [aria-selected="true"])), .tabs-lifted:has(.tab-content[class*=" rounded-"]) .tab:first-child:not(:is(.tab-active, [aria-selected="true"])) {
2801
2842
  border-bottom-color: transparent;
2802
2843
  }
2803
2844
  .tab {
@@ -2842,7 +2883,7 @@ html {
2842
2883
  grid-column-start: span 9999;
2843
2884
  }
2844
2885
  input.tab:checked + .tab-content,
2845
- .tab-active + .tab-content {
2886
+ :is(.tab-active, [aria-selected="true"]) + .tab-content {
2846
2887
  display: block;
2847
2888
  }
2848
2889
  .table {
@@ -2887,6 +2928,12 @@ input.tab:checked + .tab-content,
2887
2928
  font-size: 1rem;
2888
2929
  line-height: 1.5rem;
2889
2930
  }
2931
+ @media (prefers-reduced-motion: no-preference) {
2932
+
2933
+ .btn {
2934
+ animation: button-pop var(--animation-btn, 0.25s) ease-out;
2935
+ }
2936
+ }
2890
2937
  .btn:active:hover,
2891
2938
  .btn:active:focus {
2892
2939
  animation: button-pop 0s ease-out;
@@ -3464,12 +3511,79 @@ input.tab:checked + .tab-content,
3464
3511
  .steps .step[data-content]:after {
3465
3512
  content: attr(data-content);
3466
3513
  }
3514
+ .steps .step-neutral + .step-neutral:before,
3515
+ .steps .step-neutral:after {
3516
+ --tw-bg-opacity: 1;
3517
+ background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));
3518
+ --tw-text-opacity: 1;
3519
+ color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));
3520
+ }
3521
+ .steps .step-primary + .step-primary:before,
3522
+ .steps .step-primary:after {
3523
+ --tw-bg-opacity: 1;
3524
+ background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));
3525
+ --tw-text-opacity: 1;
3526
+ color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));
3527
+ }
3528
+ .steps .step-secondary + .step-secondary:before,
3529
+ .steps .step-secondary:after {
3530
+ --tw-bg-opacity: 1;
3531
+ background-color: var(--fallback-s,oklch(var(--s)/var(--tw-bg-opacity)));
3532
+ --tw-text-opacity: 1;
3533
+ color: var(--fallback-sc,oklch(var(--sc)/var(--tw-text-opacity)));
3534
+ }
3535
+ .steps .step-accent + .step-accent:before,
3536
+ .steps .step-accent:after {
3537
+ --tw-bg-opacity: 1;
3538
+ background-color: var(--fallback-a,oklch(var(--a)/var(--tw-bg-opacity)));
3539
+ --tw-text-opacity: 1;
3540
+ color: var(--fallback-ac,oklch(var(--ac)/var(--tw-text-opacity)));
3541
+ }
3542
+ .steps .step-info + .step-info:before {
3543
+ --tw-bg-opacity: 1;
3544
+ background-color: var(--fallback-in,oklch(var(--in)/var(--tw-bg-opacity)));
3545
+ }
3546
+ .steps .step-info:after {
3547
+ --tw-bg-opacity: 1;
3548
+ background-color: var(--fallback-in,oklch(var(--in)/var(--tw-bg-opacity)));
3549
+ --tw-text-opacity: 1;
3550
+ color: var(--fallback-inc,oklch(var(--inc)/var(--tw-text-opacity)));
3551
+ }
3552
+ .steps .step-success + .step-success:before {
3553
+ --tw-bg-opacity: 1;
3554
+ background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));
3555
+ }
3556
+ .steps .step-success:after {
3557
+ --tw-bg-opacity: 1;
3558
+ background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));
3559
+ --tw-text-opacity: 1;
3560
+ color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));
3561
+ }
3562
+ .steps .step-warning + .step-warning:before {
3563
+ --tw-bg-opacity: 1;
3564
+ background-color: var(--fallback-wa,oklch(var(--wa)/var(--tw-bg-opacity)));
3565
+ }
3566
+ .steps .step-warning:after {
3567
+ --tw-bg-opacity: 1;
3568
+ background-color: var(--fallback-wa,oklch(var(--wa)/var(--tw-bg-opacity)));
3569
+ --tw-text-opacity: 1;
3570
+ color: var(--fallback-wac,oklch(var(--wac)/var(--tw-text-opacity)));
3571
+ }
3572
+ .steps .step-error + .step-error:before {
3573
+ --tw-bg-opacity: 1;
3574
+ background-color: var(--fallback-er,oklch(var(--er)/var(--tw-bg-opacity)));
3575
+ }
3576
+ .steps .step-error:after {
3577
+ --tw-bg-opacity: 1;
3578
+ background-color: var(--fallback-er,oklch(var(--er)/var(--tw-bg-opacity)));
3579
+ --tw-text-opacity: 1;
3580
+ color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));
3581
+ }
3467
3582
  .tabs-lifted > .tab:focus-visible {
3468
3583
  border-end-end-radius: 0;
3469
3584
  border-end-start-radius: 0;
3470
3585
  }
3471
- .tab.tab-active:not(.tab-disabled):not([disabled]),
3472
- .tab:is(input:checked) {
3586
+ .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]), .tab:is(input:checked) {
3473
3587
  border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));
3474
3588
  --tw-border-opacity: 1;
3475
3589
  --tw-text-opacity: 1;
@@ -3504,8 +3618,7 @@ input.tab:checked + .tab-content,
3504
3618
  padding-inline-end: var(--tab-padding, 1rem);
3505
3619
  padding-top: var(--tab-border, 1px);
3506
3620
  }
3507
- .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]),
3508
- .tabs-lifted > .tab:is(input:checked) {
3621
+ .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]), .tabs-lifted > .tab:is(input:checked) {
3509
3622
  background-color: var(--tab-bg);
3510
3623
  border-width: var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);
3511
3624
  border-inline-start-color: var(--tab-border-color);
@@ -3516,7 +3629,7 @@ input.tab:checked + .tab-content,
3516
3629
  padding-bottom: var(--tab-border, 1px);
3517
3630
  padding-top: 0;
3518
3631
  }
3519
- .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]):before, .tabs-lifted > .tab:is(input:checked):before {
3632
+ .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):before, .tabs-lifted > .tab:is(input:checked):before {
3520
3633
  z-index: 1;
3521
3634
  content: "";
3522
3635
  display: block;
@@ -3545,26 +3658,26 @@ input.tab:checked + .tab-content,
3545
3658
  );
3546
3659
  background-image: var(--radius-start), var(--radius-end);
3547
3660
  }
3548
- .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]):first-child:before, .tabs-lifted > .tab:is(input:checked):first-child:before {
3661
+ .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):first-child:before, .tabs-lifted > .tab:is(input:checked):first-child:before {
3549
3662
  background-image: var(--radius-end);
3550
3663
  background-position: top right;
3551
3664
  }
3552
- [dir="rtl"] .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]):first-child:before, [dir="rtl"] .tabs-lifted > .tab:is(input:checked):first-child:before {
3665
+ [dir="rtl"] .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):first-child:before, [dir="rtl"] .tabs-lifted > .tab:is(input:checked):first-child:before {
3553
3666
  background-image: var(--radius-start);
3554
3667
  background-position: top left;
3555
3668
  }
3556
- .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]):last-child:before, .tabs-lifted > .tab:is(input:checked):last-child:before {
3669
+ .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):last-child:before, .tabs-lifted > .tab:is(input:checked):last-child:before {
3557
3670
  background-image: var(--radius-start);
3558
3671
  background-position: top left;
3559
3672
  }
3560
- [dir="rtl"] .tabs-lifted > .tab.tab-active:not(.tab-disabled):not([disabled]):last-child:before, [dir="rtl"] .tabs-lifted > .tab:is(input:checked):last-child:before {
3673
+ [dir="rtl"] .tabs-lifted > .tab:is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):last-child:before, [dir="rtl"] .tabs-lifted > .tab:is(input:checked):last-child:before {
3561
3674
  background-image: var(--radius-end);
3562
3675
  background-position: top right;
3563
3676
  }
3564
3677
  .tabs-lifted
3565
- > .tab-active:not(.tab-disabled):not([disabled])
3678
+ > :is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled])
3566
3679
  + .tabs-lifted
3567
- .tab-active:not(.tab-disabled):not([disabled]):before, .tabs-lifted > .tab:is(input:checked) + .tabs-lifted .tab:is(input:checked):before {
3680
+ :is(.tab-active, [aria-selected="true"]):not(.tab-disabled):not([disabled]):before, .tabs-lifted > .tab:is(input:checked) + .tabs-lifted .tab:is(input:checked):before {
3568
3681
  background-image: var(--radius-end);
3569
3682
  background-position: top right;
3570
3683
  }
@@ -3885,9 +3998,21 @@ input.tab:checked + .tab-content,
3885
3998
  .static {
3886
3999
  position: static;
3887
4000
  }
4001
+ .absolute {
4002
+ position: absolute;
4003
+ }
3888
4004
  .relative {
3889
4005
  position: relative;
3890
4006
  }
4007
+ .right-6 {
4008
+ right: 1.5rem;
4009
+ }
4010
+ .top-8 {
4011
+ top: 2rem;
4012
+ }
4013
+ .z-50 {
4014
+ z-index: 50;
4015
+ }
3891
4016
  .z-\\[1\\] {
3892
4017
  z-index: 1;
3893
4018
  }
@@ -3924,6 +4049,9 @@ input.tab:checked + .tab-content,
3924
4049
  .mt-2 {
3925
4050
  margin-top: 0.5rem;
3926
4051
  }
4052
+ .mt-4 {
4053
+ margin-top: 1rem;
4054
+ }
3927
4055
  .inline {
3928
4056
  display: inline;
3929
4057
  }
@@ -3984,6 +4112,9 @@ input.tab:checked + .tab-content,
3984
4112
  .items-center {
3985
4113
  align-items: center;
3986
4114
  }
4115
+ .justify-end {
4116
+ justify-content: flex-end;
4117
+ }
3987
4118
  .justify-center {
3988
4119
  justify-content: center;
3989
4120
  }
@@ -4039,6 +4170,10 @@ input.tab:checked + .tab-content,
4039
4170
  .border-b-2 {
4040
4171
  border-bottom-width: 2px;
4041
4172
  }
4173
+ .border-black {
4174
+ --tw-border-opacity: 1;
4175
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
4176
+ }
4042
4177
  .border-error {
4043
4178
  --tw-border-opacity: 1;
4044
4179
  border-color: var(--fallback-er,oklch(var(--er)/var(--tw-border-opacity)));
@@ -4098,6 +4233,13 @@ input.tab:checked + .tab-content,
4098
4233
  padding-top: 0.5rem;
4099
4234
  padding-bottom: 0.5rem;
4100
4235
  }
4236
+ .text-justify {
4237
+ text-align: justify;
4238
+ }
4239
+ .text-base {
4240
+ font-size: 1rem;
4241
+ line-height: 1.5rem;
4242
+ }
4101
4243
  .text-lg {
4102
4244
  font-size: 1.125rem;
4103
4245
  line-height: 1.75rem;
@@ -4123,15 +4265,31 @@ input.tab:checked + .tab-content,
4123
4265
  .leading-5 {
4124
4266
  line-height: 1.25rem;
4125
4267
  }
4268
+ .text-blue-600 {
4269
+ --tw-text-opacity: 1;
4270
+ color: rgb(37 99 235 / var(--tw-text-opacity));
4271
+ }
4126
4272
  .text-gray-600 {
4127
4273
  --tw-text-opacity: 1;
4128
4274
  color: rgb(75 85 99 / var(--tw-text-opacity));
4129
4275
  }
4276
+ .underline {
4277
+ text-decoration-line: underline;
4278
+ }
4130
4279
  .shadow {
4131
4280
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
4132
4281
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
4133
4282
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
4134
4283
  }
4284
+ .shadow-lg {
4285
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
4286
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
4287
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
4288
+ }
4289
+ .blur {
4290
+ --tw-blur: blur(8px);
4291
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
4292
+ }
4135
4293
  .filter {
4136
4294
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
4137
4295
  }
@@ -4147,6 +4305,10 @@ input.tab:checked + .tab-content,
4147
4305
  --tw-bg-opacity: 1;
4148
4306
  background-color: rgb(243 244 246 / var(--tw-bg-opacity));
4149
4307
  }
4308
+ .hover\\:text-blue-800:hover {
4309
+ --tw-text-opacity: 1;
4310
+ color: rgb(30 64 175 / var(--tw-text-opacity));
4311
+ }
4150
4312
  .hover\\:text-gray-700:hover {
4151
4313
  --tw-text-opacity: 1;
4152
4314
  color: rgb(55 65 81 / var(--tw-text-opacity));
@@ -4210,6 +4372,7 @@ let MutationComparisonComponent = class extends PreactLitAdapterWithGridJsStyles
4210
4372
  this.sequenceType = "nucleotide";
4211
4373
  this.views = ["table"];
4212
4374
  this.size = void 0;
4375
+ this.headline = "Mutation comparison";
4213
4376
  }
4214
4377
  render() {
4215
4378
  return /* @__PURE__ */ u$1(
@@ -4218,7 +4381,8 @@ let MutationComparisonComponent = class extends PreactLitAdapterWithGridJsStyles
4218
4381
  variants: this.variants,
4219
4382
  sequenceType: this.sequenceType,
4220
4383
  views: this.views,
4221
- size: this.size
4384
+ size: this.size,
4385
+ headline: this.headline
4222
4386
  }
4223
4387
  );
4224
4388
  }
@@ -4235,6 +4399,9 @@ __decorateClass$8([
4235
4399
  __decorateClass$8([
4236
4400
  n2({ type: Object })
4237
4401
  ], MutationComparisonComponent.prototype, "size", 2);
4402
+ __decorateClass$8([
4403
+ n2({ type: String })
4404
+ ], MutationComparisonComponent.prototype, "headline", 2);
4238
4405
  MutationComparisonComponent = __decorateClass$8([
4239
4406
  t$2("gs-mutation-comparison-component")
4240
4407
  ], MutationComparisonComponent);
@@ -4496,12 +4663,17 @@ function filterMutationsData(data, displayedSegments, displayedMutationTypes) {
4496
4663
  gridData: filteredSubstitutionsOrDeletions
4497
4664
  };
4498
4665
  }
4499
- const Mutations = ({ variant, sequenceType, views, size }) => {
4666
+ const Mutations = ({
4667
+ variant,
4668
+ sequenceType,
4669
+ views,
4670
+ size,
4671
+ headline = "Mutations"
4672
+ }) => {
4500
4673
  const lapis = P(LapisUrlContext);
4501
4674
  const { data, error, isLoading } = useQuery(async () => {
4502
4675
  return queryMutationsData(variant, sequenceType, lapis);
4503
4676
  }, [variant, sequenceType, lapis]);
4504
- const headline = "Mutations";
4505
4677
  if (isLoading) {
4506
4678
  return /* @__PURE__ */ u$1(Headline, { heading: headline, children: /* @__PURE__ */ u$1(LoadingDisplay, {}) });
4507
4679
  }
@@ -4614,7 +4786,7 @@ const Toolbar$2 = ({
4614
4786
  filename: "insertions.csv"
4615
4787
  }
4616
4788
  ),
4617
- /* @__PURE__ */ u$1(Info, { className: "mx-1", content: "Info for mutations" })
4789
+ /* @__PURE__ */ u$1(Info, { children: "Info for mutations" })
4618
4790
  ] });
4619
4791
  };
4620
4792
  var __defProp$7 = Object.defineProperty;
@@ -4635,9 +4807,19 @@ let MutationsComponent = class extends PreactLitAdapterWithGridJsStyles {
4635
4807
  this.sequenceType = "nucleotide";
4636
4808
  this.views = ["table", "grid"];
4637
4809
  this.size = void 0;
4810
+ this.headline = "Mutations";
4638
4811
  }
4639
4812
  render() {
4640
- return /* @__PURE__ */ u$1(Mutations, { variant: this.variant, sequenceType: this.sequenceType, views: this.views, size: this.size });
4813
+ return /* @__PURE__ */ u$1(
4814
+ Mutations,
4815
+ {
4816
+ variant: this.variant,
4817
+ sequenceType: this.sequenceType,
4818
+ views: this.views,
4819
+ size: this.size,
4820
+ headline: this.headline
4821
+ }
4822
+ );
4641
4823
  }
4642
4824
  };
4643
4825
  __decorateClass$7([
@@ -4652,6 +4834,9 @@ __decorateClass$7([
4652
4834
  __decorateClass$7([
4653
4835
  n2({ type: Object })
4654
4836
  ], MutationsComponent.prototype, "size", 2);
4837
+ __decorateClass$7([
4838
+ n2({ type: String })
4839
+ ], MutationsComponent.prototype, "headline", 2);
4655
4840
  MutationsComponent = __decorateClass$7([
4656
4841
  t$2("gs-mutations-component")
4657
4842
  ], MutationsComponent);
@@ -6194,14 +6379,14 @@ const PrevalenceOverTime = ({
6194
6379
  smoothingWindow,
6195
6380
  views,
6196
6381
  confidenceIntervalMethods,
6197
- size
6382
+ size,
6383
+ headline = "Prevalence over time"
6198
6384
  }) => {
6199
6385
  const lapis = P(LapisUrlContext);
6200
6386
  const { data, error, isLoading } = useQuery(
6201
6387
  () => queryPrevalenceOverTime(numerator, denominator, granularity, smoothingWindow, lapis),
6202
6388
  [lapis, numerator, denominator, granularity, smoothingWindow]
6203
6389
  );
6204
- const headline = "Prevalence over time";
6205
6390
  if (isLoading) {
6206
6391
  return /* @__PURE__ */ u$1(Headline, { heading: headline, children: /* @__PURE__ */ u$1(LoadingDisplay, {}) });
6207
6392
  }
@@ -6313,7 +6498,13 @@ const Toolbar$1 = ({
6313
6498
  filename: "prevalence-over-time.csv"
6314
6499
  }
6315
6500
  ),
6316
- /* @__PURE__ */ u$1(Info, { className: "ml-1", content: "Info for prevalence over time" })
6501
+ /* @__PURE__ */ u$1(PrevalenceOverTimeInfo, {})
6502
+ ] });
6503
+ };
6504
+ const PrevalenceOverTimeInfo = () => {
6505
+ return /* @__PURE__ */ u$1(Info, { size: { width: "600px", height: "30vh" }, children: [
6506
+ /* @__PURE__ */ u$1(InfoHeadline1, { children: "Prevalence over time" }),
6507
+ /* @__PURE__ */ u$1(InfoParagraph, { children: "Prevalence over time info." })
6317
6508
  ] });
6318
6509
  };
6319
6510
  var __defProp$6 = Object.defineProperty;
@@ -6336,6 +6527,7 @@ let PrevalenceOverTimeComponent = class extends PreactLitAdapterWithGridJsStyles
6336
6527
  this.smoothingWindow = 0;
6337
6528
  this.views = ["bar", "line", "bubble", "table"];
6338
6529
  this.confidenceIntervalMethods = ["wilson"];
6530
+ this.headline = "Prevalence over time";
6339
6531
  this.size = void 0;
6340
6532
  }
6341
6533
  render() {
@@ -6348,7 +6540,8 @@ let PrevalenceOverTimeComponent = class extends PreactLitAdapterWithGridJsStyles
6348
6540
  smoothingWindow: this.smoothingWindow,
6349
6541
  views: this.views,
6350
6542
  confidenceIntervalMethods: this.confidenceIntervalMethods,
6351
- size: this.size
6543
+ size: this.size,
6544
+ headline: this.headline
6352
6545
  }
6353
6546
  );
6354
6547
  }
@@ -6371,6 +6564,9 @@ __decorateClass$6([
6371
6564
  __decorateClass$6([
6372
6565
  n2({ type: Array })
6373
6566
  ], PrevalenceOverTimeComponent.prototype, "confidenceIntervalMethods", 2);
6567
+ __decorateClass$6([
6568
+ n2({ type: String })
6569
+ ], PrevalenceOverTimeComponent.prototype, "headline", 2);
6374
6570
  __decorateClass$6([
6375
6571
  n2({ type: Object })
6376
6572
  ], PrevalenceOverTimeComponent.prototype, "size", 2);
@@ -6567,7 +6763,8 @@ const RelativeGrowthAdvantage = ({
6567
6763
  denominator,
6568
6764
  generationTime,
6569
6765
  views,
6570
- size
6766
+ size,
6767
+ headline = "Relative growth advantage"
6571
6768
  }) => {
6572
6769
  const lapis = P(LapisUrlContext);
6573
6770
  const [yAxisScaleType, setYAxisScaleType] = p("linear");
@@ -6575,7 +6772,6 @@ const RelativeGrowthAdvantage = ({
6575
6772
  () => queryRelativeGrowthAdvantage(numerator, denominator, generationTime, lapis),
6576
6773
  [lapis, numerator, denominator, generationTime, views]
6577
6774
  );
6578
- const headline = "Relative growth advantage";
6579
6775
  if (isLoading) {
6580
6776
  return /* @__PURE__ */ u$1(Headline, { heading: headline, children: /* @__PURE__ */ u$1(LoadingDisplay, {}) });
6581
6777
  }
@@ -6591,7 +6787,8 @@ const RelativeGrowthAdvantage = ({
6591
6787
  data,
6592
6788
  yAxisScaleType,
6593
6789
  setYAxisScaleType,
6594
- views
6790
+ views,
6791
+ generationTime
6595
6792
  }
6596
6793
  ) }) });
6597
6794
  };
@@ -6599,7 +6796,8 @@ const RelativeGrowthAdvantageTabs = ({
6599
6796
  data,
6600
6797
  yAxisScaleType,
6601
6798
  setYAxisScaleType,
6602
- views
6799
+ views,
6800
+ generationTime
6603
6801
  }) => {
6604
6802
  const getTab = (view) => {
6605
6803
  switch (view) {
@@ -6621,16 +6819,45 @@ const RelativeGrowthAdvantageTabs = ({
6621
6819
  }
6622
6820
  };
6623
6821
  const tabs = views.map((view) => getTab(view));
6624
- const toolbar = () => /* @__PURE__ */ u$1(RelativeGrowthAdvantageToolbar, { yAxisScaleType, setYAxisScaleType });
6822
+ const toolbar = () => /* @__PURE__ */ u$1(
6823
+ RelativeGrowthAdvantageToolbar,
6824
+ {
6825
+ generationTime,
6826
+ yAxisScaleType,
6827
+ setYAxisScaleType
6828
+ }
6829
+ );
6625
6830
  return /* @__PURE__ */ u$1(Tabs, { tabs, toolbar });
6626
6831
  };
6627
6832
  const RelativeGrowthAdvantageToolbar = ({
6628
6833
  yAxisScaleType,
6629
- setYAxisScaleType
6834
+ setYAxisScaleType,
6835
+ generationTime
6630
6836
  }) => {
6631
6837
  return /* @__PURE__ */ u$1("div", { class: "flex", children: [
6632
6838
  /* @__PURE__ */ u$1(ScalingSelector, { yAxisScaleType, setYAxisScaleType }),
6633
- /* @__PURE__ */ u$1(Info, { className: "ml-1", content: "Line chart" })
6839
+ /* @__PURE__ */ u$1(RelativeGrowthAdvantageInfo, { generationTime })
6840
+ ] });
6841
+ };
6842
+ const RelativeGrowthAdvantageInfo = ({ generationTime }) => {
6843
+ return /* @__PURE__ */ u$1(Info, { size: { width: "600px", height: "30vh" }, children: [
6844
+ /* @__PURE__ */ u$1(InfoHeadline1, { children: "Relative growth advantage" }),
6845
+ /* @__PURE__ */ u$1(InfoParagraph, { children: [
6846
+ "If variants spread pre-dominantly by local transmission across demographic groups, this estimate reflects the relative viral intrinsic growth advantage of the focal variant in the selected country and time frame. We report the relative growth advantage per ",
6847
+ generationTime,
6848
+ " days (in percentage; 0% means equal growth). Importantly, the relative growth advantage estimate reflects the advantage compared to the co-circulating variants. Thus, as new variants spread, the advantage of the focal variant may decrease. Different mechanisms can alter the intrinsic growth rate, including an intrinsic transmission advantage, immune evasion, and a prolonged infectious period. When absolute numbers of a variant are low, the growth advantage may merely reflect the current importance of introductions from abroad or the variant spreading in a particular demographic group. In this case, the estimate does not provide information on any intrinsic fitness advantages."
6849
+ ] }),
6850
+ /* @__PURE__ */ u$1(InfoParagraph, { children: [
6851
+ "Example: Assume that 10 infections from the focal variant and 100 infections from the co-circulating variants occur today and that the focal variant has a relative growth advantage of 50%. Then, if the number of new infections from the co-circulating variants remains at 100 in ",
6852
+ generationTime,
6853
+ " days from today, we expect the number of new infections from the focal variant to be 15."
6854
+ ] }),
6855
+ /* @__PURE__ */ u$1(InfoHeadline2, { children: "Reference" }),
6856
+ /* @__PURE__ */ u$1(InfoParagraph, { children: [
6857
+ 'Chen, Chaoran, et al. "Quantification of the spread of SARS-CoV-2 variant B.1.1.7 in Switzerland." Epidemics (2021); doi:',
6858
+ " ",
6859
+ /* @__PURE__ */ u$1(InfoLink, { href: "https://www.sciencedirect.com/science/article/pii/S1755436521000335?via=ihub", children: "10.1016/j.epidem.2021.100480" })
6860
+ ] })
6634
6861
  ] });
6635
6862
  };
6636
6863
  var __defProp$5 = Object.defineProperty;
@@ -6651,6 +6878,7 @@ let RelativeGrowthAdvantageComponent = class extends PreactLitAdapter {
6651
6878
  this.denominator = {};
6652
6879
  this.generationTime = 7;
6653
6880
  this.views = ["line"];
6881
+ this.headline = "Relative growth advantage";
6654
6882
  this.size = void 0;
6655
6883
  }
6656
6884
  render() {
@@ -6661,7 +6889,8 @@ let RelativeGrowthAdvantageComponent = class extends PreactLitAdapter {
6661
6889
  denominator: this.denominator,
6662
6890
  generationTime: this.generationTime,
6663
6891
  views: this.views,
6664
- size: this.size
6892
+ size: this.size,
6893
+ headline: this.headline
6665
6894
  }
6666
6895
  );
6667
6896
  }
@@ -6678,6 +6907,9 @@ __decorateClass$5([
6678
6907
  __decorateClass$5([
6679
6908
  n2({ type: Array })
6680
6909
  ], RelativeGrowthAdvantageComponent.prototype, "views", 2);
6910
+ __decorateClass$5([
6911
+ n2({ type: String })
6912
+ ], RelativeGrowthAdvantageComponent.prototype, "headline", 2);
6681
6913
  __decorateClass$5([
6682
6914
  n2({ type: Object })
6683
6915
  ], RelativeGrowthAdvantageComponent.prototype, "size", 2);
@@ -6715,12 +6947,17 @@ async function queryAggregateData(variant, fields, lapis, signal) {
6715
6947
  })
6716
6948
  );
6717
6949
  }
6718
- const Aggregate = ({ fields, views, filter, size }) => {
6950
+ const Aggregate = ({
6951
+ fields,
6952
+ views,
6953
+ filter,
6954
+ size,
6955
+ headline = "Aggregate"
6956
+ }) => {
6719
6957
  const lapis = P(LapisUrlContext);
6720
6958
  const { data, error, isLoading } = useQuery(async () => {
6721
6959
  return queryAggregateData(filter, fields, lapis);
6722
6960
  }, [filter, fields, lapis]);
6723
- const headline = "Aggregate";
6724
6961
  if (isLoading) {
6725
6962
  return /* @__PURE__ */ u$1(Headline, { heading: headline, children: /* @__PURE__ */ u$1(LoadingDisplay, {}) });
6726
6963
  }
@@ -6748,7 +6985,7 @@ const AggregatedDataTabs = ({ data, views, fields }) => {
6748
6985
  const Toolbar = ({ data }) => {
6749
6986
  return /* @__PURE__ */ u$1("div", { class: "flex flex-row", children: [
6750
6987
  /* @__PURE__ */ u$1(CsvDownloadButton, { className: "mx-1 btn btn-xs", getData: () => data, filename: "aggregate.csv" }),
6751
- /* @__PURE__ */ u$1(Info, { className: "mx-1", content: "Info for aggregate" })
6988
+ /* @__PURE__ */ u$1(Info, { children: "Info for aggregate" })
6752
6989
  ] });
6753
6990
  };
6754
6991
  var __defProp$4 = Object.defineProperty;
@@ -6769,9 +7006,19 @@ let AggregateComponent = class extends PreactLitAdapterWithGridJsStyles {
6769
7006
  this.views = ["table"];
6770
7007
  this.filter = {};
6771
7008
  this.size = void 0;
7009
+ this.headline = "Aggregate";
6772
7010
  }
6773
7011
  render() {
6774
- return /* @__PURE__ */ u$1(Aggregate, { fields: this.fields, views: this.views, filter: this.filter, size: this.size });
7012
+ return /* @__PURE__ */ u$1(
7013
+ Aggregate,
7014
+ {
7015
+ fields: this.fields,
7016
+ views: this.views,
7017
+ filter: this.filter,
7018
+ size: this.size,
7019
+ headline: this.headline
7020
+ }
7021
+ );
6775
7022
  }
6776
7023
  };
6777
7024
  __decorateClass$4([
@@ -6786,6 +7033,9 @@ __decorateClass$4([
6786
7033
  __decorateClass$4([
6787
7034
  n2({ type: Object })
6788
7035
  ], AggregateComponent.prototype, "size", 2);
7036
+ __decorateClass$4([
7037
+ n2({ type: String })
7038
+ ], AggregateComponent.prototype, "headline", 2);
6789
7039
  AggregateComponent = __decorateClass$4([
6790
7040
  t$2("gs-aggregate-component")
6791
7041
  ], AggregateComponent);
@@ -6817,8 +7067,8 @@ const DateRangeSelector = ({
6817
7067
  earliestDate = "1900-01-01",
6818
7068
  initialValue
6819
7069
  }) => {
6820
- const datePickerRef = F(null);
6821
- const endDatePickerRef = F(null);
7070
+ const fromDatePickerRef = F(null);
7071
+ const toDatePickerRef = F(null);
6822
7072
  const divRef = F(null);
6823
7073
  const [dateFromPicker, setDateFromPicker] = p(null);
6824
7074
  const [dateToPicker, setDateToPicker] = p(null);
@@ -6835,17 +7085,17 @@ const DateRangeSelector = ({
6835
7085
  allowInput: true,
6836
7086
  dateFormat: "Y-m-d"
6837
7087
  };
6838
- if (datePickerRef.current) {
7088
+ if (fromDatePickerRef.current) {
6839
7089
  setDateFromPicker(
6840
- flatpickr(datePickerRef.current, {
7090
+ flatpickr(fromDatePickerRef.current, {
6841
7091
  ...commonConfig,
6842
7092
  defaultDate: selectedDates.dateFrom
6843
7093
  })
6844
7094
  );
6845
7095
  }
6846
- if (endDatePickerRef.current) {
7096
+ if (toDatePickerRef.current) {
6847
7097
  setDateToPicker(
6848
- flatpickr(endDatePickerRef.current, {
7098
+ flatpickr(toDatePickerRef.current, {
6849
7099
  ...commonConfig,
6850
7100
  defaultDate: selectedDates.dateTo
6851
7101
  })
@@ -6855,7 +7105,7 @@ const DateRangeSelector = ({
6855
7105
  dateFromPicker == null ? void 0 : dateFromPicker.destroy();
6856
7106
  dateToPicker == null ? void 0 : dateToPicker.destroy();
6857
7107
  };
6858
- }, [datePickerRef, endDatePickerRef]);
7108
+ }, [fromDatePickerRef, toDatePickerRef]);
6859
7109
  const onSelectChange = (value) => {
6860
7110
  setSelectedDateRange(value);
6861
7111
  const dateRange = getDatesForSelectorValue(value, customSelectOptions, earliestDate);
@@ -6924,7 +7174,7 @@ const DateRangeSelector = ({
6924
7174
  class: "input input-bordered rounded-none join-item",
6925
7175
  type: "text",
6926
7176
  placeholder: "Date from",
6927
- ref: datePickerRef,
7177
+ ref: fromDatePickerRef,
6928
7178
  onChange: onChangeDateFrom,
6929
7179
  onBlur: onChangeDateFrom
6930
7180
  }
@@ -6935,9 +7185,9 @@ const DateRangeSelector = ({
6935
7185
  class: "input input-bordered rounded-none join-item",
6936
7186
  type: "text",
6937
7187
  placeholder: "Date to",
6938
- ref: endDatePickerRef,
7188
+ ref: toDatePickerRef,
6939
7189
  onChange: onChangeDateTo,
6940
- onBlur: onChangeDateFrom
7190
+ onBlur: onChangeDateTo
6941
7191
  }
6942
7192
  )
6943
7193
  ] });
@@ -7006,7 +7256,7 @@ let DateRangeSelectorComponent = class extends PreactLitAdapter {
7006
7256
  super(...arguments);
7007
7257
  this.customSelectOptions = [];
7008
7258
  this.earliestDate = "1900-01-01";
7009
- this.initialValue = "";
7259
+ this.initialValue = "last6Months";
7010
7260
  }
7011
7261
  render() {
7012
7262
  return /* @__PURE__ */ u$1(
@@ -7401,7 +7651,7 @@ const MutationFilter = ({ initialValue }) => {
7401
7651
  fireChangeEvent
7402
7652
  }
7403
7653
  ),
7404
- /* @__PURE__ */ u$1(Info, { className: "mx-1", content: "Info for mutation filter" })
7654
+ /* @__PURE__ */ u$1(Info, { children: "Info for mutation filter" })
7405
7655
  ] }),
7406
7656
  /* @__PURE__ */ u$1("form", { className: "mt-2 w-full", onSubmit: handleSubmit, ref: formRef, children: /* @__PURE__ */ u$1("label", { className: `input flex items-center gap-2 ${isError ? "input-error" : "input-bordered"}`, children: [
7407
7657
  /* @__PURE__ */ u$1(