@genspectrum/dashboard-components 0.18.5 → 0.18.6

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 (33) hide show
  1. package/README.md +12 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/components.d.ts +16 -16
  4. package/dist/components.js +765 -315
  5. package/dist/components.js.map +1 -1
  6. package/dist/style.css +2 -2
  7. package/dist/util.d.ts +16 -16
  8. package/package.json +2 -2
  9. package/src/preact/MutationAnnotationsContext.tsx +34 -27
  10. package/src/preact/components/dropdown.tsx +1 -1
  11. package/src/preact/components/info.tsx +1 -1
  12. package/src/preact/components/mutations-over-time-text-filter.stories.tsx +57 -0
  13. package/src/preact/components/mutations-over-time-text-filter.tsx +63 -0
  14. package/src/preact/components/segment-selector.tsx +1 -1
  15. package/src/preact/mutationFilter/mutation-filter.stories.tsx +169 -50
  16. package/src/preact/mutationFilter/mutation-filter.tsx +239 -234
  17. package/src/preact/mutationFilter/parseAndValidateMutation.ts +62 -10
  18. package/src/preact/mutationFilter/parseMutation.spec.ts +62 -47
  19. package/src/preact/mutationsOverTime/getFilteredMutationsOverTime.spec.ts +128 -0
  20. package/src/preact/mutationsOverTime/getFilteredMutationsOverTimeData.ts +39 -2
  21. package/src/preact/mutationsOverTime/mutations-over-time-grid.tsx +8 -11
  22. package/src/preact/mutationsOverTime/mutations-over-time.stories.tsx +27 -0
  23. package/src/preact/mutationsOverTime/mutations-over-time.tsx +26 -5
  24. package/src/preact/shared/tanstackTable/pagination-context.tsx +30 -0
  25. package/src/preact/shared/tanstackTable/pagination.tsx +19 -6
  26. package/src/preact/shared/tanstackTable/tanstackTable.tsx +17 -3
  27. package/src/preact/wastewater/mutationsOverTime/wastewater-mutations-over-time.stories.tsx +19 -1
  28. package/src/preact/wastewater/mutationsOverTime/wastewater-mutations-over-time.tsx +6 -1
  29. package/src/web-components/input/gs-mutation-filter.stories.ts +4 -4
  30. package/src/web-components/visualization/gs-prevalence-over-time.stories.ts +1 -1
  31. package/standalone-bundle/dashboard-components.js +12896 -13366
  32. package/standalone-bundle/dashboard-components.js.map +1 -1
  33. package/standalone-bundle/style.css +1 -1
@@ -843,7 +843,7 @@ const InfoHeadline2 = ({ children }) => {
843
843
  return /* @__PURE__ */ u$1("h2", { className: "text-justify text-base font-bold mt-4", children });
844
844
  };
845
845
  const InfoParagraph = ({ children }) => {
846
- return /* @__PURE__ */ u$1("p", { className: "text-justify text-base font-normal my-1", children });
846
+ return /* @__PURE__ */ u$1("p", { className: "text-justify text-base font-normal my-1 text-wrap", children });
847
847
  };
848
848
  const InfoLink = ({ children, href }) => {
849
849
  return /* @__PURE__ */ u$1("a", { className: "text-blue-600 hover:text-blue-800", href, target: "_blank", rel: "noopener noreferrer", children });
@@ -1069,43 +1069,46 @@ const MutationAnnotationsContextProvider = ({ value, children }) => {
1069
1069
  if (!parseResult2.success) {
1070
1070
  return parseResult2;
1071
1071
  }
1072
- const nucleotideMap = /* @__PURE__ */ new Map();
1073
- const nucleotidePositions = /* @__PURE__ */ new Map();
1074
- const aminoAcidMap = /* @__PURE__ */ new Map();
1075
- const aminoAcidPositions = /* @__PURE__ */ new Map();
1076
- value.forEach((annotation) => {
1077
- new Set(annotation.nucleotideMutations).forEach((code) => {
1078
- addAnnotationToMap(nucleotideMap, code, annotation);
1079
- });
1080
- new Set(annotation.aminoAcidMutations).forEach((code) => {
1081
- addAnnotationToMap(aminoAcidMap, code, annotation);
1082
- });
1083
- new Set(annotation.nucleotidePositions).forEach((position) => {
1084
- addAnnotationToMap(nucleotidePositions, position, annotation);
1085
- });
1086
- new Set(annotation.aminoAcidPositions).forEach((position) => {
1087
- addAnnotationToMap(aminoAcidPositions, position, annotation);
1088
- });
1089
- });
1090
- return {
1091
- success: true,
1092
- value: {
1093
- nucleotide: { mutation: nucleotideMap, position: nucleotidePositions },
1094
- "amino acid": { mutation: aminoAcidMap, position: aminoAcidPositions }
1095
- }
1096
- };
1072
+ return { success: true, value: getMutationAnnotationsContext(value) };
1097
1073
  }, [value]);
1098
1074
  if (!parseResult.success) {
1099
1075
  return /* @__PURE__ */ u$1(ResizeContainer, { size: { width: "100%" }, children: /* @__PURE__ */ u$1(ErrorDisplay, { error: parseResult.error, layout: "vertical" }) });
1100
1076
  }
1101
1077
  return /* @__PURE__ */ u$1(MutationAnnotationsContext.Provider, { value: parseResult.value, children });
1102
1078
  };
1079
+ function getMutationAnnotationsContext(value) {
1080
+ const nucleotideMap = /* @__PURE__ */ new Map();
1081
+ const nucleotidePositions = /* @__PURE__ */ new Map();
1082
+ const aminoAcidMap = /* @__PURE__ */ new Map();
1083
+ const aminoAcidPositions = /* @__PURE__ */ new Map();
1084
+ value.forEach((annotation) => {
1085
+ new Set(annotation.nucleotideMutations).forEach((code) => {
1086
+ addAnnotationToMap(nucleotideMap, code, annotation);
1087
+ });
1088
+ new Set(annotation.aminoAcidMutations).forEach((code) => {
1089
+ addAnnotationToMap(aminoAcidMap, code, annotation);
1090
+ });
1091
+ new Set(annotation.nucleotidePositions).forEach((position) => {
1092
+ addAnnotationToMap(nucleotidePositions, position, annotation);
1093
+ });
1094
+ new Set(annotation.aminoAcidPositions).forEach((position) => {
1095
+ addAnnotationToMap(aminoAcidPositions, position, annotation);
1096
+ });
1097
+ });
1098
+ return {
1099
+ nucleotide: { mutation: nucleotideMap, position: nucleotidePositions },
1100
+ "amino acid": { mutation: aminoAcidMap, position: aminoAcidPositions }
1101
+ };
1102
+ }
1103
1103
  function addAnnotationToMap(map2, code, annotation) {
1104
1104
  const oldAnnotations = map2.get(code.toUpperCase()) ?? [];
1105
1105
  map2.set(code.toUpperCase(), [...oldAnnotations, annotation]);
1106
1106
  }
1107
1107
  function useMutationAnnotationsProvider() {
1108
1108
  const mutationAnnotations = x$1(MutationAnnotationsContext);
1109
+ return getMutationAnnotationsProvider(mutationAnnotations);
1110
+ }
1111
+ function getMutationAnnotationsProvider(mutationAnnotations) {
1109
1112
  return (mutation, sequenceType) => {
1110
1113
  const position = mutation.segment === void 0 ? `${mutation.position}` : `${mutation.segment.toUpperCase()}:${mutation.position}`;
1111
1114
  const possiblePositionAnnotations = mutationAnnotations[sequenceType].position.get(position);
@@ -1912,7 +1915,7 @@ const Dropdown = ({ children, buttonTitle, placement }) => {
1912
1915
  setShowContent(!showContent);
1913
1916
  };
1914
1917
  return /* @__PURE__ */ u$1(Fragment, { children: [
1915
- /* @__PURE__ */ u$1("button", { type: "button", className: "btn btn-xs whitespace-nowrap w-full", onClick: toggle, ref: referenceRef, children: buttonTitle }),
1918
+ /* @__PURE__ */ u$1("button", { type: "button", className: "btn btn-xs whitespace-nowrap w-full", onClick: toggle, ref: referenceRef, children: /* @__PURE__ */ u$1("span", { className: "w-full truncate", children: buttonTitle }) }),
1916
1919
  /* @__PURE__ */ u$1("div", { ref: floatingRef, className: `${dropdownClass} ${showContent ? "" : "hidden"}`, children })
1917
1920
  ] });
1918
1921
  };
@@ -2207,7 +2210,7 @@ const SegmentSelector = ({
2207
2210
  if (displayedSegments.length <= 1) {
2208
2211
  return null;
2209
2212
  }
2210
- return /* @__PURE__ */ u$1("div", { className: "w-20 inline-flex", children: /* @__PURE__ */ u$1(
2213
+ return /* @__PURE__ */ u$1("div", { className: "w-24 inline-flex", children: /* @__PURE__ */ u$1(
2211
2214
  CheckboxSelector,
2212
2215
  {
2213
2216
  items: displayedSegments,
@@ -2461,8 +2464,8 @@ const MutationComparisonInfo = ({ originalComponentProps }) => {
2461
2464
  };
2462
2465
  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 */';
2463
2466
  const minMaxPercentSliderCss = 'input[type=range]::-webkit-slider-thumb {\n -webkit-appearance: none;\n pointer-events: all;\n width: 24px;\n height: 24px;\n background-color: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px #C6C6C6;\n cursor: pointer;\n}\n\ninput[type=range]::-moz-range-thumb {\n -webkit-appearance: none;\n pointer-events: all;\n width: 24px;\n height: 24px;\n background-color: #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px #C6C6C6;\n cursor: pointer;\n}\n\ninput[type=range]::-webkit-slider-thumb:hover {\n background: #f7f7f7;\n}\n\ninput[type=range]::-webkit-slider-thumb:active {\n box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;\n -webkit-box-shadow: inset 0 0 3px #387bbe, 0 0 9px #387bbe;\n}\n\ninput[type="range"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 2px;\n width: 100%;\n position: absolute;\n background-color: #C6C6C6;\n pointer-events: none;\n}';
2464
- const tailwindStyle = `/*! tailwindcss v4.0.14 | MIT License | https://tailwindcss.com */
2465
- @layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-200:oklch(.885 .062 18.334);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-blue-300:oklch(.809 .105 251.813);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-slate-200:oklch(.929 .013 255.508);--color-slate-500:oklch(.554 .046 257.417);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-neutral-500:oklch(.556 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-lg:64rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}::placeholder{opacity:1;color:color-mix(in oklab,currentColor 50%,transparent)}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e")}:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){scrollbar-gutter:stable;background-image:linear-gradient(var(--color-base-100),var(--color-base-100));--root-bg:color-mix(in srgb,var(--color-base-100),oklch(0% 0 0) 40%)}}@layer components;@layer utilities{.diff{webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;direction:ltr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:90cqi;max-width:90cqi}.diff:has(.diff-item-2:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-2:focus-visible) .diff-resizer{min-width:10cqi;max-width:10cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:10cqi;max-width:10cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:90cqi;max-width:90cqi}}.\\@container{container-type:inline-size}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:transform .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:oklch(0% 0 0/.4);transition:transform .3s ease-out,background-color .3s ease-out,opacity .1s ease-out}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>:where(.tooltip-content),.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:1;--tw-content:attr(data-tip);content:var(--tw-content);width:-moz-max-content;width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25em;transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms;display:block;position:absolute}:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible))>.tooltip-content,:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible))[data-tip]:before,:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible)):after{opacity:1;--tt-pos:0rem;transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translateX(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.tab{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--tab-p:1rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));flex-wrap:wrap;order:var(--tab-order);height:calc(var(--size-field,.25rem)*10);border-color:#0000;justify-content:center;align-items:center;padding-inline-start:var(--tab-p);padding-inline-end:var(--tab-p);font-size:.875rem;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab:is(input[type=radio]){min-width:-moz-fit-content;min-width:fit-content}.tab:is(input[type=radio]):after{content:attr(aria-label)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true]))+.tab-content{height:100%;display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:-moz-fit-content;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;-moz-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);--tw-outline-style:none;outline-style:none;box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);outline-style:none}@media (forced-colors:active){:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active){outline-offset:2px;outline:2px solid #0000}}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px)-2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.dropdown{position-area:var(--anchor-v,bottom)var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(summary):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(summary):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover],.dropdown .dropdown-content{z-index:999;transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:95%}}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within) .dropdown-content{opacity:1}.dropdown.dropdown-hover:hover .dropdown-content{opacity:1;scale:100%}.dropdown:is(details) summary::-webkit-details-marker{display:none}:is(.dropdown.dropdown-open,.dropdown:focus,.dropdown:focus-within) .dropdown-content{scale:100%}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}.dropdown[popover]:not(.dropdown-open,:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000);--btn-noise:var(--fx-noise);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:focus-visible{outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%);--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);box-shadow:none}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn:is(input[type=checkbox],input[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.invisible{visibility:hidden}.visible{visibility:visible}.list{flex-direction:column;font-size:.875rem;display:flex}.list :where(.list-row){--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}.list :where(.list-row):has(.list-col-grow:first-child){--list-grid-cols:1fr}.list :where(.list-row):has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row) :not(.list-col-wrap){grid-row-start:1}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab,var(--color-base-content)5%,transparent);position:absolute;bottom:0}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)inset;--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000);--toggle-p:.1875rem;--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;transition:color .3s,grid-template-columns .2s;display:inline-grid;position:relative}.toggle>*{z-index:1;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000);background-color:currentColor;background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px*-1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-field,.25rem)*10);--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}.input:where(input){display:inline-flex}.input :where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.input :where(input):focus,.input :where(input):focus-within){outline-offset:2px;outline:2px solid #0000}}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in oklab,var(--color-base-content)40%,transparent);box-shadow:none}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.indicator{width:-moz-max-content;width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--inidicator-t,0);bottom:var(--inidicator-b,auto);left:var(--inidicator-s,auto);right:var(--inidicator-e,0);translate:var(--inidicator-x,50%)var(--indicator-y,-50%);position:absolute}.table{border-radius:var(--radius-box);text-align:left;width:100%;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:color-mix(in oklab,var(--color-base-content)60%,transparent);font-size:.875rem;font-weight:600}.table :where(tfoot){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);--tw-content:"";content:var(--tw-content);border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{content:counter(step);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{content:none}.steps .step[data-content]:after{content:attr(data-content)}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.range{-webkit-appearance:none;-moz-appearance:none;appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem)*6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:color-mix(in oklab,currentColor 10%,#0000);cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;-webkit-appearance:none;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%;transform:translateY(-50%)}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%}.range:disabled{cursor:not-allowed;opacity:.3}.select{border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);text-overflow:ellipsis;box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;border-color:var(--input-color);--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000);--size:calc(var(--size-field,.25rem)*10);background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:1rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:inherit;border-radius:inherit;border-style:none;width:calc(100% + 2.75rem);height:calc(100% - 2px);margin-inline:-1rem -1.75rem;padding-inline:1rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select select:focus,.select select:focus-within){outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000);outline:2px solid var(--input-color);outline-offset:2px}.select:has(>select[disabled]),.select:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in oklab,var(--color-base-content)40%,transparent)}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0/calc(var(--depth)*.1))inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.checkbox:disabled{cursor:not-allowed;opacity:.2}.radio{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;border:var(--border)solid var(--input-color,color-mix(in srgb,currentColor 20%,#0000));box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);color:var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;position:relative}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor;animation:.2s ease-out radio}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px*-1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.radio:disabled{cursor:not-allowed;opacity:.2}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-3{top:calc(var(--spacing)*-3)}.top-0{top:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-full{top:100%}.-right-3{right:calc(var(--spacing)*-3)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-10{right:calc(var(--spacing)*10)}.right-full{right:100%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-full{left:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.z-10{z-index:10}.z-1001{z-index:1001}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc,.stat-title{white-space:nowrap;color:color-mix(in oklab,var(--color-base-content)60%,transparent);grid-column-start:1;font-size:.75rem}.float-right{float:right}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);flex-direction:row;align-self:stretch;align-items:center;display:flex}.divider:before,.divider:after{content:"";background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.m-1{margin:calc(var(--spacing)*1)}.m-2{margin:calc(var(--spacing)*2)}.m-4{margin:calc(var(--spacing)*4)}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{content:"×"}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.my-1{margin-block:calc(var(--spacing)*1)}.my-4{margin-block:calc(var(--spacing)*4)}.label{white-space:nowrap;color:color-mix(in oklab,currentColor 60%,transparent);align-items:center;gap:.375rem;display:inline-flex}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000);margin-inline:-.75rem .75rem}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000);margin-inline:.75rem -.75rem}.join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-2\\.5{margin-left:calc(var(--spacing)*2.5)}.ml-3{margin-left:calc(var(--spacing)*3)}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:color-mix(in oklab,var(--color-base-content)20%,transparent);vertical-align:middle;width:.5rem;height:.5rem;color:color-mix(in oklab,var(--color-black)30%,transparent);background-position:50%;background-repeat:no-repeat;background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000);display:inline-block}.iconify{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tabs{--tabs-height:auto;--tabs-direction:row;height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);-moz-column-gap:1rem;column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border)dashed color-mix(in oklab,currentColor 10%,#0000);border-block-end:none}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto minmax(auto,1fr);grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100));border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100));box-shadow:none;background-image:none}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.modal-bottom{place-items:end}.modal-bottom :where(.modal-box){--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.h-8{height:calc(var(--spacing)*8)}.h-\\[calc\\(var\\(--size\\)\\*0\\.7\\)\\]{height:calc(var(--size)*.7)}.h-full{height:100%}.max-h-80{max-height:calc(var(--spacing)*80)}.loading-md{width:calc(var(--size-selector,.25rem)*6)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-20{width:calc(var(--spacing)*20)}.w-32{width:calc(var(--spacing)*32)}.w-64{width:calc(var(--spacing)*64)}.w-\\[6rem\\]{width:6rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.max-w-\\(--breakpoint-lg\\){max-width:var(--breakpoint-lg)}.min-w-24{min-width:calc(var(--spacing)*24)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\\[0\\.05rem\\]{min-width:.05rem}.min-w-\\[7\\.5rem\\]{min-width:7.5rem}.min-w-\\[180px\\]{min-width:180px}.flex-1{flex:1}.grow{flex-grow:1}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.skeleton{border-radius:var(--radius-box);background-color:var(--color-base-300);will-change:background-position;background-image:linear-gradient(105deg,#0000 0% 40%,var(--color-base-100)50%,#0000 60% 100%);background-position-x:-50%;background-repeat:no-repeat;background-size:200%;animation:1.8s ease-in-out infinite skeleton}@media (prefers-reduced-motion:reduce){.skeleton{transition-duration:15s}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-x-6{-moz-column-gap:calc(var(--spacing)*6);column-gap:calc(var(--spacing)*6)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.overflow-scroll{overflow:scroll}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-tr-md{border-top-right-radius:var(--radius-md)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.select-ghost{box-shadow:none;background-color:#0000;border-color:#0000;transition:background-color .2s}.select-ghost:focus,.select-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-500{border-color:var(--color-gray-500)}.border-slate-500{border-color:var(--color-slate-500)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-red-200{background-color:var(--color-red-200)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-16{padding-block:calc(var(--spacing)*16)}.pr-14{padding-right:calc(var(--spacing)*14)}.text-center{text-align:center}.text-justify{text-align:justify}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.select-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.select-xs{--size:calc(var(--size-field,.25rem)*6);font-size:.6875rem}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#606060\\]{color:#606060}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-neutral-500{color:var(--color-neutral-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}.blur{--tw-blur:blur(8px);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,)}.filter{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,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled,:checked){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mdi--chevron-left{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M15.41 16.58L10.83 12l4.58-4.59L14 6l-6 6l6 6z'/%3E%3C/svg%3E")}.mdi--chevron-left-first{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6l6 6zM6 6h2v12H6z'/%3E%3C/svg%3E")}.mdi--chevron-right{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M8.59 16.58L13.17 12L8.59 7.41L10 6l6 6l-6 6z'/%3E%3C/svg%3E")}.mdi--chevron-right-last{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6l-6-6zM16 6h2v12h-2z'/%3E%3C/svg%3E")}.mdi--fullscreen{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M5 5h5v2H7v3H5zm9 0h5v5h-2V7h-3zm3 9h2v5h-5v-2h3zm-7 3v2H5v-5h2v3z'/%3E%3C/svg%3E")}.mdi--fullscreen-exit{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M14 14h5v2h-3v3h-2zm-9 0h5v5H8v-3H5zm3-9h2v5H5V8h3zm11 3v2h-5V5h2v3z'/%3E%3C/svg%3E")}.mdi--reload{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M2 12a9 9 0 0 0 9 9c2.39 0 4.68-.94 6.4-2.6l-1.5-1.5A6.7 6.7 0 0 1 11 19c-6.24 0-9.36-7.54-4.95-11.95S18 5.77 18 12h-3l4 4h.1l3.9-4h-3a9 9 0 0 0-18 0'/%3E%3C/svg%3E")}@media (hover:hover){.peer-hover\\:visible:is(:where(.peer):hover~*){visibility:visible}.hover\\:scale-90:hover{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-300:hover{background-color:var(--color-gray-300)}.hover\\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\\:text-blue-700:hover{color:var(--color-blue-700)}.hover\\:text-blue-800:hover{color:var(--color-blue-800)}.hover\\:text-gray-400:hover{color:var(--color-gray-400)}.hover\\:text-gray-700:hover{color:var(--color-gray-700)}}@media (width>=40rem){.sm\\:modal-middle{place-items:center}.sm\\:modal-middle :where(.modal-box){--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:98%}.sm\\:max-w-5xl{max-width:var(--container-5xl)}.sm\\:flex-row{flex-direction:row}.sm\\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@container (width>=2rem){.\\@\\[2rem\\]\\:visible{visibility:visible}}@container (width>=6rem){.\\@\\[6rem\\]\\:visible{visibility:visible}}@container (width>=14rem){.\\@4xs\\:flex-row{flex-direction:row}.\\@4xs\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.\\@4xs\\:rounded-tr-none{border-top-right-radius:0}.\\@4xs\\:rounded-bl-md{border-bottom-left-radius:var(--radius-md)}}@container (width>=28rem){.\\@md\\:flex-row{flex-direction:row}.\\@md\\:rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.\\@md\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.\\@md\\:rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\\@md\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}}@container (width>=36rem){.\\@xl\\:block{display:block}.\\@xl\\:justify-end{justify-content:flex-end}}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes progress{50%{background-position-x:-115%}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes dropdown{0%{opacity:0}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
2467
+ const tailwindStyle = `/*! tailwindcss v4.0.17 | MIT License | https://tailwindcss.com */
2468
+ @layer theme{:root,:host{--color-red-200:oklch(.885 .062 18.334);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-blue-300:oklch(.809 .105 251.813);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-neutral-500:oklch(.556 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-lg:64rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-feature-settings:initial;font-variation-settings:initial;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:initial;font-variation-settings:initial;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{opacity:1}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::-moz-placeholder{color:color-mix(in oklab,currentColor 50%,transparent)}::placeholder{color:color-mix(in oklab,currentColor 50%,transparent)}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e")}:where(:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not(.drawer-open)>.drawer-toggle:checked)){scrollbar-gutter:stable;background-image:linear-gradient(var(--color-base-100),var(--color-base-100));--root-bg:color-mix(in srgb,var(--color-base-100),oklch(0% 0 0) 40%)}}@layer components;@layer utilities{.diff{webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;direction:ltr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:90cqi;max-width:90cqi}.diff:has(.diff-item-2:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-2:focus-visible) .diff-resizer{min-width:10cqi;max-width:10cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:10cqi;max-width:10cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:90cqi;max-width:90cqi}}.\\@container{container-type:inline-size}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:transform .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:oklch(0% 0 0/.4);transition:transform .3s ease-out,background-color .3s ease-out,opacity .1s ease-out}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>:where(.tooltip-content),.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:1;--tw-content:attr(data-tip);content:var(--tw-content);width:-moz-max-content;width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25em;transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms;display:block;position:absolute}:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible))>.tooltip-content,:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible))[data-tip]:before,:is(.tooltip.tooltip-open,.tooltip[data-tip]:hover,.tooltip:hover,.tooltip:has(:focus-visible)):after{opacity:1;--tt-pos:0rem;transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translateX(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.tab{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--tab-p:1rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));flex-wrap:wrap;order:var(--tab-order);height:calc(var(--size-field,.25rem)*10);border-color:#0000;justify-content:center;align-items:center;padding-inline-start:var(--tab-p);padding-inline-end:var(--tab-p);font-size:.875rem;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab:is(input[type=radio]){min-width:-moz-fit-content;min-width:fit-content}.tab:is(input[type=radio]):after{content:attr(aria-label)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true]))+.tab-content{height:100%;display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:-moz-fit-content;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;-moz-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);--tw-outline-style:none;outline-style:none;box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);outline-style:none}@media (forced-colors:active){:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active){outline-offset:2px;outline:2px solid #0000}}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px)-2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.dropdown{position-area:var(--anchor-v,bottom)var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(summary):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(summary):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover],.dropdown .dropdown-content{z-index:999;transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:95%}}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown.dropdown-open,.dropdown:not(.dropdown-hover):focus,.dropdown:focus-within) .dropdown-content{opacity:1}.dropdown.dropdown-hover:hover .dropdown-content{opacity:1;scale:100%}.dropdown:is(details) summary::-webkit-details-marker{display:none}:is(.dropdown.dropdown-open,.dropdown:focus,.dropdown:focus-within) .dropdown-content{scale:100%}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}.dropdown[popover]:not(.dropdown-open,:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000);--btn-noise:var(--fx-noise);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}:where(.btn){width:unset}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:focus-visible{outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%);--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);box-shadow:none}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn:is(input[type=checkbox],input[type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.invisible{visibility:hidden}.visible{visibility:visible}.list{flex-direction:column;font-size:.875rem;display:flex}.list :where(.list-row){--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}.list :where(.list-row):has(.list-col-grow:first-child){--list-grid-cols:1fr}.list :where(.list-row):has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row):has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list :where(.list-row) :not(.list-col-wrap){grid-row-start:1}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:color-mix(in oklab,var(--color-base-content)5%,transparent);position:absolute;bottom:0}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)inset;--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000);--toggle-p:.1875rem;--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;transition:color .3s,grid-template-columns .2s;display:inline-grid;position:relative}.toggle>*{z-index:1;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000);background-color:currentColor;background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px*-1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-field,.25rem)*10);--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}.input:where(input){display:inline-flex}.input :where(input){-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.input :where(input):focus,.input :where(input):focus-within){outline-offset:2px;outline:2px solid #0000}}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in oklab,var(--color-base-content)40%,transparent);box-shadow:none}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.indicator{width:-moz-max-content;width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--inidicator-t,0);bottom:var(--inidicator-b,auto);left:var(--inidicator-s,auto);right:var(--inidicator-e,0);translate:var(--inidicator-x,50%)var(--indicator-y,-50%);position:absolute}.table{border-radius:var(--radius-box);text-align:left;width:100%;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:color-mix(in oklab,var(--color-base-content)60%,transparent);font-size:.875rem;font-weight:600}.table :where(tfoot){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr,tbody tr:not(:last-child)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);--tw-content:"";content:var(--tw-content);border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{content:counter(step);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{content:none}.steps .step[data-content]:after{content:attr(data-content)}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.range{-webkit-appearance:none;-moz-appearance:none;appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem)*6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:color-mix(in oklab,currentColor 10%,#0000);cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;-webkit-appearance:none;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%;transform:translateY(-50%)}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb)inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2))0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%}.range:disabled{cursor:not-allowed;opacity:.3}.select{border:var(--border)solid #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);text-overflow:ellipsis;box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;border-color:var(--input-color);--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000);--size:calc(var(--size-field,.25rem)*10);background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:1rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}.select select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:inherit;border-radius:inherit;border-style:none;width:calc(100% + 2.75rem);height:calc(100% - 2px);margin-inline:-1rem -1.75rem;padding-inline:1rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select select:focus,.select select:focus-within){outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000);outline:2px solid var(--input-color);outline-offset:2px}.select:has(>select[disabled]),.select:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in oklab,var(--color-base-content)40%,transparent)}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::-moz-placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0/calc(var(--depth)*.1))inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.checkbox:disabled{cursor:not-allowed;opacity:.2}.radio{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:middle;border:var(--border)solid var(--input-color,color-mix(in srgb,currentColor 20%,#0000));box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);color:var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;position:relative}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor;animation:.2s ease-out radio}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px*-1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.radio:disabled{cursor:not-allowed;opacity:.2}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-10{right:calc(var(--spacing)*10)}.right-full{right:100%}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2{left:50%}.left-full{left:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.z-10{z-index:10}.z-1001{z-index:1001}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc,.stat-title{white-space:nowrap;color:color-mix(in oklab,var(--color-base-content)60%,transparent);grid-column-start:1;font-size:.75rem}.float-right{float:right}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);flex-direction:row;align-self:stretch;align-items:center;display:flex}.divider:before,.divider:after{content:"";background-color:color-mix(in oklab,var(--color-base-content)10%,transparent);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.m-2{margin:calc(var(--spacing)*2)}.m-4{margin:calc(var(--spacing)*4)}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{content:"×"}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem)*6);font-size:.6875rem}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.my-1{margin-block:calc(var(--spacing)*1)}.my-4{margin-block:calc(var(--spacing)*4)}.label{white-space:nowrap;color:color-mix(in oklab,currentColor 60%,transparent);align-items:center;gap:.375rem;display:inline-flex}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000);margin-inline:-.75rem .75rem}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000);margin-inline:.75rem -.75rem}.join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-2\\.5{margin-left:calc(var(--spacing)*2.5)}.ml-3{margin-left:calc(var(--spacing)*3)}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:color-mix(in oklab,var(--color-base-content)20%,transparent);vertical-align:middle;width:.5rem;height:.5rem;color:color-mix(in oklab,var(--color-black)30%,transparent);background-position:50%;background-repeat:no-repeat;background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000);display:inline-block}.iconify{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tabs{--tabs-height:auto;--tabs-direction:row;height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);-moz-column-gap:1rem;column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border)dashed color-mix(in oklab,currentColor 10%,#0000);border-block-end:none}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100));border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100));box-shadow:none;background-image:none}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.modal-bottom{place-items:end}.modal-bottom :where(.modal-box){--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.h-8{height:calc(var(--spacing)*8)}.h-\\[calc\\(var\\(--size\\)\\*0\\.7\\)\\]{height:calc(var(--size)*.7)}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.max-h-80{max-height:calc(var(--spacing)*80)}.loading-md{width:calc(var(--size-selector,.25rem)*6)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-64{width:calc(var(--spacing)*64)}.w-\\[6rem\\]{width:6rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.max-w-\\(--breakpoint-lg\\){max-width:var(--breakpoint-lg)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-24{min-width:calc(var(--spacing)*24)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\\[0\\.05rem\\]{min-width:.05rem}.min-w-\\[7\\.5rem\\]{min-width:7.5rem}.min-w-\\[180px\\]{min-width:180px}.flex-1{flex:1}.grow{flex-grow:1}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.skeleton{border-radius:var(--radius-box);background-color:var(--color-base-300);will-change:background-position;background-image:linear-gradient(105deg,#0000 0% 40%,var(--color-base-100)50%,#0000 60% 100%);background-position-x:-50%;background-repeat:no-repeat;background-size:200%;animation:1.8s ease-in-out infinite skeleton}@media (prefers-reduced-motion:reduce){.skeleton{transition-duration:15s}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-outside{list-style-position:outside}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-x-1{-moz-column-gap:calc(var(--spacing)*1);column-gap:calc(var(--spacing)*1)}.gap-x-6{-moz-column-gap:calc(var(--spacing)*6);column-gap:calc(var(--spacing)*6)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-tr-md{border-top-right-radius:var(--radius-md)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.select-ghost{box-shadow:none;background-color:#0000;border-color:#0000;transition:background-color .2s}.select-ghost:focus,.select-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-500{border-color:var(--color-gray-500)}.bg-blue-300{background-color:var(--color-blue-300)}.bg-red-200{background-color:var(--color-red-200)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-16{padding-block:calc(var(--spacing)*16)}.pr-14{padding-right:calc(var(--spacing)*14)}.text-center{text-align:center}.text-justify{text-align:justify}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.select-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.select-xs{--size:calc(var(--size-field,.25rem)*6);font-size:.6875rem}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.text-nowrap{text-wrap:nowrap}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#606060\\]{color:#606060}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-neutral-500{color:var(--color-neutral-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.underline{text-decoration-line:underline}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}.blur{--tw-blur:blur(8px);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,)}.filter{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,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled,:checked){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mdi--chevron-left{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M15.41 16.58L10.83 12l4.58-4.59L14 6l-6 6l6 6z'/%3E%3C/svg%3E")}.mdi--chevron-left-first{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6l6 6zM6 6h2v12H6z'/%3E%3C/svg%3E")}.mdi--chevron-right{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M8.59 16.58L13.17 12L8.59 7.41L10 6l6 6l-6 6z'/%3E%3C/svg%3E")}.mdi--chevron-right-last{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6l-6-6zM16 6h2v12h-2z'/%3E%3C/svg%3E")}.mdi--fullscreen{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M5 5h5v2H7v3H5zm9 0h5v5h-2V7h-3zm3 9h2v5h-5v-2h3zm-7 3v2H5v-5h2v3z'/%3E%3C/svg%3E")}.mdi--fullscreen-exit{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M14 14h5v2h-3v3h-2zm-9 0h5v5H8v-3H5zm3-9h2v5H5V8h3zm11 3v2h-5V5h2v3z'/%3E%3C/svg%3E")}.mdi--reload{--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M2 12a9 9 0 0 0 9 9c2.39 0 4.68-.94 6.4-2.6l-1.5-1.5A6.7 6.7 0 0 1 11 19c-6.24 0-9.36-7.54-4.95-11.95S18 5.77 18 12h-3l4 4h.1l3.9-4h-3a9 9 0 0 0-18 0'/%3E%3C/svg%3E")}@media (hover:hover){.peer-hover\\:visible:is(:where(.peer):hover~*){visibility:visible}.hover\\:scale-90:hover{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:font-bold:hover{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.hover\\:text-blue-700:hover{color:var(--color-blue-700)}.hover\\:text-blue-800:hover{color:var(--color-blue-800)}.hover\\:text-gray-400:hover{color:var(--color-gray-400)}.hover\\:text-gray-700:hover{color:var(--color-gray-700)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (width>=40rem){.sm\\:modal-middle{place-items:center}.sm\\:modal-middle :where(.modal-box){--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:98%}.sm\\:max-w-5xl{max-width:var(--container-5xl)}.sm\\:flex-row{flex-direction:row}.sm\\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}@container (width>=2rem){.\\@\\[2rem\\]\\:visible{visibility:visible}}@container (width>=6rem){.\\@\\[6rem\\]\\:visible{visibility:visible}}@container (width>=14rem){.\\@4xs\\:flex-row{flex-direction:row}.\\@4xs\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.\\@4xs\\:rounded-tr-none{border-top-right-radius:0}.\\@4xs\\:rounded-bl-md{border-bottom-left-radius:var(--radius-md)}}@container (width>=28rem){.\\@md\\:flex-row{flex-direction:row}.\\@md\\:rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.\\@md\\:rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.\\@md\\:rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.\\@md\\:rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}}@container (width>=36rem){.\\@xl\\:block{display:block}.\\@xl\\:justify-end{justify-content:flex-end}}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes progress{50%{background-position-x:-115%}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes dropdown{0%{opacity:0}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
2466
2469
  `;
2467
2470
  var __defProp$f = Object.defineProperty;
2468
2471
  var __decorateClass$f = (decorators, target, key, kind) => {
@@ -6438,7 +6441,10 @@ function getFilteredMutationOverTimeData$1({
6438
6441
  displayedSegments,
6439
6442
  displayedMutationTypes,
6440
6443
  proportionInterval,
6441
- displayMutations
6444
+ displayMutations,
6445
+ mutationFilterValue,
6446
+ sequenceType,
6447
+ annotationProvider
6442
6448
  }) {
6443
6449
  const filteredData = new Map2dView(data);
6444
6450
  const displayMutationsSet = displayMutations === void 0 ? null : new Set(displayMutations.map((it) => it.toUpperCase()));
@@ -6452,6 +6458,9 @@ function getFilteredMutationOverTimeData$1({
6452
6458
  if (displayMutationsSet !== null && !displayMutationsSet.has(entry.mutation.code)) {
6453
6459
  return true;
6454
6460
  }
6461
+ if (applySearchFilter(entry.mutation, sequenceType, mutationFilterValue, annotationProvider)) {
6462
+ return true;
6463
+ }
6455
6464
  return displayedMutationTypes.some(
6456
6465
  (mutationType) => mutationType.type === entry.mutation.type && !mutationType.checked
6457
6466
  );
@@ -6461,6 +6470,21 @@ function getFilteredMutationOverTimeData$1({
6461
6470
  });
6462
6471
  return filteredData;
6463
6472
  }
6473
+ function applySearchFilter(mutation, sequenceType, filterValue, annotationProvider) {
6474
+ if (filterValue === "") {
6475
+ return false;
6476
+ }
6477
+ if (mutation.code.includes(filterValue)) {
6478
+ return false;
6479
+ }
6480
+ const mutationAnnotations = annotationProvider(mutation, sequenceType);
6481
+ if (mutationAnnotations === void 0 || mutationAnnotations.length === 0) {
6482
+ return true;
6483
+ }
6484
+ return !mutationAnnotations.some(
6485
+ (annotation) => annotation.description.includes(filterValue) || annotation.name.includes(filterValue) || annotation.symbol.includes(filterValue)
6486
+ );
6487
+ }
6464
6488
  const MutationsOverTimeGridTooltip = ({
6465
6489
  mutation,
6466
6490
  date,
@@ -6628,6 +6652,19 @@ const Tooltip = ({ children, content, position = "bottom" }) => {
6628
6652
  )
6629
6653
  ] });
6630
6654
  };
6655
+ const pageSizeContext = createContext$1({
6656
+ pageSize: -1,
6657
+ setPageSize: () => {
6658
+ throw new Error("pageSizeContext not initialized");
6659
+ }
6660
+ });
6661
+ function usePageSizeContext() {
6662
+ return x$1(pageSizeContext);
6663
+ }
6664
+ const PageSizeContextProvider = ({ children, pageSizes }) => {
6665
+ const [pageSize, setPageSize] = d(typeof pageSizes === "number" ? pageSizes : pageSizes.at(0) ?? 10);
6666
+ return /* @__PURE__ */ u$1(pageSizeContext.Provider, { value: { pageSize, setPageSize }, children });
6667
+ };
6631
6668
  const pageSizesSchema = z$2.union([z$2.array(z$2.number()), z$2.number()]);
6632
6669
  function Pagination({
6633
6670
  table,
@@ -6660,6 +6697,7 @@ function PageSizeSelector({
6660
6697
  table,
6661
6698
  pageSizes
6662
6699
  }) {
6700
+ const { pageSize, setPageSize } = usePageSizeContext();
6663
6701
  if (typeof pageSizes === "number" || pageSizes.length <= 1) {
6664
6702
  return null;
6665
6703
  }
@@ -6669,13 +6707,20 @@ function PageSizeSelector({
6669
6707
  "select",
6670
6708
  {
6671
6709
  className: `select select-ghost select-sm ${heightForSmallerLines}`,
6672
- value: table.getState().pagination.pageSize,
6710
+ value: pageSize,
6673
6711
  onChange: (e2) => {
6674
- var _a;
6675
- table.setPageSize(Number((_a = e2.currentTarget) == null ? void 0 : _a.value));
6712
+ var _a, _b;
6713
+ const pageSize2 = Number((_a = e2.currentTarget) == null ? void 0 : _a.value);
6714
+ if (Number.isNaN(pageSize2)) {
6715
+ throw new Error(
6716
+ `Invalid page size selected: The value ${(_b = e2.currentTarget) == null ? void 0 : _b.value} could not be parsed as a number.`
6717
+ );
6718
+ }
6719
+ setPageSize(pageSize2);
6720
+ table.setPageSize(pageSize2);
6676
6721
  },
6677
6722
  "aria-label": "Select number of rows per page",
6678
- children: pageSizes.map((pageSize) => /* @__PURE__ */ u$1("option", { value: pageSize, children: pageSize }, pageSize))
6723
+ children: pageSizes.map((pageSize2) => /* @__PURE__ */ u$1("option", { value: pageSize2, children: pageSize2 }, pageSize2))
6679
6724
  }
6680
6725
  )
6681
6726
  ] });
@@ -6695,7 +6740,7 @@ function GotoPageSelector({ table }) {
6695
6740
  defaultValue: table.getState().pagination.pageIndex + 1,
6696
6741
  onChange: (e2) => {
6697
6742
  const page = e2.currentTarget.value ? Number(e2.currentTarget.value) - 1 : 0;
6698
- table.setPageIndex(page);
6743
+ table.setPageIndex(Math.min(page, table.getPageCount() - 1));
6699
6744
  },
6700
6745
  className: `input input-ghost input-sm ${heightForSmallerLines}`,
6701
6746
  "aria-label": "Enter page number to go to"
@@ -6775,6 +6820,14 @@ function usePreactTable(options2) {
6775
6820
  (_a = options2.onStateChange) == null ? void 0 : _a.call(options2, updater);
6776
6821
  }
6777
6822
  }));
6823
+ const { pageSize } = usePageSizeContext();
6824
+ y(
6825
+ () => {
6826
+ tableRef.current.setPageSize(pageSize);
6827
+ },
6828
+ [pageSize]
6829
+ // eslint-disable-line react-hooks/exhaustive-deps -- only run this when the pageSize changes
6830
+ );
6778
6831
  return tableRef.current;
6779
6832
  }
6780
6833
  const MutationsOverTimeGrid = ({
@@ -6789,10 +6842,6 @@ const MutationsOverTimeGrid = ({
6789
6842
  return { mutation: allMutations[index], values: [...row] };
6790
6843
  });
6791
6844
  }, [data]);
6792
- const [pagination, setPagination] = d({
6793
- pageIndex: 0,
6794
- pageSize: typeof pageSizes === "number" ? pageSizes : pageSizes.at(0) ?? 10
6795
- });
6796
6845
  const columns = T$1(() => {
6797
6846
  const columnHelper = createColumnHelper();
6798
6847
  const dates = data.getSecondAxisKeys();
@@ -6834,15 +6883,17 @@ const MutationsOverTimeGrid = ({
6834
6883
  });
6835
6884
  return [mutationHeader, ...dateHeaders];
6836
6885
  }, [colorScale, data, sequenceType]);
6886
+ const { pageSize } = usePageSizeContext();
6837
6887
  const table = usePreactTable({
6838
6888
  data: tableData,
6839
6889
  columns,
6840
6890
  getCoreRowModel: getCoreRowModel(),
6841
6891
  getPaginationRowModel: getPaginationRowModel(),
6842
- debugTable: true,
6843
- onPaginationChange: setPagination,
6844
- state: {
6845
- pagination
6892
+ initialState: {
6893
+ pagination: {
6894
+ pageIndex: 0,
6895
+ pageSize
6896
+ }
6846
6897
  }
6847
6898
  });
6848
6899
  return /* @__PURE__ */ u$1("div", { className: "w-full", children: [
@@ -6897,6 +6948,40 @@ const ColorScaleSelectorDropdown = ({
6897
6948
  }) => {
6898
6949
  return /* @__PURE__ */ u$1("div", { className: "w-20 inline-flex", children: /* @__PURE__ */ u$1(Dropdown, { buttonTitle: `Color scale`, placement: "bottom-start", children: /* @__PURE__ */ u$1(ColorScaleSelector, { colorScale, setColorScale }) }) });
6899
6950
  };
6951
+ function DeleteIcon() {
6952
+ return /* @__PURE__ */ u$1(Fragment, { children: "×" });
6953
+ }
6954
+ function MutationsOverTimeTextFilter({ setFilterValue, value }) {
6955
+ const onInput = (newValue) => {
6956
+ setFilterValue(newValue);
6957
+ };
6958
+ const onDeleteClick = () => setFilterValue("");
6959
+ return /* @__PURE__ */ u$1("div", { className: "w-28 inline-flex", children: /* @__PURE__ */ u$1(Dropdown, { buttonTitle: value === "" ? `Filter mutations` : value, placement: "bottom-start", children: /* @__PURE__ */ u$1("div", { children: /* @__PURE__ */ u$1("label", { className: "flex gap-1 input input-xs", children: [
6960
+ /* @__PURE__ */ u$1(DebouncedInput, { placeholder: "Filter", onInput, value, type: "text" }),
6961
+ value !== void 0 && value !== "" && /* @__PURE__ */ u$1("button", { className: "cursor-pointer", onClick: onDeleteClick, children: /* @__PURE__ */ u$1(DeleteIcon, {}) })
6962
+ ] }) }) }) });
6963
+ }
6964
+ function DebouncedInput({
6965
+ value: initialValue,
6966
+ onInput,
6967
+ debounce: debounce2 = 500,
6968
+ ...props
6969
+ }) {
6970
+ const [value, setValue] = d(initialValue);
6971
+ y(() => {
6972
+ setValue(initialValue);
6973
+ }, [initialValue]);
6974
+ y(() => {
6975
+ const timeout = setTimeout(() => {
6976
+ onInput(value ?? "");
6977
+ }, debounce2);
6978
+ return () => clearTimeout(timeout);
6979
+ }, [value, debounce2, onInput]);
6980
+ const onChangeInput = q$1((event) => {
6981
+ setValue(event.currentTarget.value);
6982
+ }, []);
6983
+ return /* @__PURE__ */ u$1("input", { ...props, value, onInput: onChangeInput });
6984
+ }
6900
6985
  function useWebWorker(messageToWorker, WorkerConstructor) {
6901
6986
  const [data, setData] = d(void 0);
6902
6987
  const [error, setError] = d(void 0);
@@ -6999,6 +7084,8 @@ const MutationsOverTimeTabs$1 = ({
6999
7084
  originalComponentProps,
7000
7085
  overallMutationData
7001
7086
  }) => {
7087
+ const [mutationFilterValue, setMutationFilterValue] = d("");
7088
+ const annotationProvider = useMutationAnnotationsProvider();
7002
7089
  const [proportionInterval, setProportionInterval] = d(originalComponentProps.initialMeanProportionInterval);
7003
7090
  const [colorScale, setColorScale] = d({ min: 0, max: 1, color: "indigo" });
7004
7091
  const [displayedSegments, setDisplayedSegments] = useDisplayedSegments$1(originalComponentProps.sequenceType);
@@ -7006,7 +7093,6 @@ const MutationsOverTimeTabs$1 = ({
7006
7093
  { label: "Substitutions", checked: true, type: "substitution" },
7007
7094
  { label: "Deletions", checked: true, type: "deletion" }
7008
7095
  ]);
7009
- const displayMutations = originalComponentProps.displayMutations;
7010
7096
  const filteredData = T$1(() => {
7011
7097
  return getFilteredMutationOverTimeData$1({
7012
7098
  data: mutationOverTimeData,
@@ -7014,7 +7100,10 @@ const MutationsOverTimeTabs$1 = ({
7014
7100
  displayedSegments,
7015
7101
  displayedMutationTypes,
7016
7102
  proportionInterval,
7017
- displayMutations
7103
+ displayMutations: originalComponentProps.displayMutations,
7104
+ mutationFilterValue,
7105
+ sequenceType: originalComponentProps.sequenceType,
7106
+ annotationProvider
7018
7107
  });
7019
7108
  }, [
7020
7109
  mutationOverTimeData,
@@ -7022,7 +7111,10 @@ const MutationsOverTimeTabs$1 = ({
7022
7111
  displayedSegments,
7023
7112
  displayedMutationTypes,
7024
7113
  proportionInterval,
7025
- displayMutations
7114
+ originalComponentProps.displayMutations,
7115
+ originalComponentProps.sequenceType,
7116
+ mutationFilterValue,
7117
+ annotationProvider
7026
7118
  ]);
7027
7119
  const getTab = (view) => {
7028
7120
  if (filteredData === void 0) {
@@ -7061,10 +7153,12 @@ const MutationsOverTimeTabs$1 = ({
7061
7153
  filteredData,
7062
7154
  colorScale,
7063
7155
  setColorScale,
7064
- originalComponentProps
7156
+ originalComponentProps,
7157
+ setFilterValue: setMutationFilterValue,
7158
+ mutationFilterValue
7065
7159
  }
7066
7160
  );
7067
- return /* @__PURE__ */ u$1(Tabs, { tabs, toolbar });
7161
+ return /* @__PURE__ */ u$1(PageSizeContextProvider, { pageSizes: originalComponentProps.pageSizes, children: /* @__PURE__ */ u$1(Tabs, { tabs, toolbar }) });
7068
7162
  };
7069
7163
  const Toolbar$2 = ({
7070
7164
  activeTab,
@@ -7077,9 +7171,12 @@ const Toolbar$2 = ({
7077
7171
  filteredData,
7078
7172
  colorScale,
7079
7173
  setColorScale,
7080
- originalComponentProps
7174
+ originalComponentProps,
7175
+ setFilterValue,
7176
+ mutationFilterValue
7081
7177
  }) => {
7082
7178
  return /* @__PURE__ */ u$1(Fragment, { children: [
7179
+ /* @__PURE__ */ u$1(MutationsOverTimeTextFilter, { setFilterValue, value: mutationFilterValue }),
7083
7180
  activeTab === "Grid" && /* @__PURE__ */ u$1(ColorScaleSelectorDropdown, { colorScale, setColorScale }),
7084
7181
  /* @__PURE__ */ u$1(
7085
7182
  SegmentSelector,
@@ -8647,7 +8744,7 @@ const MutationsOverTimeTabs = ({
8647
8744
  setDisplayedSegments
8648
8745
  }
8649
8746
  );
8650
- return /* @__PURE__ */ u$1(Tabs, { tabs, toolbar });
8747
+ return /* @__PURE__ */ u$1(PageSizeContextProvider, { pageSizes: originalComponentProps.pageSizes, children: /* @__PURE__ */ u$1(Tabs, { tabs, toolbar }) });
8651
8748
  };
8652
8749
  const Toolbar = ({
8653
8750
  colorScale,
@@ -8859,9 +8956,6 @@ function DatePicker({
8859
8956
  }
8860
8957
  );
8861
8958
  }
8862
- function DeleteIcon() {
8863
- return /* @__PURE__ */ u$1(Fragment, { children: "×" });
8864
- }
8865
8959
  const undefinedValue = "__undefined__";
8866
8960
  function ClearableSelect({
8867
8961
  items,
@@ -9896,7 +9990,7 @@ const t = (t2) => "object" == typeof t2 && null != t2 && 1 === t2.nodeType, e =
9896
9990
  }
9897
9991
  return L2;
9898
9992
  };
9899
- var propTypes = { exports: {} };
9993
+ var propTypes$2 = { exports: {} };
9900
9994
  var reactIs = { exports: {} };
9901
9995
  var reactIs_production_min = {};
9902
9996
  /** @license React v16.13.1
@@ -10828,16 +10922,16 @@ function requireFactoryWithThrowingShims() {
10828
10922
  }
10829
10923
  var hasRequiredPropTypes;
10830
10924
  function requirePropTypes() {
10831
- if (hasRequiredPropTypes) return propTypes.exports;
10925
+ if (hasRequiredPropTypes) return propTypes$2.exports;
10832
10926
  hasRequiredPropTypes = 1;
10833
10927
  if (process.env.NODE_ENV !== "production") {
10834
10928
  var ReactIs = requireReactIs();
10835
10929
  var throwOnDirectAccess = true;
10836
- propTypes.exports = /* @__PURE__ */ requireFactoryWithTypeCheckers()(ReactIs.isElement, throwOnDirectAccess);
10930
+ propTypes$2.exports = /* @__PURE__ */ requireFactoryWithTypeCheckers()(ReactIs.isElement, throwOnDirectAccess);
10837
10931
  } else {
10838
- propTypes.exports = /* @__PURE__ */ requireFactoryWithThrowingShims()();
10932
+ propTypes$2.exports = /* @__PURE__ */ requireFactoryWithThrowingShims()();
10839
10933
  }
10840
- return propTypes.exports;
10934
+ return propTypes$2.exports;
10841
10935
  }
10842
10936
  var propTypesExports = /* @__PURE__ */ requirePropTypes();
10843
10937
  const PropTypes = /* @__PURE__ */ getDefaultExportFromCjs(propTypesExports);
@@ -11157,7 +11251,7 @@ function useLatestRef(val) {
11157
11251
  ref.current = val;
11158
11252
  return ref;
11159
11253
  }
11160
- function useEnhancedReducer(reducer, props, createInitialState, isStateEqual) {
11254
+ function useEnhancedReducer(reducer, props, createInitialState, isStateEqual2) {
11161
11255
  var prevStateRef = A$1();
11162
11256
  var actionRef = A$1();
11163
11257
  var enhancedReducer = q$1(function(state2, action2) {
@@ -11179,14 +11273,18 @@ function useEnhancedReducer(reducer, props, createInitialState, isStateEqual) {
11179
11273
  var action = actionRef.current;
11180
11274
  y(function() {
11181
11275
  var prevState = getState(prevStateRef.current, action == null ? void 0 : action.props);
11182
- var shouldCallOnChangeProps = action && prevStateRef.current && !isStateEqual(prevState, state);
11276
+ var shouldCallOnChangeProps = action && prevStateRef.current && !isStateEqual2(prevState, state);
11183
11277
  if (shouldCallOnChangeProps) {
11184
11278
  callOnChangeProps(action, prevState, state);
11185
11279
  }
11186
11280
  prevStateRef.current = state;
11187
- }, [state, action, isStateEqual]);
11281
+ }, [state, action, isStateEqual2]);
11188
11282
  return [state, dispatchWithProps];
11189
11283
  }
11284
+ function useControlledReducer$1(reducer, props, createInitialState, isStateEqual2) {
11285
+ var _useEnhancedReducer = useEnhancedReducer(reducer, props, createInitialState, isStateEqual2), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];
11286
+ return [getState(state, props), dispatch];
11287
+ }
11190
11288
  var defaultProps$3 = {
11191
11289
  itemToString: function itemToString(item) {
11192
11290
  return item ? String(item) : "";
@@ -11201,19 +11299,19 @@ var defaultProps$3 = {
11201
11299
  typeof window === "undefined" || false ? void 0 : window
11202
11300
  )
11203
11301
  };
11204
- function getDefaultValue$1(props, propKey, defaultStateValues) {
11205
- if (defaultStateValues === void 0) {
11206
- defaultStateValues = dropdownDefaultStateValues;
11302
+ function getDefaultValue$1(props, propKey, defaultStateValues2) {
11303
+ if (defaultStateValues2 === void 0) {
11304
+ defaultStateValues2 = dropdownDefaultStateValues;
11207
11305
  }
11208
11306
  var defaultValue = props["default" + capitalizeString(propKey)];
11209
11307
  if (defaultValue !== void 0) {
11210
11308
  return defaultValue;
11211
11309
  }
11212
- return defaultStateValues[propKey];
11310
+ return defaultStateValues2[propKey];
11213
11311
  }
11214
- function getInitialValue$1(props, propKey, defaultStateValues) {
11215
- if (defaultStateValues === void 0) {
11216
- defaultStateValues = dropdownDefaultStateValues;
11312
+ function getInitialValue$1(props, propKey, defaultStateValues2) {
11313
+ if (defaultStateValues2 === void 0) {
11314
+ defaultStateValues2 = dropdownDefaultStateValues;
11217
11315
  }
11218
11316
  var value = props[propKey];
11219
11317
  if (value !== void 0) {
@@ -11223,7 +11321,7 @@ function getInitialValue$1(props, propKey, defaultStateValues) {
11223
11321
  if (initialValue !== void 0) {
11224
11322
  return initialValue;
11225
11323
  }
11226
- return getDefaultValue$1(props, propKey, defaultStateValues);
11324
+ return getDefaultValue$1(props, propKey, defaultStateValues2);
11227
11325
  }
11228
11326
  function getInitialState$2(props) {
11229
11327
  var selectedItem = getInitialValue$1(props, "selectedItem");
@@ -11485,49 +11583,49 @@ var commonDropdownPropTypes = _extends({}, commonPropTypes, {
11485
11583
  onIsOpenChange: PropTypes.func,
11486
11584
  scrollIntoView: PropTypes.func
11487
11585
  });
11488
- function downshiftCommonReducer(state, action, stateChangeTypes) {
11586
+ function downshiftCommonReducer(state, action, stateChangeTypes2) {
11489
11587
  var type = action.type, props = action.props;
11490
11588
  var changes;
11491
11589
  switch (type) {
11492
- case stateChangeTypes.ItemMouseMove:
11590
+ case stateChangeTypes2.ItemMouseMove:
11493
11591
  changes = {
11494
11592
  highlightedIndex: action.disabled ? -1 : action.index
11495
11593
  };
11496
11594
  break;
11497
- case stateChangeTypes.MenuMouseLeave:
11595
+ case stateChangeTypes2.MenuMouseLeave:
11498
11596
  changes = {
11499
11597
  highlightedIndex: -1
11500
11598
  };
11501
11599
  break;
11502
- case stateChangeTypes.ToggleButtonClick:
11503
- case stateChangeTypes.FunctionToggleMenu:
11600
+ case stateChangeTypes2.ToggleButtonClick:
11601
+ case stateChangeTypes2.FunctionToggleMenu:
11504
11602
  changes = {
11505
11603
  isOpen: !state.isOpen,
11506
11604
  highlightedIndex: state.isOpen ? -1 : getHighlightedIndexOnOpen(props, state, 0)
11507
11605
  };
11508
11606
  break;
11509
- case stateChangeTypes.FunctionOpenMenu:
11607
+ case stateChangeTypes2.FunctionOpenMenu:
11510
11608
  changes = {
11511
11609
  isOpen: true,
11512
11610
  highlightedIndex: getHighlightedIndexOnOpen(props, state, 0)
11513
11611
  };
11514
11612
  break;
11515
- case stateChangeTypes.FunctionCloseMenu:
11613
+ case stateChangeTypes2.FunctionCloseMenu:
11516
11614
  changes = {
11517
11615
  isOpen: false
11518
11616
  };
11519
11617
  break;
11520
- case stateChangeTypes.FunctionSetHighlightedIndex:
11618
+ case stateChangeTypes2.FunctionSetHighlightedIndex:
11521
11619
  changes = {
11522
11620
  highlightedIndex: props.isItemDisabled(props.items[action.highlightedIndex], action.highlightedIndex) ? -1 : action.highlightedIndex
11523
11621
  };
11524
11622
  break;
11525
- case stateChangeTypes.FunctionSetInputValue:
11623
+ case stateChangeTypes2.FunctionSetInputValue:
11526
11624
  changes = {
11527
11625
  inputValue: action.inputValue
11528
11626
  };
11529
11627
  break;
11530
- case stateChangeTypes.FunctionReset:
11628
+ case stateChangeTypes2.FunctionReset:
11531
11629
  changes = {
11532
11630
  highlightedIndex: getDefaultHighlightedIndex(props),
11533
11631
  isOpen: getDefaultValue$1(props, "isOpen"),
@@ -11636,9 +11734,9 @@ var propTypes$1 = _extends({}, commonDropdownPropTypes, {
11636
11734
  inputId: PropTypes.string,
11637
11735
  onInputValueChange: PropTypes.func
11638
11736
  });
11639
- function useControlledReducer(reducer, props, createInitialState, isStateEqual) {
11737
+ function useControlledReducer(reducer, props, createInitialState, isStateEqual2) {
11640
11738
  var previousSelectedItemRef = A$1();
11641
- var _useEnhancedReducer = useEnhancedReducer(reducer, props, createInitialState, isStateEqual), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];
11739
+ var _useEnhancedReducer = useEnhancedReducer(reducer, props, createInitialState, isStateEqual2), state = _useEnhancedReducer[0], dispatch = _useEnhancedReducer[1];
11642
11740
  var isInitialMount = useIsInitialMount();
11643
11741
  y(function() {
11644
11742
  if (!isControlledProp(props, "selectedItem")) {
@@ -11659,7 +11757,7 @@ function useControlledReducer(reducer, props, createInitialState, isStateEqual)
11659
11757
  }
11660
11758
  var validatePropTypes$1 = noop;
11661
11759
  if (process.env.NODE_ENV !== "production") {
11662
- validatePropTypes$1 = function validatePropTypes(options2, caller) {
11760
+ validatePropTypes$1 = function validatePropTypes2(options2, caller) {
11663
11761
  PropTypes.checkPropTypes(propTypes$1, options2, "prop", caller.name);
11664
11762
  };
11665
11763
  }
@@ -12106,7 +12204,41 @@ function useCombobox(userProps) {
12106
12204
  inputValue
12107
12205
  };
12108
12206
  }
12109
- ({
12207
+ var defaultStateValues = {
12208
+ activeIndex: -1,
12209
+ selectedItems: []
12210
+ };
12211
+ function getInitialValue(props, propKey) {
12212
+ return getInitialValue$1(props, propKey, defaultStateValues);
12213
+ }
12214
+ function getDefaultValue(props, propKey) {
12215
+ return getDefaultValue$1(props, propKey, defaultStateValues);
12216
+ }
12217
+ function getInitialState$3(props) {
12218
+ var activeIndex = getInitialValue(props, "activeIndex");
12219
+ var selectedItems = getInitialValue(props, "selectedItems");
12220
+ return {
12221
+ activeIndex,
12222
+ selectedItems
12223
+ };
12224
+ }
12225
+ function isKeyDownOperationPermitted(event) {
12226
+ if (event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {
12227
+ return false;
12228
+ }
12229
+ var element = event.target;
12230
+ if (element instanceof HTMLInputElement && // if element is a text input
12231
+ element.value !== "" && // and we have text in it
12232
+ // and cursor is either not at the start or is currently highlighting text.
12233
+ (element.selectionStart !== 0 || element.selectionEnd !== 0)) {
12234
+ return false;
12235
+ }
12236
+ return true;
12237
+ }
12238
+ function isStateEqual(prevState, newState) {
12239
+ return prevState.selectedItems === newState.selectedItems && prevState.activeIndex === newState.activeIndex;
12240
+ }
12241
+ var propTypes = {
12110
12242
  stateReducer: commonPropTypes.stateReducer,
12111
12243
  itemToKey: commonPropTypes.itemToKey,
12112
12244
  environment: commonPropTypes.environment,
@@ -12121,26 +12253,312 @@ function useCombobox(userProps) {
12121
12253
  onSelectedItemsChange: PropTypes.func,
12122
12254
  keyNavigationNext: PropTypes.string,
12123
12255
  keyNavigationPrevious: PropTypes.string
12124
- });
12125
- ({
12256
+ };
12257
+ var defaultProps = {
12126
12258
  itemToKey: defaultProps$3.itemToKey,
12127
12259
  stateReducer: defaultProps$3.stateReducer,
12128
- environment: defaultProps$3.environment
12260
+ environment: defaultProps$3.environment,
12261
+ keyNavigationNext: "ArrowRight",
12262
+ keyNavigationPrevious: "ArrowLeft"
12263
+ };
12264
+ var validatePropTypes = noop;
12265
+ if (process.env.NODE_ENV !== "production") {
12266
+ validatePropTypes = function validatePropTypes2(options2, caller) {
12267
+ PropTypes.checkPropTypes(propTypes, options2, "prop", caller.name);
12268
+ };
12269
+ }
12270
+ var SelectedItemClick = process.env.NODE_ENV !== "production" ? "__selected_item_click__" : 0;
12271
+ var SelectedItemKeyDownDelete = process.env.NODE_ENV !== "production" ? "__selected_item_keydown_delete__" : 1;
12272
+ var SelectedItemKeyDownBackspace = process.env.NODE_ENV !== "production" ? "__selected_item_keydown_backspace__" : 2;
12273
+ var SelectedItemKeyDownNavigationNext = process.env.NODE_ENV !== "production" ? "__selected_item_keydown_navigation_next__" : 3;
12274
+ var SelectedItemKeyDownNavigationPrevious = process.env.NODE_ENV !== "production" ? "__selected_item_keydown_navigation_previous__" : 4;
12275
+ var DropdownKeyDownNavigationPrevious = process.env.NODE_ENV !== "production" ? "__dropdown_keydown_navigation_previous__" : 5;
12276
+ var DropdownKeyDownBackspace = process.env.NODE_ENV !== "production" ? "__dropdown_keydown_backspace__" : 6;
12277
+ var DropdownClick = process.env.NODE_ENV !== "production" ? "__dropdown_click__" : 7;
12278
+ var FunctionAddSelectedItem = process.env.NODE_ENV !== "production" ? "__function_add_selected_item__" : 8;
12279
+ var FunctionRemoveSelectedItem = process.env.NODE_ENV !== "production" ? "__function_remove_selected_item__" : 9;
12280
+ var FunctionSetSelectedItems = process.env.NODE_ENV !== "production" ? "__function_set_selected_items__" : 10;
12281
+ var FunctionSetActiveIndex = process.env.NODE_ENV !== "production" ? "__function_set_active_index__" : 11;
12282
+ var FunctionReset = process.env.NODE_ENV !== "production" ? "__function_reset__" : 12;
12283
+ var stateChangeTypes = /* @__PURE__ */ Object.freeze({
12284
+ __proto__: null,
12285
+ DropdownClick,
12286
+ DropdownKeyDownBackspace,
12287
+ DropdownKeyDownNavigationPrevious,
12288
+ FunctionAddSelectedItem,
12289
+ FunctionRemoveSelectedItem,
12290
+ FunctionReset,
12291
+ FunctionSetActiveIndex,
12292
+ FunctionSetSelectedItems,
12293
+ SelectedItemClick,
12294
+ SelectedItemKeyDownBackspace,
12295
+ SelectedItemKeyDownDelete,
12296
+ SelectedItemKeyDownNavigationNext,
12297
+ SelectedItemKeyDownNavigationPrevious
12129
12298
  });
12130
- if (process.env.NODE_ENV !== "production") ;
12131
- process.env.NODE_ENV !== "production" ? "__selected_item_click__" : 0;
12132
- process.env.NODE_ENV !== "production" ? "__selected_item_keydown_delete__" : 1;
12133
- process.env.NODE_ENV !== "production" ? "__selected_item_keydown_backspace__" : 2;
12134
- process.env.NODE_ENV !== "production" ? "__selected_item_keydown_navigation_next__" : 3;
12135
- process.env.NODE_ENV !== "production" ? "__selected_item_keydown_navigation_previous__" : 4;
12136
- process.env.NODE_ENV !== "production" ? "__dropdown_keydown_navigation_previous__" : 5;
12137
- process.env.NODE_ENV !== "production" ? "__dropdown_keydown_backspace__" : 6;
12138
- process.env.NODE_ENV !== "production" ? "__dropdown_click__" : 7;
12139
- process.env.NODE_ENV !== "production" ? "__function_add_selected_item__" : 8;
12140
- process.env.NODE_ENV !== "production" ? "__function_remove_selected_item__" : 9;
12141
- process.env.NODE_ENV !== "production" ? "__function_set_selected_items__" : 10;
12142
- process.env.NODE_ENV !== "production" ? "__function_set_active_index__" : 11;
12143
- process.env.NODE_ENV !== "production" ? "__function_reset__" : 12;
12299
+ function downshiftMultipleSelectionReducer(state, action) {
12300
+ var type = action.type, index = action.index, props = action.props, selectedItem = action.selectedItem;
12301
+ var activeIndex = state.activeIndex, selectedItems = state.selectedItems;
12302
+ var changes;
12303
+ switch (type) {
12304
+ case SelectedItemClick:
12305
+ changes = {
12306
+ activeIndex: index
12307
+ };
12308
+ break;
12309
+ case SelectedItemKeyDownNavigationPrevious:
12310
+ changes = {
12311
+ activeIndex: activeIndex - 1 < 0 ? 0 : activeIndex - 1
12312
+ };
12313
+ break;
12314
+ case SelectedItemKeyDownNavigationNext:
12315
+ changes = {
12316
+ activeIndex: activeIndex + 1 >= selectedItems.length ? -1 : activeIndex + 1
12317
+ };
12318
+ break;
12319
+ case SelectedItemKeyDownBackspace:
12320
+ case SelectedItemKeyDownDelete: {
12321
+ if (activeIndex < 0) {
12322
+ break;
12323
+ }
12324
+ var newActiveIndex = activeIndex;
12325
+ if (selectedItems.length === 1) {
12326
+ newActiveIndex = -1;
12327
+ } else if (activeIndex === selectedItems.length - 1) {
12328
+ newActiveIndex = selectedItems.length - 2;
12329
+ }
12330
+ changes = _extends({
12331
+ selectedItems: [].concat(selectedItems.slice(0, activeIndex), selectedItems.slice(activeIndex + 1))
12332
+ }, {
12333
+ activeIndex: newActiveIndex
12334
+ });
12335
+ break;
12336
+ }
12337
+ case DropdownKeyDownNavigationPrevious:
12338
+ changes = {
12339
+ activeIndex: selectedItems.length - 1
12340
+ };
12341
+ break;
12342
+ case DropdownKeyDownBackspace:
12343
+ changes = {
12344
+ selectedItems: selectedItems.slice(0, selectedItems.length - 1)
12345
+ };
12346
+ break;
12347
+ case FunctionAddSelectedItem:
12348
+ changes = {
12349
+ selectedItems: [].concat(selectedItems, [selectedItem])
12350
+ };
12351
+ break;
12352
+ case DropdownClick:
12353
+ changes = {
12354
+ activeIndex: -1
12355
+ };
12356
+ break;
12357
+ case FunctionRemoveSelectedItem: {
12358
+ var _newActiveIndex = activeIndex;
12359
+ var selectedItemIndex = selectedItems.findIndex(function(item) {
12360
+ return props.itemToKey(item) === props.itemToKey(selectedItem);
12361
+ });
12362
+ if (selectedItemIndex < 0) {
12363
+ break;
12364
+ }
12365
+ if (selectedItems.length === 1) {
12366
+ _newActiveIndex = -1;
12367
+ } else if (selectedItemIndex === selectedItems.length - 1) {
12368
+ _newActiveIndex = selectedItems.length - 2;
12369
+ }
12370
+ changes = {
12371
+ selectedItems: [].concat(selectedItems.slice(0, selectedItemIndex), selectedItems.slice(selectedItemIndex + 1)),
12372
+ activeIndex: _newActiveIndex
12373
+ };
12374
+ break;
12375
+ }
12376
+ case FunctionSetSelectedItems: {
12377
+ var newSelectedItems = action.selectedItems;
12378
+ changes = {
12379
+ selectedItems: newSelectedItems
12380
+ };
12381
+ break;
12382
+ }
12383
+ case FunctionSetActiveIndex: {
12384
+ var _newActiveIndex2 = action.activeIndex;
12385
+ changes = {
12386
+ activeIndex: _newActiveIndex2
12387
+ };
12388
+ break;
12389
+ }
12390
+ case FunctionReset:
12391
+ changes = {
12392
+ activeIndex: getDefaultValue(props, "activeIndex"),
12393
+ selectedItems: getDefaultValue(props, "selectedItems")
12394
+ };
12395
+ break;
12396
+ default:
12397
+ throw new Error("Reducer called without proper action type.");
12398
+ }
12399
+ return _extends({}, state, changes);
12400
+ }
12401
+ var _excluded = ["refKey", "ref", "onClick", "onKeyDown", "selectedItem", "index"], _excluded2 = ["refKey", "ref", "onKeyDown", "onClick", "preventKeyAction"];
12402
+ useMultipleSelection.stateChangeTypes = stateChangeTypes;
12403
+ function useMultipleSelection(userProps) {
12404
+ if (userProps === void 0) {
12405
+ userProps = {};
12406
+ }
12407
+ validatePropTypes(userProps, useMultipleSelection);
12408
+ var props = _extends({}, defaultProps, userProps);
12409
+ var getA11yStatusMessage = props.getA11yStatusMessage, environment = props.environment, keyNavigationNext = props.keyNavigationNext, keyNavigationPrevious = props.keyNavigationPrevious;
12410
+ var _useControlledReducer = useControlledReducer$1(downshiftMultipleSelectionReducer, props, getInitialState$3, isStateEqual), state = _useControlledReducer[0], dispatch = _useControlledReducer[1];
12411
+ var activeIndex = state.activeIndex, selectedItems = state.selectedItems;
12412
+ var isInitialMount = useIsInitialMount();
12413
+ var dropdownRef = A$1(null);
12414
+ var selectedItemRefs = A$1();
12415
+ selectedItemRefs.current = [];
12416
+ var latest = useLatestRef({
12417
+ state,
12418
+ props
12419
+ });
12420
+ useA11yMessageStatus(getA11yStatusMessage, state, [activeIndex, selectedItems], environment);
12421
+ y(function() {
12422
+ if (isInitialMount) {
12423
+ return;
12424
+ }
12425
+ if (activeIndex === -1 && dropdownRef.current) {
12426
+ dropdownRef.current.focus();
12427
+ } else if (selectedItemRefs.current[activeIndex]) {
12428
+ selectedItemRefs.current[activeIndex].focus();
12429
+ }
12430
+ }, [activeIndex]);
12431
+ useControlPropsValidator({
12432
+ props,
12433
+ state
12434
+ });
12435
+ var setGetterPropCallInfo = useGetterPropsCalledChecker("getDropdownProps");
12436
+ var selectedItemKeyDownHandlers = T$1(function() {
12437
+ var _ref;
12438
+ return _ref = {}, _ref[keyNavigationPrevious] = function() {
12439
+ dispatch({
12440
+ type: SelectedItemKeyDownNavigationPrevious
12441
+ });
12442
+ }, _ref[keyNavigationNext] = function() {
12443
+ dispatch({
12444
+ type: SelectedItemKeyDownNavigationNext
12445
+ });
12446
+ }, _ref.Delete = function Delete() {
12447
+ dispatch({
12448
+ type: SelectedItemKeyDownDelete
12449
+ });
12450
+ }, _ref.Backspace = function Backspace() {
12451
+ dispatch({
12452
+ type: SelectedItemKeyDownBackspace
12453
+ });
12454
+ }, _ref;
12455
+ }, [dispatch, keyNavigationNext, keyNavigationPrevious]);
12456
+ var dropdownKeyDownHandlers = T$1(function() {
12457
+ var _ref2;
12458
+ return _ref2 = {}, _ref2[keyNavigationPrevious] = function(event) {
12459
+ if (isKeyDownOperationPermitted(event)) {
12460
+ dispatch({
12461
+ type: DropdownKeyDownNavigationPrevious
12462
+ });
12463
+ }
12464
+ }, _ref2.Backspace = function Backspace(event) {
12465
+ if (isKeyDownOperationPermitted(event)) {
12466
+ dispatch({
12467
+ type: DropdownKeyDownBackspace
12468
+ });
12469
+ }
12470
+ }, _ref2;
12471
+ }, [dispatch, keyNavigationPrevious]);
12472
+ var getSelectedItemProps = q$1(function(_temp) {
12473
+ var _extends2;
12474
+ var _ref3 = _temp === void 0 ? {} : _temp, _ref3$refKey = _ref3.refKey, refKey = _ref3$refKey === void 0 ? "ref" : _ref3$refKey, ref = _ref3.ref, onClick = _ref3.onClick, onKeyDown = _ref3.onKeyDown, selectedItemProp = _ref3.selectedItem, indexProp = _ref3.index, rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
12475
+ var latestState = latest.current.state;
12476
+ var _getItemAndIndex = getItemAndIndex(selectedItemProp, indexProp, latestState.selectedItems, "Pass either item or index to getSelectedItemProps!"), index = _getItemAndIndex[1];
12477
+ var isFocusable = index > -1 && index === latestState.activeIndex;
12478
+ var selectedItemHandleClick = function selectedItemHandleClick2() {
12479
+ dispatch({
12480
+ type: SelectedItemClick,
12481
+ index
12482
+ });
12483
+ };
12484
+ var selectedItemHandleKeyDown = function selectedItemHandleKeyDown2(event) {
12485
+ var key = normalizeArrowKey(event);
12486
+ if (key && selectedItemKeyDownHandlers[key]) {
12487
+ selectedItemKeyDownHandlers[key](event);
12488
+ }
12489
+ };
12490
+ return _extends((_extends2 = {}, _extends2[refKey] = handleRefs(ref, function(selectedItemNode) {
12491
+ if (selectedItemNode) {
12492
+ selectedItemRefs.current.push(selectedItemNode);
12493
+ }
12494
+ }), _extends2.tabIndex = isFocusable ? 0 : -1, _extends2.onClick = callAllEventHandlers(onClick, selectedItemHandleClick), _extends2.onKeyDown = callAllEventHandlers(onKeyDown, selectedItemHandleKeyDown), _extends2), rest);
12495
+ }, [dispatch, latest, selectedItemKeyDownHandlers]);
12496
+ var getDropdownProps = q$1(function(_temp2, _temp3) {
12497
+ var _extends3;
12498
+ var _ref4 = _temp2 === void 0 ? {} : _temp2, _ref4$refKey = _ref4.refKey, refKey = _ref4$refKey === void 0 ? "ref" : _ref4$refKey, ref = _ref4.ref, onKeyDown = _ref4.onKeyDown, onClick = _ref4.onClick, _ref4$preventKeyActio = _ref4.preventKeyAction, preventKeyAction = _ref4$preventKeyActio === void 0 ? false : _ref4$preventKeyActio, rest = _objectWithoutPropertiesLoose(_ref4, _excluded2);
12499
+ var _ref5 = _temp3 === void 0 ? {} : _temp3, _ref5$suppressRefErro = _ref5.suppressRefError, suppressRefError = _ref5$suppressRefErro === void 0 ? false : _ref5$suppressRefErro;
12500
+ setGetterPropCallInfo("getDropdownProps", suppressRefError, refKey, dropdownRef);
12501
+ var dropdownHandleKeyDown = function dropdownHandleKeyDown2(event) {
12502
+ var key = normalizeArrowKey(event);
12503
+ if (key && dropdownKeyDownHandlers[key]) {
12504
+ dropdownKeyDownHandlers[key](event);
12505
+ }
12506
+ };
12507
+ var dropdownHandleClick = function dropdownHandleClick2() {
12508
+ dispatch({
12509
+ type: DropdownClick
12510
+ });
12511
+ };
12512
+ return _extends((_extends3 = {}, _extends3[refKey] = handleRefs(ref, function(dropdownNode) {
12513
+ if (dropdownNode) {
12514
+ dropdownRef.current = dropdownNode;
12515
+ }
12516
+ }), _extends3), !preventKeyAction && {
12517
+ onKeyDown: callAllEventHandlers(onKeyDown, dropdownHandleKeyDown),
12518
+ onClick: callAllEventHandlers(onClick, dropdownHandleClick)
12519
+ }, rest);
12520
+ }, [dispatch, dropdownKeyDownHandlers, setGetterPropCallInfo]);
12521
+ var addSelectedItem = q$1(function(selectedItem) {
12522
+ dispatch({
12523
+ type: FunctionAddSelectedItem,
12524
+ selectedItem
12525
+ });
12526
+ }, [dispatch]);
12527
+ var removeSelectedItem = q$1(function(selectedItem) {
12528
+ dispatch({
12529
+ type: FunctionRemoveSelectedItem,
12530
+ selectedItem
12531
+ });
12532
+ }, [dispatch]);
12533
+ var setSelectedItems = q$1(function(newSelectedItems) {
12534
+ dispatch({
12535
+ type: FunctionSetSelectedItems,
12536
+ selectedItems: newSelectedItems
12537
+ });
12538
+ }, [dispatch]);
12539
+ var setActiveIndex = q$1(function(newActiveIndex) {
12540
+ dispatch({
12541
+ type: FunctionSetActiveIndex,
12542
+ activeIndex: newActiveIndex
12543
+ });
12544
+ }, [dispatch]);
12545
+ var reset = q$1(function() {
12546
+ dispatch({
12547
+ type: FunctionReset
12548
+ });
12549
+ }, [dispatch]);
12550
+ return {
12551
+ getSelectedItemProps,
12552
+ getDropdownProps,
12553
+ addSelectedItem,
12554
+ removeSelectedItem,
12555
+ setSelectedItems,
12556
+ setActiveIndex,
12557
+ reset,
12558
+ selectedItems,
12559
+ activeIndex
12560
+ };
12561
+ }
12144
12562
  function DownshiftCombobox({
12145
12563
  allItems,
12146
12564
  value,
@@ -12934,12 +13352,35 @@ const sequenceTypeFromSegment = (possibleSegment, referenceGenome) => {
12934
13352
  return void 0;
12935
13353
  };
12936
13354
  const parseAndValidateMutation = (value, referenceGenome) => {
13355
+ const possibleMutation = parseMutation(value, referenceGenome);
13356
+ if (possibleMutation === null) {
13357
+ return null;
13358
+ }
13359
+ const sequenceType = getSequenceType(possibleMutation.type);
13360
+ const isOutside = isOutsideReferenceGenome(possibleMutation.value, referenceGenome, sequenceType);
13361
+ if (isOutside) {
13362
+ return null;
13363
+ }
13364
+ return possibleMutation;
13365
+ };
13366
+ const getSequenceType = (type) => {
13367
+ switch (type) {
13368
+ case "nucleotideInsertions":
13369
+ case "nucleotideMutations":
13370
+ return "nucleotide";
13371
+ case "aminoAcidInsertions":
13372
+ case "aminoAcidMutations":
13373
+ return "amino acid";
13374
+ }
13375
+ };
13376
+ const parseMutation = (value, referenceGenome) => {
12937
13377
  const possibleInsertion = InsertionClass.parse(value);
12938
13378
  if (possibleInsertion !== null) {
12939
13379
  const sequenceType = sequenceTypeFromSegment(possibleInsertion.segment, referenceGenome);
12940
13380
  switch (sequenceType) {
12941
- case "nucleotide":
13381
+ case "nucleotide": {
12942
13382
  return { type: "nucleotideInsertions", value: possibleInsertion };
13383
+ }
12943
13384
  case "amino acid":
12944
13385
  return { type: "aminoAcidInsertions", value: possibleInsertion };
12945
13386
  case void 0:
@@ -12962,16 +13403,41 @@ const parseAndValidateMutation = (value, referenceGenome) => {
12962
13403
  if (possibleSubstitution !== null) {
12963
13404
  const sequenceType = sequenceTypeFromSegment(possibleSubstitution.segment, referenceGenome);
12964
13405
  switch (sequenceType) {
12965
- case "nucleotide":
13406
+ case "nucleotide": {
12966
13407
  return { type: "nucleotideMutations", value: possibleSubstitution };
12967
- case "amino acid":
13408
+ }
13409
+ case "amino acid": {
12968
13410
  return { type: "aminoAcidMutations", value: possibleSubstitution };
13411
+ }
12969
13412
  case void 0:
12970
13413
  return null;
12971
13414
  }
12972
13415
  }
12973
13416
  return null;
12974
13417
  };
13418
+ function isOutsideReferenceGenome(mutation, referenceGenome, sequenceType) {
13419
+ const lengthOfSegment = getLengthOfSegment(mutation.segment, referenceGenome, sequenceType);
13420
+ if (lengthOfSegment === void 0) {
13421
+ return true;
13422
+ }
13423
+ return mutation.position >= lengthOfSegment;
13424
+ }
13425
+ function getLengthOfSegment(segment, referenceGenome, sequenceType) {
13426
+ var _a, _b, _c;
13427
+ switch (sequenceType) {
13428
+ case "nucleotide": {
13429
+ if (referenceGenome.nucleotideSequences.length === 1) {
13430
+ return (_a = referenceGenome.nucleotideSequences.at(0)) == null ? void 0 : _a.sequence.length;
13431
+ }
13432
+ return (_b = referenceGenome.nucleotideSequences.find(
13433
+ (sequence) => sequence.name.toUpperCase() === (segment == null ? void 0 : segment.toUpperCase())
13434
+ )) == null ? void 0 : _b.sequence.length;
13435
+ }
13436
+ case "amino acid": {
13437
+ return (_c = referenceGenome.genes.find((gene) => gene.name.toUpperCase() === (segment == null ? void 0 : segment.toUpperCase()))) == null ? void 0 : _c.sequence.length;
13438
+ }
13439
+ }
13440
+ }
12975
13441
  const mutationFilterInnerPropsSchema = z$2.object({
12976
13442
  initialValue: z$2.union([mutationsFilterSchema.optional(), z$2.array(z$2.string()), z$2.undefined()])
12977
13443
  });
@@ -12983,38 +13449,30 @@ const MutationFilter = (props) => {
12983
13449
  return /* @__PURE__ */ u$1(
12984
13450
  ErrorBoundary,
12985
13451
  {
12986
- size: { height: "3.375rem", width },
13452
+ size: { height: "40px", width },
12987
13453
  layout: "horizontal",
12988
13454
  schema: mutationFilterPropsSchema,
12989
13455
  componentProps: props,
12990
- children: /* @__PURE__ */ u$1("div", { style: width, children: /* @__PURE__ */ u$1(MutationFilterInner, { initialValue }) })
13456
+ children: /* @__PURE__ */ u$1("div", { style: { width }, children: /* @__PURE__ */ u$1(MutationFilterInner, { initialValue }) })
12991
13457
  }
12992
13458
  );
12993
13459
  };
12994
- const MutationFilterInner = ({ initialValue }) => {
13460
+ function MutationFilterInner({ initialValue }) {
13461
+ var _a;
12995
13462
  const referenceGenome = x$1(ReferenceGenomeContext);
12996
- const [selectedFilters, setSelectedFilters] = d(
12997
- getInitialState(initialValue, referenceGenome)
12998
- );
12999
13463
  const filterRef = A$1(null);
13000
- if (referenceGenome.nucleotideSequences.length === 0 && referenceGenome.genes.length === 0) {
13001
- throw new UserFacingError(
13002
- "No reference sequences available",
13003
- "This organism has neither nucleotide nor amino acid sequences configured in its reference genome. You cannot filter by mutations."
13004
- );
13005
- }
13006
- const handleRemoveValue = (option) => {
13007
- const newSelectedFilters = {
13008
- ...selectedFilters,
13009
- [option.type]: selectedFilters[option.type].filter((i2) => option.value.toString() != i2.toString())
13010
- };
13011
- setSelectedFilters(newSelectedFilters);
13012
- fireChangeEvent(newSelectedFilters);
13013
- };
13014
- const fireChangeEvent = (selectedFilters2) => {
13015
- var _a;
13016
- const detail = mapToMutationFilterStrings(selectedFilters2);
13017
- (_a = filterRef.current) == null ? void 0 : _a.dispatchEvent(
13464
+ const [inputValue, setInputValue] = d("");
13465
+ const initialState = T$1(() => {
13466
+ return getInitialState(initialValue, referenceGenome);
13467
+ }, [initialValue, referenceGenome]);
13468
+ const [selectedItems, setSelectedItems] = d(initialState);
13469
+ const [itemCandidate, setItemCandidate] = d(null);
13470
+ const [showErrorIndicator, setShowErrorIndicator] = d(false);
13471
+ const items = itemCandidate ? [itemCandidate] : [];
13472
+ const fireChangeEvent = (selectedFilters) => {
13473
+ var _a2;
13474
+ const detail = mapToMutationFilterStrings(selectedFilters);
13475
+ (_a2 = filterRef.current) == null ? void 0 : _a2.dispatchEvent(
13018
13476
  new CustomEvent("gs-mutation-filter-changed", {
13019
13477
  detail,
13020
13478
  bubbles: true,
@@ -13022,152 +13480,155 @@ const MutationFilterInner = ({ initialValue }) => {
13022
13480
  })
13023
13481
  );
13024
13482
  };
13025
- return /* @__PURE__ */ u$1("div", { className: "w-full border border-gray-300 rounded-md relative", ref: filterRef, children: [
13026
- /* @__PURE__ */ u$1("div", { className: "absolute -top-3 -right-3 z-10", children: /* @__PURE__ */ u$1(MutationFilterInfo, {}) }),
13027
- /* @__PURE__ */ u$1("div", { className: "relative w-full p-1", children: [
13028
- /* @__PURE__ */ u$1(
13029
- MutationFilterSelector,
13030
- {
13031
- referenceGenome,
13032
- setSelectedFilters: (newSelectedFilters) => {
13033
- setSelectedFilters(newSelectedFilters);
13034
- fireChangeEvent(newSelectedFilters);
13035
- },
13036
- selectedFilters
13037
- }
13038
- ),
13039
- /* @__PURE__ */ u$1(
13040
- SelectedMutationFilterDisplay,
13041
- {
13042
- selectedFilters,
13043
- handleRemoveValue
13044
- }
13045
- )
13046
- ] })
13047
- ] });
13048
- };
13049
- function getInitialState(initialValue, referenceGenome) {
13050
- if (initialValue === void 0) {
13051
- return {
13052
- nucleotideMutations: [],
13053
- aminoAcidMutations: [],
13054
- nucleotideInsertions: [],
13055
- aminoAcidInsertions: []
13056
- };
13057
- }
13058
- const values = Array.isArray(initialValue) ? initialValue : Object.values(initialValue).flatMap((it) => it);
13059
- return values.reduce(
13060
- (selectedFilters, value) => {
13061
- const parsedMutation = parseAndValidateMutation(value, referenceGenome);
13062
- if (parsedMutation === null) {
13063
- return selectedFilters;
13064
- }
13065
- return {
13066
- ...selectedFilters,
13067
- [parsedMutation.type]: [...selectedFilters[parsedMutation.type], parsedMutation.value]
13068
- };
13069
- },
13070
- {
13071
- nucleotideMutations: [],
13072
- aminoAcidMutations: [],
13073
- nucleotideInsertions: [],
13074
- aminoAcidInsertions: []
13483
+ const handleSelectedItemsChanged = (newSelectedItems) => {
13484
+ fireChangeEvent(newSelectedItems);
13485
+ setSelectedItems(newSelectedItems);
13486
+ };
13487
+ const handleNewSelectedItem = (selectedItem2) => {
13488
+ if (selectedItem2) {
13489
+ handleSelectedItemsChanged([...selectedItems, selectedItem2]);
13490
+ setInputValue("");
13491
+ setItemCandidate(null);
13492
+ setShowErrorIndicator(false);
13075
13493
  }
13076
- );
13077
- }
13078
- const MutationFilterSelector = ({ referenceGenome, setSelectedFilters, selectedFilters }) => {
13079
- const [option, setOption] = d(null);
13080
- const [inputValue, setInputValue] = d("");
13081
- const selectorRef = A$1(null);
13082
- const handleInputChange = (newValue) => {
13083
- if (newValue.includes(",") || newValue.includes(";")) {
13084
- handleCommaSeparatedInput(newValue);
13494
+ };
13495
+ const handleInputChange = (newInputValue) => {
13496
+ setShowErrorIndicator(false);
13497
+ if (newInputValue == null ? void 0 : newInputValue.includes(",")) {
13498
+ const values = newInputValue == null ? void 0 : newInputValue.split(",").map((value) => {
13499
+ return { value, parsedValue: parseAndValidateMutation(value.trim(), referenceGenome) };
13500
+ });
13501
+ const validEntries = values.map((value) => value.parsedValue).filter((value) => value !== null);
13502
+ const invalidInput = values.filter((value) => value.parsedValue === null).map((value) => value.value.trim()).join(",");
13503
+ const selectedItemCandidates = [...selectedItems, ...validEntries];
13504
+ handleSelectedItemsChanged(extractUniqueValues(selectedItemCandidates));
13505
+ setInputValue(invalidInput);
13506
+ setItemCandidate(null);
13085
13507
  } else {
13086
- setInputValue(newValue);
13087
- const result = parseAndValidateMutation(newValue, referenceGenome);
13088
- setOption(result);
13089
- }
13090
- };
13091
- const handleCommaSeparatedInput = (inputValue2) => {
13092
- const inputValues = inputValue2.split(/[,;]/);
13093
- let newSelectedOptions = selectedFilters;
13094
- let updated = false;
13095
- const invalidQueries = [];
13096
- for (const value of inputValues) {
13097
- const trimmedValue = value.trim();
13098
- const parsedMutation = parseAndValidateMutation(trimmedValue, referenceGenome);
13099
- if (parsedMutation) {
13100
- const type = parsedMutation.type;
13101
- if (!selectedFilters[type].some((i2) => parsedMutation.value.toString() === i2.toString())) {
13102
- newSelectedOptions = {
13103
- ...newSelectedOptions,
13104
- [parsedMutation.type]: [...newSelectedOptions[parsedMutation.type], parsedMutation.value]
13105
- };
13106
- updated = true;
13508
+ setInputValue(newInputValue ?? "");
13509
+ if (newInputValue !== void 0) {
13510
+ const candidate = parseAndValidateMutation(newInputValue, referenceGenome);
13511
+ const alreadyExists = selectedItems.find(
13512
+ (selectedItem2) => selectedItem2.value.code === (candidate == null ? void 0 : candidate.value.code)
13513
+ );
13514
+ if (!alreadyExists) {
13515
+ setItemCandidate(candidate);
13107
13516
  }
13108
- } else {
13109
- invalidQueries.push(trimmedValue);
13110
13517
  }
13111
13518
  }
13112
- setInputValue(invalidQueries.join(","));
13113
- if (updated) {
13114
- setSelectedFilters(newSelectedOptions);
13115
- setOption(null);
13116
- }
13117
13519
  };
13118
- const handleOptionClick = () => {
13119
- if (option === null) {
13120
- return;
13121
- }
13122
- const type = option.type;
13123
- if (!selectedFilters[type].some((i2) => option.value.toString() === i2.toString())) {
13124
- const newSelectedValues = {
13125
- ...selectedFilters,
13126
- [option == null ? void 0 : option.type]: [...selectedFilters[option == null ? void 0 : option.type], option == null ? void 0 : option.value]
13127
- };
13128
- setSelectedFilters(newSelectedValues);
13129
- }
13130
- setInputValue("");
13131
- setOption(null);
13132
- };
13133
- const handleEnterPress = (event) => {
13134
- if (event.key === "Enter" && option !== null) {
13135
- handleOptionClick();
13136
- }
13137
- };
13138
- const handleBlur = (event) => {
13139
- var _a;
13140
- if (!((_a = selectorRef.current) == null ? void 0 : _a.contains(event.relatedTarget))) {
13141
- setOption(null);
13142
- }
13143
- };
13144
- return /* @__PURE__ */ u$1("div", { ref: selectorRef, tabIndex: -1, children: [
13145
- /* @__PURE__ */ u$1(
13146
- "input",
13147
- {
13148
- type: "text",
13149
- className: "w-full p-2 border-gray-300 border rounded-md",
13150
- placeholder: getPlaceholder(referenceGenome),
13151
- value: inputValue,
13152
- onInput: (e2) => {
13153
- handleInputChange(e2.target.value);
13154
- },
13155
- onKeyDown: (e2) => handleEnterPress(e2),
13156
- onFocus: () => handleInputChange(inputValue),
13157
- onBlur: handleBlur
13520
+ const shadowRoot = ((_a = filterRef.current) == null ? void 0 : _a.shadowRoot) ?? void 0;
13521
+ const environment = shadowRoot !== void 0 ? {
13522
+ addEventListener: window.addEventListener.bind(window),
13523
+ removeEventListener: window.removeEventListener.bind(window),
13524
+ document: shadowRoot.ownerDocument,
13525
+ Node: window.Node
13526
+ } : void 0;
13527
+ const { getDropdownProps, removeSelectedItem } = useMultipleSelection({
13528
+ selectedItems,
13529
+ onStateChange({ selectedItems: newSelectedItems, type }) {
13530
+ switch (type) {
13531
+ case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:
13532
+ handleSelectedItemsChanged(newSelectedItems ?? []);
13533
+ break;
13158
13534
  }
13159
- ),
13160
- option != null && /* @__PURE__ */ u$1(
13161
- "div",
13535
+ },
13536
+ environment
13537
+ });
13538
+ const { isOpen, getMenuProps, getInputProps, highlightedIndex, getItemProps, selectedItem } = useCombobox({
13539
+ items,
13540
+ itemToString(item) {
13541
+ return item ? item.value.code : "";
13542
+ },
13543
+ defaultHighlightedIndex: 0,
13544
+ inputValue,
13545
+ onStateChange({ inputValue: newInputValue, type, selectedItem: newSelectedItem }) {
13546
+ switch (type) {
13547
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
13548
+ case useCombobox.stateChangeTypes.ItemClick:
13549
+ case useCombobox.stateChangeTypes.InputBlur:
13550
+ handleNewSelectedItem(newSelectedItem);
13551
+ break;
13552
+ case useCombobox.stateChangeTypes.InputChange: {
13553
+ handleInputChange(newInputValue);
13554
+ break;
13555
+ }
13556
+ }
13557
+ },
13558
+ environment
13559
+ });
13560
+ if (referenceGenome.nucleotideSequences.length === 0 && referenceGenome.genes.length === 0) {
13561
+ throw new UserFacingError(
13562
+ "No reference sequences available",
13563
+ "This organism has neither nucleotide nor amino acid sequences configured in its reference genome. You cannot filter by mutations."
13564
+ );
13565
+ }
13566
+ return /* @__PURE__ */ u$1("div", { className: "w-full", ref: filterRef, children: [
13567
+ /* @__PURE__ */ u$1("div", { className: `flex gap-x-1 flex-wrap p-1 input h-fit w-full ${showErrorIndicator ? "input-error" : ""}`, children: [
13568
+ selectedItems.map((selectedItemForRender, index) => {
13569
+ return /* @__PURE__ */ u$1("div", { className: "my-1", children: /* @__PURE__ */ u$1(
13570
+ SelectedFilter,
13571
+ {
13572
+ handleRemoveValue: () => {
13573
+ removeSelectedItem(selectedItemForRender);
13574
+ },
13575
+ mutationFilter: selectedItemForRender
13576
+ }
13577
+ ) }, `selected-item-${index}`);
13578
+ }),
13579
+ /* @__PURE__ */ u$1("div", { className: "flex gap-0.5 grow p-1", children: [
13580
+ /* @__PURE__ */ u$1(
13581
+ "input",
13582
+ {
13583
+ placeholder: getPlaceholder(referenceGenome),
13584
+ className: "w-full focus:outline-none min-w-8",
13585
+ ...getInputProps(getDropdownProps({ preventKeyAction: isOpen })),
13586
+ onBlur: () => {
13587
+ setShowErrorIndicator(inputValue !== "");
13588
+ },
13589
+ size: 10
13590
+ }
13591
+ ),
13592
+ /* @__PURE__ */ u$1(MutationFilterInfo, {})
13593
+ ] })
13594
+ ] }),
13595
+ /* @__PURE__ */ u$1(
13596
+ "ul",
13162
13597
  {
13163
- role: "option",
13164
- className: "hover:bg-gray-300 absolute cursor-pointer p-2 border-1 border-slate-500 bg-slate-200",
13165
- onClick: () => handleOptionClick(),
13166
- children: option.value.toString()
13598
+ className: `absolute w-inherit bg-white mt-1 shadow-md max-h-80 overflow-scroll p-0 z-10 ${!isOpen && "hidden"}`,
13599
+ ...getMenuProps(),
13600
+ children: items.map((item, index) => /* @__PURE__ */ u$1(
13601
+ "li",
13602
+ {
13603
+ className: `${highlightedIndex === index && "bg-blue-300"} ${selectedItem === item && "font-bold"} py-2 px-3 shadow-sm flex flex-col cursor-pointer`,
13604
+ ...getItemProps({ item, index }),
13605
+ style: {
13606
+ backgroundColor: backgroundColorMap(item, highlightedIndex === index ? 0.4 : 0.2)
13607
+ },
13608
+ children: /* @__PURE__ */ u$1("span", { children: item.value.code })
13609
+ },
13610
+ `${item.value.code}${index}`
13611
+ ))
13167
13612
  }
13168
13613
  )
13169
13614
  ] });
13170
- };
13615
+ }
13616
+ function extractUniqueValues(newSelectedItems) {
13617
+ const uniqueMutationsMap = /* @__PURE__ */ new Map();
13618
+ for (const mutation of newSelectedItems) {
13619
+ if (!uniqueMutationsMap.has(mutation.value.code)) {
13620
+ uniqueMutationsMap.set(mutation.value.code, mutation);
13621
+ }
13622
+ }
13623
+ return Array.from(uniqueMutationsMap.values());
13624
+ }
13625
+ function getInitialState(initialValue, referenceGenome) {
13626
+ if (initialValue === void 0) {
13627
+ return [];
13628
+ }
13629
+ const values = Array.isArray(initialValue) ? initialValue : Object.values(initialValue).flatMap((it) => it);
13630
+ return values.map((value) => parseAndValidateMutation(value, referenceGenome)).filter((parsedMutation) => parsedMutation !== null);
13631
+ }
13171
13632
  function getPlaceholder(referenceGenome) {
13172
13633
  const nucleotideSubstitution = getExampleMutation(referenceGenome, "nucleotide", "substitution");
13173
13634
  const nucleotideInsertion = getExampleMutation(referenceGenome, "nucleotide", "insertion");
@@ -13176,74 +13637,63 @@ function getPlaceholder(referenceGenome) {
13176
13637
  const exampleMutations = [nucleotideSubstitution, nucleotideInsertion, aminoAcidSubstitution, aminoAcidInsertion].filter((example) => example !== "").join(", ");
13177
13638
  return `Enter a mutation (e.g. ${exampleMutations})`;
13178
13639
  }
13179
- const backgroundColor = {
13180
- aminoAcidMutations: singleGraphColorRGBByName("teal", 0.4),
13181
- nucleotideMutations: singleGraphColorRGBByName("green", 0.4),
13182
- aminoAcidInsertions: singleGraphColorRGBByName("purple", 0.4),
13183
- nucleotideInsertions: singleGraphColorRGBByName("indigo", 0.4)
13184
- };
13185
- const backgroundColorMap = (data) => {
13186
- return backgroundColor[data.type] || "lightgray";
13187
- };
13188
- const SelectedMutationFilterDisplay = ({ selectedFilters, handleRemoveValue }) => {
13189
- return /* @__PURE__ */ u$1("div", { className: "flex flex-wrap", children: [
13190
- selectedFilters.nucleotideMutations.map((mutation) => /* @__PURE__ */ u$1(
13191
- SelectedFilter,
13192
- {
13193
- handleRemoveValue,
13194
- mutationFilter: { type: "nucleotideMutations", value: mutation }
13195
- },
13196
- mutation.toString()
13197
- )),
13198
- selectedFilters.aminoAcidMutations.map((mutation) => /* @__PURE__ */ u$1(
13199
- SelectedFilter,
13200
- {
13201
- handleRemoveValue,
13202
- mutationFilter: { type: "aminoAcidMutations", value: mutation }
13203
- },
13204
- mutation.toString()
13205
- )),
13206
- selectedFilters.nucleotideInsertions.map((mutation) => /* @__PURE__ */ u$1(
13207
- SelectedFilter,
13208
- {
13209
- handleRemoveValue,
13210
- mutationFilter: { type: "nucleotideInsertions", value: mutation }
13211
- },
13212
- mutation.toString()
13213
- )),
13214
- selectedFilters.aminoAcidInsertions.map((mutation) => /* @__PURE__ */ u$1(
13215
- SelectedFilter,
13216
- {
13217
- handleRemoveValue,
13218
- mutationFilter: { type: "aminoAcidInsertions", value: mutation }
13219
- },
13220
- mutation.toString()
13221
- ))
13222
- ] });
13640
+ const backgroundColorMap = (data, alpha = 0.4) => {
13641
+ switch (data.type) {
13642
+ case "nucleotideMutations":
13643
+ return singleGraphColorRGBByName("green", alpha);
13644
+ case "aminoAcidMutations":
13645
+ return singleGraphColorRGBByName("teal", alpha);
13646
+ case "nucleotideInsertions":
13647
+ return singleGraphColorRGBByName("indigo", alpha);
13648
+ case "aminoAcidInsertions":
13649
+ return singleGraphColorRGBByName("purple", alpha);
13650
+ }
13223
13651
  };
13224
13652
  const SelectedFilter = ({ handleRemoveValue, mutationFilter }) => {
13225
13653
  return /* @__PURE__ */ u$1(
13226
13654
  "span",
13227
13655
  {
13228
- className: "center p-2 m-1 inline-flex text-black rounded-md",
13656
+ className: "center px-2 py-1 inline-flex text-black rounded-md",
13229
13657
  style: {
13230
13658
  backgroundColor: backgroundColorMap(mutationFilter)
13231
13659
  },
13232
13660
  children: [
13233
13661
  mutationFilter.value.toString(),
13234
- /* @__PURE__ */ u$1("button", { className: "ml-1 cursor-pointer", onClick: () => handleRemoveValue(mutationFilter), children: "×" })
13662
+ /* @__PURE__ */ u$1(
13663
+ "button",
13664
+ {
13665
+ className: "ml-1 cursor-pointer",
13666
+ "aria-label": `remove mutation filter ${mutationFilter.value.code}`,
13667
+ onClick: () => handleRemoveValue(mutationFilter),
13668
+ children: "×"
13669
+ }
13670
+ )
13235
13671
  ]
13236
13672
  },
13237
13673
  mutationFilter.value.toString()
13238
13674
  );
13239
13675
  };
13240
13676
  function mapToMutationFilterStrings(selectedFilters) {
13241
- return {
13242
- aminoAcidMutations: selectedFilters.aminoAcidMutations.map((mutation) => mutation.toString()),
13243
- nucleotideMutations: selectedFilters.nucleotideMutations.map((mutation) => mutation.toString()),
13244
- aminoAcidInsertions: selectedFilters.aminoAcidInsertions.map((insertion) => insertion.toString()),
13245
- nucleotideInsertions: selectedFilters.nucleotideInsertions.map((insertion) => insertion.toString())
13246
- };
13677
+ return selectedFilters.reduce(
13678
+ (acc, filter) => {
13679
+ switch (filter.type) {
13680
+ case "nucleotideMutations":
13681
+ return { ...acc, nucleotideMutations: [...acc.nucleotideMutations, filter.value.toString()] };
13682
+ case "aminoAcidMutations":
13683
+ return { ...acc, aminoAcidMutations: [...acc.aminoAcidMutations, filter.value.toString()] };
13684
+ case "nucleotideInsertions":
13685
+ return { ...acc, nucleotideInsertions: [...acc.nucleotideInsertions, filter.value.toString()] };
13686
+ case "aminoAcidInsertions":
13687
+ return { ...acc, aminoAcidInsertions: [...acc.aminoAcidInsertions, filter.value.toString()] };
13688
+ }
13689
+ },
13690
+ {
13691
+ aminoAcidMutations: [],
13692
+ nucleotideMutations: [],
13693
+ aminoAcidInsertions: [],
13694
+ nucleotideInsertions: []
13695
+ }
13696
+ );
13247
13697
  }
13248
13698
  var __defProp$1 = Object.defineProperty;
13249
13699
  var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;