@genspectrum/dashboard-components 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/custom-elements.json +151 -1
- package/dist/dashboard-components.js +164 -62
- package/dist/dashboard-components.js.map +1 -1
- package/dist/genspectrum-components.d.ts +63 -23
- package/package.json +1 -1
- package/src/lapisApi/lapisApi.ts +1 -1
- package/src/preact/aggregatedData/__mockData__/aggregated.json +585 -0
- package/src/preact/aggregatedData/aggregate-table.tsx +32 -0
- package/src/preact/aggregatedData/aggregate.stories.tsx +53 -0
- package/src/preact/aggregatedData/aggregate.tsx +98 -0
- package/src/query/queryAggregateData.spec.ts +32 -0
- package/src/query/queryAggregateData.ts +25 -0
- package/src/web-components/display/aggregate-component.mdx +25 -0
- package/src/web-components/display/aggregate-component.stories.ts +63 -0
- package/src/web-components/display/aggregate-component.tsx +51 -0
- package/src/web-components/display/index.ts +1 -0
- package/src/web-components/input/location-filter-component.stories.ts +2 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-components.js","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../src/web-components/lapis-context.ts","../src/web-components/reference-genome-context.ts","../src/lapisApi/ReferenceGenome.ts","../src/lapisApi/lapisTypes.ts","../src/lapisApi/lapisApi.ts","../src/web-components/app.ts","../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/preact/hooks/dist/hooks.module.js","../src/preact/mutationComparison/getMutationComparisonTableData.ts","../src/preact/components/table.tsx","../src/preact/shared/sort/sortSubstitutionsAndDeletions.ts","../src/preact/shared/table/formatProportion.ts","../src/preact/mutationComparison/mutation-comparison-table.tsx","../src/preact/components/chart.tsx","../src/preact/mutationComparison/mutation-comparison-venn.tsx","../src/utils/mutations.ts","../src/operator/FetchSubstitutionsOrDeletionsOperator.ts","../src/operator/SortOperator.ts","../src/query/querySubstitutionsOrDeletions.ts","../src/preact/mutationComparison/queryMutationData.ts","../src/preact/LapisUrlContext.ts","../src/preact/components/checkbox-selector.tsx","../src/preact/ReferenceGenomeContext.ts","../src/preact/components/SegmentSelector.tsx","../src/preact/components/csv-download-button.tsx","../src/preact/components/error-display.tsx","../src/preact/components/headline.tsx","../src/preact/components/info.tsx","../src/preact/components/loading-display.tsx","../src/preact/components/mutation-type-selector.tsx","../src/preact/components/no-data-display.tsx","../src/preact/components/min-max-range-slider.tsx","../src/preact/components/percent-intput.tsx","../src/preact/components/proportion-selector.tsx","../src/preact/components/proportion-selector-dropdown.tsx","../src/preact/components/tabs.tsx","../src/preact/useQuery.ts","../src/preact/mutationComparison/mutation-comparison.tsx","../src/web-components/PreactLitAdapter.tsx","../src/web-components/PreactLitAdapterWithGridJsStyles.tsx","../src/web-components/display/mutation-comparison-component.tsx","../src/preact/mutations/getInsertionsTableData.ts","../src/preact/mutations/getMutationsTableData.ts","../src/preact/shared/sort/sortMutationPositions.ts","../src/preact/mutations/getMutationsGridData.ts","../src/preact/mutations/mutations-grid.tsx","../src/preact/shared/sort/sortInsertions.ts","../src/preact/mutations/mutations-insertions-table.tsx","../src/preact/mutations/mutations-table.tsx","../src/operator/FetchInsertionsOperator.ts","../src/query/queryInsertions.ts","../src/preact/mutations/queryMutations.ts","../src/preact/mutations/mutations.tsx","../src/web-components/display/mutations-component.tsx","../src/preact/prevalenceOverTime/getPrevalenceOverTimeTableData.ts","../src/preact/shared/charts/LogitScale.ts","../src/preact/shared/charts/colors.ts","../src/preact/shared/charts/confideceInterval.ts","../src/preact/shared/charts/getYAxisScale.ts","../src/preact/prevalenceOverTime/prevalence-over-time-bar-chart.tsx","../node_modules/dayjs/esm/constant.js","../node_modules/dayjs/esm/locale/en.js","../node_modules/dayjs/esm/utils.js","../node_modules/dayjs/esm/index.js","../node_modules/dayjs/esm/plugin/advancedFormat/index.js","../node_modules/dayjs/esm/plugin/isoWeek/index.js","../src/utils/temporal.ts","../src/utils/utils.ts","../src/preact/prevalenceOverTime/prevalence-over-time-bubble-chart.tsx","../src/preact/prevalenceOverTime/prevalence-over-time-line-chart.tsx","../src/preact/prevalenceOverTime/prevalence-over-time-table.tsx","../src/operator/DivisionOperator.ts","../src/operator/FetchAggregatedOperator.ts","../src/operator/FillMissingOperator.ts","../src/operator/GroupByOperator.ts","../src/operator/GroupByAndSumOperator.ts","../src/operator/MapOperator.ts","../src/operator/SlidingOperator.ts","../src/query/queryPrevalenceOverTime.ts","../src/preact/components/select.tsx","../src/preact/components/confidence-interval-selector.tsx","../src/preact/components/scaling-selector.tsx","../src/preact/prevalenceOverTime/prevalence-over-time.tsx","../src/web-components/display/prevalence-over-time-component.tsx","../src/preact/relativeGrowthAdvantage/relative-growth-advantage-chart.tsx","../src/query/queryRelativeGrowthAdvantage.ts","../src/preact/relativeGrowthAdvantage/relative-growth-advantage.tsx","../src/web-components/display/relative-growth-advantage-component.tsx","../src/preact/dateRangeSelector/dateConversion.ts","../src/preact/dateRangeSelector/date-range-selector.tsx","../src/web-components/input/date-range-selector-component.tsx","../src/preact/locationFilter/fetchAutocompletionList.ts","../src/preact/locationFilter/location-filter.tsx","../src/web-components/input/location-filter-component.tsx","../src/preact/textInput/fetchAutocompleteList.ts","../src/preact/textInput/text-input.tsx","../src/web-components/input/text-input-component.tsx","../src/preact/mutationFilter/sequenceTypeFromSegment.ts","../src/preact/mutationFilter/parseAndValidateMutation.ts","../src/preact/shared/icons/DeleteIcon.tsx","../src/preact/mutationFilter/mutation-filter.tsx","../src/web-components/input/mutation-filter-component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:r,getOwnPropertyNames:h,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),y={attribute:!0,type:String,converter:u,reflect:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e(this.prototype,t,r)}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...h(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$EC(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f)(this[t],s))return;this.P(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.P(s,this[s],i)}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EU()}catch(s){throw t=!1,this._$EU(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EC(t,this[t]))),this._$EU()}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:\"open\"},b[d(\"elementProperties\")]=new Map,b[d(\"finalized\")]=new Map,p?.({ReactiveElement:b}),(a.reactiveElementVersions??=[]).push(\"2.0.4\");export{b as ReactiveElement,u as defaultConverter,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.P(o,void 0,t),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,r?{...t,wrapped:!0}:t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import { createContext } from '@lit/context';\n\nexport const lapisContext = createContext<string>('lapis-context');\n","import { createContext } from '@lit/context';\n\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\n\nexport const referenceGenomeContext = createContext<ReferenceGenome>('reference-genome-context');\n","import z from 'zod';\n\nimport type { SequenceType } from '../types';\n\nexport const referenceGenomeResponse = z.object({\n nucleotideSequences: z.array(\n z.object({\n name: z.string(),\n sequence: z.string(),\n }),\n ),\n genes: z.array(\n z.object({\n name: z.string(),\n sequence: z.string(),\n }),\n ),\n});\nexport type ReferenceGenome = z.infer<typeof referenceGenomeResponse>;\n\nexport const getSegmentNames = (referenceGenome: ReferenceGenome, sequenceType: SequenceType) => {\n switch (sequenceType) {\n case 'nucleotide': {\n return referenceGenome.nucleotideSequences.map((sequence) => sequence.name);\n }\n case 'amino acid': {\n return referenceGenome.genes.map((gene) => gene.name);\n }\n }\n};\n","import z, { type ZodTypeAny } from 'zod';\n\nexport const orderByType = z.enum(['ascending', 'descending']);\n\nexport const orderBy = z.object({\n field: z.string(),\n type: orderByType,\n});\n\nexport const lapisBaseRequest = z\n .object({\n limit: z.number().optional(),\n offset: z.number().optional(),\n fields: z.array(z.string()).optional(),\n orderBy: z.array(orderBy).optional(),\n })\n .catchall(z.union([z.boolean(), z.undefined(), z.string(), z.number(), z.null(), z.array(z.string())]));\nexport type LapisBaseRequest = z.infer<typeof lapisBaseRequest>;\n\nexport const mutationsRequest = lapisBaseRequest.extend({ minProportion: z.number().optional() });\nexport type MutationsRequest = z.infer<typeof mutationsRequest>;\n\nconst mutationProportionCount = z.object({\n mutation: z.string(),\n proportion: z.number(),\n count: z.number(),\n sequenceName: z.union([z.string(), z.null()]),\n mutationFrom: z.string(),\n mutationTo: z.string(),\n position: z.number(),\n});\nexport const mutationsResponse = makeLapisResponse(z.array(mutationProportionCount));\n\nconst insertionCount = z.object({\n insertion: z.string(),\n count: z.number(),\n insertedSymbols: z.string(),\n position: z.number(),\n sequenceName: z.union([z.string(), z.null()]),\n});\nexport const insertionsResponse = makeLapisResponse(z.array(insertionCount));\n\nexport const aggregatedItem = z.object({ count: z.number() }).catchall(z.union([z.string(), z.number(), z.null()]));\nexport const aggregatedResponse = makeLapisResponse(z.array(aggregatedItem));\nexport type AggregatedItem = z.infer<typeof aggregatedItem>;\n\nfunction makeLapisResponse<T extends ZodTypeAny>(data: T) {\n return z.object({\n data,\n });\n}\n","import { referenceGenomeResponse } from './ReferenceGenome';\nimport {\n aggregatedResponse,\n insertionsResponse,\n type LapisBaseRequest,\n type MutationsRequest,\n mutationsResponse,\n} from './lapisTypes';\nimport { type SequenceType } from '../types';\n\nexport async function fetchAggregated(lapisUrl: string, body: LapisBaseRequest, signal?: AbortSignal) {\n const response = await fetch(aggregatedEndpoint(lapisUrl), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return aggregatedResponse.parse(await response.json());\n}\n\nexport async function fetchInsertions(\n lapisUrl: string,\n body: LapisBaseRequest,\n sequenceType: SequenceType,\n signal?: AbortSignal,\n) {\n const response = await fetch(insertionsEndpoint(lapisUrl, sequenceType), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return insertionsResponse.parse(await response.json());\n}\n\nexport async function fetchSubstitutionsOrDeletions(\n lapisUrl: string,\n body: MutationsRequest,\n sequenceType: SequenceType,\n signal?: AbortSignal,\n) {\n const response = await fetch(substitutionsOrDeletionsEndpoint(lapisUrl, sequenceType), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return mutationsResponse.parse(await response.json());\n}\n\nexport async function fetchReferenceGenome(lapisUrl: string, signal?: AbortSignal) {\n const response = await fetch(referenceGenomeEndpoint(lapisUrl), {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n signal,\n });\n\n await handleErrors(response);\n return referenceGenomeResponse.parse(await response.json());\n}\n\nconst handleErrors = async (response: Response) => {\n if (!response.ok) {\n if (response.status % 500 === 0) {\n throw new Error(`${response.statusText}: ${JSON.stringify(await response.json())}`);\n }\n throw new Error(`${response.statusText}: ${response.status}`);\n }\n};\n\nexport const aggregatedEndpoint = (lapisUrl: string) => `${lapisUrl}/sample/aggregated`;\nexport const insertionsEndpoint = (lapisUrl: string, sequenceType: SequenceType) => {\n return sequenceType === 'amino acid'\n ? `${lapisUrl}/sample/aminoAcidInsertions`\n : `${lapisUrl}/sample/nucleotideInsertions`;\n};\nexport const substitutionsOrDeletionsEndpoint = (lapisUrl: string, sequenceType: SequenceType) => {\n return sequenceType === 'amino acid'\n ? `${lapisUrl}/sample/aminoAcidMutations`\n : `${lapisUrl}/sample/nucleotideMutations`;\n};\nexport const referenceGenomeEndpoint = (lapisUrl: string) => `${lapisUrl}/sample/referenceGenome`;\n","import { provide } from '@lit/context';\nimport { Task } from '@lit/task';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { lapisContext } from './lapis-context';\nimport { referenceGenomeContext } from './reference-genome-context';\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\nimport { fetchReferenceGenome } from '../lapisApi/lapisApi';\n\n@customElement('gs-app')\nexport class App extends LitElement {\n @provide({ context: lapisContext })\n @property()\n lapis: string = '';\n\n @provide({ context: referenceGenomeContext })\n referenceGenome: ReferenceGenome = {\n nucleotideSequences: [],\n genes: [],\n };\n\n private updateReferenceGenome = new Task(this, {\n task: async () => {\n this.referenceGenome = await fetchReferenceGenome(this.lapis);\n },\n args: () => [this.lapis],\n });\n\n override render() {\n return this.updateReferenceGenome.render({\n complete: () => {\n return html` <slot></slot>`;\n },\n error: () => html`<p>Error</p>`, // TODO(#143): Add more advanced error handling\n pending: () => {\n return html`<p>Loading...</p>`;\n },\n });\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-app': App;\n }\n}\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\""\";break;case 38:f=\"&\";break;case 60:f=\"<\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){var a,c,p={};for(c in t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),_=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(_=\"px;\"),i=i+l+\":\"+a+_}}return e+'=\"'+i+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(t)+'\"'}function _(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=_(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,_ as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n,a=e.__b,v=e.__r,l=e.diffed,m=e.__c,s=e.unmount,d=e.__;function h(n,t){e.__h&&e.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({__V:c}),u.__[n]}function p(n){return o=1,y(D,n)}function y(n,u,i){var o=h(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function _(n,u){var i=h(t++,3);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__H.__h.push(i))}function A(n,u){var i=h(t++,4);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__h.push(i))}function F(n){return o=5,q(function(){return{current:n}},[])}function T(n,t,r){o=6,A(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function q(n,r){var u=h(t++,7);return C(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function x(n,t){return o=8,q(function(){return n},t)}function P(n){var u=r.context[n.__c],i=h(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function V(n,t){e.useDebugValue&&e.useDebugValue(t?t(n):n)}function b(n){var u=h(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=h(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],e.__e(t,n.__v)}}e.__b=function(n){r=null,a&&a(n)},e.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),d&&d(n,t)},e.__r=function(n){v&&v(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},e.diffed=function(n){l&&l(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===e.requestAnimationFrame||((i=e.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},e.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],e.__e(r,n.__v)}}),m&&m(n,t)},e.unmount=function(n){s&&s(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&e.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{x as useCallback,P as useContext,V as useDebugValue,_ as useEffect,b as useErrorBoundary,g as useId,T as useImperativeHandle,A as useLayoutEffect,q as useMemo,y as useReducer,F as useRef,p as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\ntype Proportions = {\n [displayName: string]: number;\n};\n\nexport function getMutationComparisonTableData(data: Dataset<MutationData>, proportionInterval: ProportionInterval) {\n const mutationsToProportions = new Map<string, Proportions>();\n\n for (const mutationData of data.content) {\n for (const mutationEntry of mutationData.data) {\n const mutation = mutationEntry.mutation.toString();\n const proportions = mutationsToProportions.get(mutation) || {};\n proportions[mutationData.displayName] = mutationEntry.proportion;\n mutationsToProportions.set(mutation, proportions);\n }\n }\n\n return [...mutationsToProportions.entries()]\n .map(([mutation, proportions]) => {\n return {\n mutation,\n ...data.content\n .map((mutationData) => {\n return {\n [`${mutationData.displayName} prevalence`]: proportions[mutationData.displayName] || 0,\n };\n })\n .reduce((acc, val) => ({ ...acc, ...val }), {}),\n } as { mutation: string } & Proportions;\n })\n .filter((row) =>\n Object.values(row).some(\n (value) =>\n typeof value === 'number' && value >= proportionInterval.min && value <= proportionInterval.max,\n ),\n );\n}\n","import { Grid } from 'gridjs';\nimport { type OneDArray, type TColumn, type TData } from 'gridjs/dist/src/types';\nimport { type PaginationConfig } from 'gridjs/dist/src/view/plugin/pagination';\nimport { type ComponentChild } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\nimport 'gridjs/dist/theme/mermaid.css';\n\nexport const tableStyle = {\n table: {\n fontSize: '12px',\n },\n th: {\n padding: '4px',\n textAlign: 'center',\n },\n td: {\n textAlign: 'center',\n padding: '8px',\n },\n footer: {\n fontSize: '12px',\n },\n};\n\ninterface TableProps {\n data: TData;\n columns: OneDArray<TColumn | string | ComponentChild>;\n pagination: PaginationConfig | boolean;\n}\n\nexport const Table = ({ data, columns, pagination }: TableProps) => {\n const wrapper = useRef(null);\n\n useEffect(() => {\n if (wrapper.current === null) {\n return;\n }\n const grid = new Grid({\n columns,\n data,\n style: tableStyle,\n pagination,\n }).render(wrapper.current);\n\n return () => {\n grid.destroy();\n };\n });\n\n return <div ref={wrapper} />;\n};\n","export const substitutionAndDeletionRegex = /(?:([A-Za-z0-9]+):)?([A-Za-z])(\\d+)([A-Za-z]|-|\\*)/;\n\nexport const sortSubstitutionsAndDeletions = (a: string, b: string) => {\n const aMatch = a.match(substitutionAndDeletionRegex);\n const bMatch = b.match(substitutionAndDeletionRegex);\n\n if (aMatch && bMatch) {\n if (aMatch[1] !== bMatch[1]) {\n return aMatch[1].localeCompare(bMatch[1]);\n }\n if (aMatch[3] !== bMatch[3]) {\n return parseInt(aMatch[3], 10) - parseInt(bMatch[3], 10);\n }\n return aMatch[4].localeCompare(bMatch[4]);\n }\n throw new Error(`Invalid substitution or deletion: ${a} or ${b}`);\n};\n","export const formatProportion = (proportion: number) => {\n return `${(proportion * 100).toFixed(2)}%`;\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getMutationComparisonTableData } from './getMutationComparisonTableData';\nimport { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { Table } from '../components/table';\nimport { sortSubstitutionsAndDeletions } from '../shared/sort/sortSubstitutionsAndDeletions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\nexport interface MutationsTableProps {\n data: Dataset<MutationData>;\n proportionInterval: ProportionInterval;\n}\n\nexport const MutationComparisonTable: FunctionComponent<MutationsTableProps> = ({ data, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Mutation',\n sort: {\n compare: (a: string, b: string) => {\n return sortSubstitutionsAndDeletions(a, b);\n },\n },\n },\n {\n name: 'Prevalence',\n columns: data.content.map((mutationData) => {\n return {\n name: mutationData.displayName,\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n };\n }),\n },\n ];\n };\n\n const tableData = getMutationComparisonTableData(data, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { Chart, type ChartConfiguration } from 'chart.js';\nimport { useEffect, useRef } from 'preact/hooks';\n\nexport interface GsChartProps {\n configuration: ChartConfiguration;\n}\n\nconst GsChart = ({ configuration }: GsChartProps) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<Chart | null>(null);\n\n useEffect(() => {\n if (canvasRef.current === null) {\n return;\n }\n\n const ctx = canvasRef.current.getContext('2d');\n if (ctx === null) {\n return;\n }\n\n chartRef.current = new Chart(ctx, configuration);\n\n return () => {\n chartRef.current?.destroy();\n };\n }, [canvasRef, configuration]);\n\n return <canvas ref={canvasRef} />;\n};\n\nexport default GsChart;\n","import { type ActiveElement, Chart, type ChartConfiguration, type ChartEvent, registerables } from 'chart.js';\nimport { ArcSlice, extractSets, VennDiagramController } from 'chartjs-chart-venn';\nimport { type FunctionComponent } from 'preact';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\n\nimport { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport GsChart from '../components/chart';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\nChart.register(...registerables, VennDiagramController, ArcSlice);\n\nexport interface MutationComparisonVennProps {\n data: Dataset<MutationData>;\n proportionInterval: ProportionInterval;\n}\n\nexport const MutationComparisonVenn: FunctionComponent<MutationComparisonVennProps> = ({\n data,\n proportionInterval,\n}) => {\n const divRef = useRef<HTMLDivElement>(null);\n const noElementSelectedMessage = 'You have no elements selected. Click in the venn diagram to select.';\n const [selectedDatasetIndex, setSelectedDatasetIndex] = useState<null | number>(null);\n\n const sets = useMemo(\n () =>\n extractSets(\n data.content\n .map((mutationData) => ({\n displayName: mutationData.displayName,\n data: mutationData.data.filter(\n (mutationEntry) =>\n mutationEntry.proportion >= proportionInterval.min &&\n mutationEntry.proportion <= proportionInterval.max,\n ),\n }))\n .map((mutationData) => {\n return {\n label: mutationData.displayName,\n values: mutationData.data.map((mutationEntry) => mutationEntry.mutation.toString()),\n };\n }),\n ),\n [data, proportionInterval],\n );\n\n useEffect(() => {\n if (divRef.current === null) {\n return;\n }\n if (selectedDatasetIndex === null) {\n divRef.current.innerText = noElementSelectedMessage;\n return;\n }\n\n const values = sets.datasets[0].data[selectedDatasetIndex].values;\n const label = sets.datasets[0].data[selectedDatasetIndex].label;\n divRef.current!.innerText = `${label}: ${values.join(', ')}` || '';\n }, [divRef, selectedDatasetIndex, sets]);\n\n const config: ChartConfiguration = useMemo(\n () => ({\n type: 'venn',\n data: sets,\n options: {\n scales: {\n x: {\n ticks: {\n color: 'black',\n font: {\n size: 20,\n },\n },\n },\n y: {\n ticks: {\n color: 'blue',\n font: {\n size: 20,\n },\n },\n },\n },\n events: ['click'],\n onClick(_: ChartEvent, elements: ActiveElement[]) {\n if (elements.length === 0) {\n setSelectedDatasetIndex(null);\n }\n },\n backgroundColor: '#f5f5f5',\n animation: false,\n layout: {\n padding: 30,\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n filter: ({ dataIndex }) => {\n setSelectedDatasetIndex(dataIndex);\n return false;\n },\n },\n },\n },\n }),\n [sets],\n );\n\n if (data.content.length > 5) {\n return <div>Too many variants to display. Maximum are five. </div>;\n }\n\n return (\n <>\n <GsChart configuration={config} />\n <div class='flex flex-wrap break-words m-2' ref={divRef} />\n </>\n );\n};\n","import { type SequenceType } from '../types';\n\nexport interface Mutation {\n readonly segment: string | undefined;\n readonly position: number;\n readonly code: string;\n\n equals(other: Mutation): boolean;\n\n toString(): string;\n}\n\nexport const substitutionRegex =\n /^((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<valueAtReference>[A-Za-z])?(?<position>\\d+)(?<substitutionValue>[A-Za-z.])?$/;\n\nexport class Substitution implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly valueAtReference: string | undefined,\n readonly substitutionValue: string | undefined,\n readonly position: number,\n ) {\n const segmentString = this.segment ? `${this.segment}:` : '';\n const valueAtReferenceString = this.valueAtReference ? `${this.valueAtReference}` : '';\n const substitutionValueString = this.substitutionValue ? `${this.substitutionValue}` : '';\n this.code = `${segmentString}${valueAtReferenceString}${this.position}${substitutionValueString}`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Substitution)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.valueAtReference === other.valueAtReference &&\n this.substitutionValue === other.substitutionValue &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Substitution | null {\n const match = mutationStr.match(substitutionRegex);\n if (match === null || match.groups === undefined) {\n return null;\n }\n return new Substitution(\n match.groups.segment,\n match.groups.valueAtReference,\n match.groups.substitutionValue,\n parseInt(match.groups.position, 10),\n );\n }\n}\n\nexport const deletionRegex = /^((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<valueAtReference>[A-Za-z])?(?<position>\\d+)(-)$/;\n\nexport class Deletion implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly valueAtReference: string | undefined,\n readonly position: number,\n ) {\n const segmentString = this.segment ? `${this.segment}:` : '';\n const valueAtReferenceString = this.valueAtReference ? `${this.valueAtReference}` : '';\n this.code = `${segmentString}${valueAtReferenceString}${this.position}-`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Deletion)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.valueAtReference === other.valueAtReference &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Deletion | null {\n const match = mutationStr.match(deletionRegex);\n if (match === null || match.groups === undefined) {\n return null;\n }\n\n return new Deletion(match.groups.segment, match.groups.valueAtReference, parseInt(match.groups.position, 10));\n }\n}\n\nexport const insertionRegexp =\n /^ins_((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<position>\\d+):(?<insertedSymbols>(([A-Za-z?]|(\\.\\*))+))$/i;\n\nexport class Insertion implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly position: number,\n readonly insertedSymbols: string,\n ) {\n this.code = `ins_${this.segment ? `${this.segment}:` : ''}${this.position}:${this.insertedSymbols}`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Insertion)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.insertedSymbols === other.insertedSymbols &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Insertion | null {\n const match = mutationStr.match(insertionRegexp);\n if (match === null || match.groups === undefined) {\n return null;\n }\n\n return new Insertion(match.groups.segment, parseInt(match.groups.position, 10), match.groups.insertedSymbols);\n }\n}\n\nexport const bases: { [P in SequenceType]: string[] } = {\n nucleotide: ['A', 'C', 'G', 'T', '-'],\n 'amino acid': [\n 'I',\n 'L',\n 'V',\n 'F',\n 'M',\n 'C',\n 'A',\n 'G',\n 'P',\n 'T',\n 'S',\n 'Y',\n 'W',\n 'Q',\n 'N',\n 'H',\n 'E',\n 'D',\n 'K',\n 'R',\n '-',\n ],\n};\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchSubstitutionsOrDeletions } from '../lapisApi/lapisApi';\nimport { type LapisFilter, type SequenceType, type SubstitutionOrDeletionEntry } from '../types';\nimport { Deletion, Substitution } from '../utils/mutations';\n\nexport class FetchSubstitutionsOrDeletionsOperator implements Operator<SubstitutionOrDeletionEntry> {\n constructor(\n private filter: LapisFilter,\n private sequenceType: SequenceType,\n private minProportion?: number,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<SubstitutionOrDeletionEntry>> {\n const mutations = await this.fetchMutations(lapis, signal);\n\n const content: SubstitutionOrDeletionEntry[] = mutations.map(\n ({ count, proportion, mutationFrom, mutationTo, position, sequenceName }) => {\n if (mutationTo === '-') {\n return {\n type: 'deletion',\n mutation: new Deletion(sequenceName ?? undefined, mutationFrom, position),\n count,\n proportion,\n };\n }\n return {\n type: 'substitution',\n mutation: new Substitution(sequenceName ?? undefined, mutationFrom, mutationTo, position),\n count,\n proportion,\n };\n },\n );\n\n return { content };\n }\n\n private async fetchMutations(lapis: string, signal?: AbortSignal) {\n const filter = {\n ...this.filter,\n minProportion: this.minProportion,\n };\n\n return fetchSubstitutionsOrDeletions(lapis, filter, this.sequenceType, signal).then(\n (response) => response.data,\n );\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class SortOperator<S> implements Operator<S> {\n constructor(\n private child: Operator<S>,\n private compareFn: (a: S, b: S) => number,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<S>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n return {\n content: childEvaluated.content.sort(this.compareFn),\n };\n }\n}\n","import { FetchSubstitutionsOrDeletionsOperator } from '../operator/FetchSubstitutionsOrDeletionsOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type SequenceType } from '../types';\n\nexport function querySubstitutionsOrDeletions(\n variant: LapisFilter,\n sequenceType: SequenceType,\n lapis: string,\n signal?: AbortSignal,\n) {\n const fetchData = new FetchSubstitutionsOrDeletionsOperator(variant, sequenceType, 0);\n const sortData = new SortOperator(fetchData, (a, b) => {\n if (a.mutation.segment !== b.mutation.segment) {\n return (a.mutation.segment ?? '').localeCompare(b.mutation.segment ?? '');\n }\n return a.mutation.position - b.mutation.position;\n });\n return sortData.evaluate(lapis, signal);\n}\n","import { type MutationComparisonVariant } from './mutation-comparison';\nimport { querySubstitutionsOrDeletions } from '../../query/querySubstitutionsOrDeletions';\nimport { type SubstitutionOrDeletionEntry } from '../../types';\nimport { type DisplayedSegment } from '../components/SegmentSelector';\nimport { type DisplayedMutationType } from '../components/mutation-type-selector';\n\nexport type MutationData = {\n displayName: string;\n data: SubstitutionOrDeletionEntry[];\n};\n\nexport async function queryMutationData(\n variants: MutationComparisonVariant[],\n sequenceType: 'nucleotide' | 'amino acid',\n lapis: string,\n) {\n const mutationData = await Promise.all(\n variants.map(async (variant) => {\n return {\n displayName: variant.displayName,\n data: (await querySubstitutionsOrDeletions(variant.lapisFilter, sequenceType, lapis)).content,\n };\n }),\n );\n return { mutationData };\n}\n\nexport function filterMutationData(\n data: MutationData[],\n displayedSegments: DisplayedSegment[],\n displayedMutationTypes: DisplayedMutationType[],\n) {\n const byDisplayedSegments = (mutationEntry: SubstitutionOrDeletionEntry) => {\n if (mutationEntry.mutation.segment === undefined) {\n return true;\n }\n return displayedSegments.some(\n (displayedSegment) =>\n displayedSegment.segment === mutationEntry.mutation.segment && displayedSegment.checked,\n );\n };\n const byDisplayedMutationTypes = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return displayedMutationTypes.some(\n (displayedMutationType) =>\n displayedMutationType.checked && displayedMutationType.type === mutationEntry.type,\n );\n };\n\n return data.map((mutationEntry) => ({\n displayName: mutationEntry.displayName,\n data: mutationEntry.data.filter(byDisplayedSegments).filter(byDisplayedMutationTypes),\n }));\n}\n","import { createContext } from 'preact';\n\nexport const LapisUrlContext = createContext('');\n","export type CheckboxItem = {\n label: string;\n checked: boolean;\n};\n\nexport interface CheckboxSelectorProps<Item extends CheckboxItem = CheckboxItem> {\n className?: string;\n items: Item[];\n label: string;\n setItems: (items: Item[]) => void;\n}\n\nexport const CheckboxSelector = <Item extends CheckboxItem>({\n className,\n items,\n label,\n setItems,\n}: CheckboxSelectorProps<Item>) => {\n return (\n <div class={`dropdown ${className}`}>\n <div tabIndex={0} role='button' class='btn btn-xs text-nowrap'>\n {label}\n </div>\n <ul tabIndex={0} class='p-2 shadow menu dropdown-content z-[1] bg-base-100 rounded-box'>\n {items.map((item, index) => (\n <li class='flex flex-row items-center' key={item.label}>\n <label>\n <input\n type='checkbox'\n id={`item-${index}`}\n checked={item.checked}\n onChange={() => {\n const newItems = items.map((item, i) =>\n i === index ? { ...item, checked: !item.checked } : item,\n );\n setItems(newItems);\n }}\n />\n {item.label}\n </label>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import { createContext } from 'preact';\n\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\n\nexport const ReferenceGenomeContext = createContext<ReferenceGenome>({ nucleotideSequences: [], genes: [] });\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport { type CheckboxItem, CheckboxSelector } from './checkbox-selector';\nimport { getSegmentNames } from '../../lapisApi/ReferenceGenome';\nimport { type SequenceType } from '../../types';\nimport { ReferenceGenomeContext } from '../ReferenceGenomeContext';\n\nexport type DisplayedSegment = CheckboxItem & {\n segment: string;\n};\n\nexport type SegmentSelectorProps = {\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (items: DisplayedSegment[]) => void;\n prefix?: string;\n};\n\nconst getSegmentSelectorLabel = (displayedSegments: DisplayedSegment[], prefix: string) => {\n const allSelectedSelected = displayedSegments\n .filter((segment) => segment.checked)\n .map((segment) => segment.segment);\n\n if (allSelectedSelected.length === 0) {\n return `${prefix}none`;\n }\n if (displayedSegments.length === allSelectedSelected.length) {\n return `${prefix}all`;\n }\n return prefix + allSelectedSelected.join(', ');\n};\n\nexport const SegmentSelector: FunctionComponent<SegmentSelectorProps> = ({\n displayedSegments,\n setDisplayedSegments,\n prefix,\n}) => {\n if (displayedSegments.length <= 1) {\n return null;\n }\n\n return (\n <CheckboxSelector\n className='mx-1'\n items={displayedSegments}\n label={getSegmentSelectorLabel(displayedSegments, prefix || 'Segments: ')}\n setItems={(items) => setDisplayedSegments(items)}\n />\n );\n};\n\nexport function useDisplayedSegments(sequenceType: SequenceType) {\n const referenceGenome = useContext(ReferenceGenomeContext);\n\n const displayedSegments = getSegmentNames(referenceGenome, sequenceType).map((segment) => ({\n segment,\n label: segment,\n checked: true,\n }));\n\n return useState<DisplayedSegment[]>(displayedSegments);\n}\n","import { type FunctionComponent } from 'preact';\n\nexport interface CsvDownloadButtonProps {\n label?: string;\n filename?: string;\n getData: () => Record<string, string | number | boolean | null>[];\n className?: string;\n}\n\nexport const CsvDownloadButton: FunctionComponent<CsvDownloadButtonProps> = ({\n label = 'Download',\n filename = 'data.csv',\n getData,\n className,\n}) => {\n const download = () => {\n const content = getDownloadContent();\n const blob = new Blob([content], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const getDownloadContent = () => {\n const data = getData();\n const keys = getDataKeys(data);\n const header = `${keys.join(',')}\\n`;\n const rows = data.map((row) => keys.map((key) => row[key]).join(',')).join('\\n');\n return header + rows;\n };\n\n const getDataKeys = (data: Record<string, string | number | boolean | null>[]) => {\n const keysSet = data\n .map((row) => Object.keys(row))\n .reduce((accumulatedKeys, keys) => {\n keys.forEach((key) => accumulatedKeys.add(key));\n return accumulatedKeys;\n }, new Set<string>());\n\n return [...keysSet];\n };\n\n return (\n <button className={className} onClick={download}>\n {label}\n </button>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nexport const ErrorDisplay: FunctionComponent<{ error: Error }> = ({ error }) => {\n return <div>Error: {error.message}</div>;\n};\n","import { type FunctionComponent } from 'preact';\n\nexport interface HeadlineProps {\n heading: string;\n}\n\nconst Headline: FunctionComponent<HeadlineProps> = ({ heading, children }) => {\n return (\n <>\n <h1>{heading}</h1>\n {children}\n </>\n );\n};\n\nexport default Headline;\n","import { type FunctionComponent } from 'preact';\n\nexport interface InfoProps {\n content: string;\n className?: string;\n}\n\nconst Info: FunctionComponent<InfoProps> = ({ content, className }) => {\n return (\n <div class={`${className} tooltip`} data-tip={content}>\n <button class='btn btn-xs'>?</button>\n </div>\n );\n};\n\nexport default Info;\n","import { type FunctionComponent } from 'preact';\n\nexport const LoadingDisplay: FunctionComponent = () => {\n return <div>Loading...</div>;\n};\n","import { type FunctionComponent } from 'preact/compat';\n\nimport { type CheckboxItem, CheckboxSelector } from './checkbox-selector';\nimport type { SubstitutionOrDeletion } from '../../types';\n\nexport type DisplayedMutationType = CheckboxItem & {\n type: SubstitutionOrDeletion;\n};\n\nexport type MutationTypeSelectorProps = {\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (mutationTypes: DisplayedMutationType[]) => void;\n};\n\nexport const MutationTypeSelector: FunctionComponent<MutationTypeSelectorProps> = ({\n displayedMutationTypes,\n setDisplayedMutationTypes,\n}) => {\n const checkedLabels = displayedMutationTypes.filter((type) => type.checked).map((type) => type.label);\n const mutationTypesSelectorLabel = `Types: ${checkedLabels.length > 0 ? checkedLabels.join(', ') : 'None'}`;\n\n return (\n <CheckboxSelector\n className='mx-1'\n items={displayedMutationTypes}\n label={mutationTypesSelectorLabel}\n setItems={(items) => setDisplayedMutationTypes(items)}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nexport const NoDataDisplay: FunctionComponent = () => {\n return <div>No data available.</div>;\n};\n","import { type FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { type ChangeEvent } from 'react';\nimport './min-max-percent-slider.css';\n\nexport interface MinMaxPercentSliderProps {\n min: number;\n max: number;\n setMin: (min: number) => void;\n setMax: (max: number) => void;\n rangeMin?: number;\n rangeMax?: number;\n step?: number;\n}\n\nexport const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({\n min,\n max,\n setMin,\n setMax,\n rangeMin = 0,\n rangeMax = 100,\n step = 0.1,\n}) => {\n const sliderColor = '#C6C6C6';\n const rangeColor = '#387bbe';\n\n const [zIndexTo, setZIndexTo] = useState(0);\n\n const onMinChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const minValue = Number(input.value);\n\n if (minValue > max) {\n setMax(minValue);\n setMin(minValue);\n } else {\n setMin(minValue);\n }\n };\n\n const onMaxChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const maxValue = Number(input.value);\n\n if (maxValue <= 0) {\n setZIndexTo(2);\n } else {\n setZIndexTo(0);\n }\n\n if (maxValue < min) {\n setMin(maxValue);\n setMax(maxValue);\n } else {\n setMax(maxValue);\n }\n };\n\n const background = `\n linear-gradient(\n to right,\n ${sliderColor} 0%,\n ${sliderColor} ${min}%,\n ${rangeColor} ${min}%,\n ${rangeColor} ${max}%,\n ${sliderColor} ${max}%,\n ${sliderColor} 100%)\n `;\n\n return (\n <div class='my-4 relative'>\n <input\n id='fromSlider'\n type='range'\n value={min}\n onInput={onMinChange}\n min={rangeMin}\n max={rangeMax}\n step={step}\n style={{ background, zIndex: 1, height: 0 }}\n />\n <input\n id='toSlider'\n type='range'\n value={max}\n min={rangeMin}\n max={rangeMax}\n step={step}\n onInput={onMaxChange}\n style={{ background, zIndex: zIndexTo }}\n />\n </div>\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport { type ChangeEvent } from 'react';\n\nexport type PercentInputProps = {\n percentage: number;\n setPercentage: (percentage: number) => void;\n};\n\nconst percentageInRange = (percentage: number) => {\n return percentage <= 100 && percentage >= 0;\n};\n\nexport const PercentInput: FunctionComponent<PercentInputProps> = ({ percentage, setPercentage }) => {\n const [internalPercentage, setInternalPercentage] = useState(percentage);\n\n useEffect(() => {\n setInternalPercentage(percentage);\n }, [percentage]);\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const value = Number(input.value);\n\n const inRange = percentageInRange(value);\n\n if (inRange) {\n setPercentage(value);\n }\n setInternalPercentage(value);\n };\n\n const isError = !percentageInRange(internalPercentage);\n return (\n <label className={`input input-bordered flex items-center gap-2 w-32 ${isError ? 'input-error' : ''}`}>\n <input\n type='number'\n step={0.1}\n min={0}\n max={100}\n value={internalPercentage}\n onInput={handleInputChange}\n lang='en'\n className={`grow w-16`}\n />\n %\n </label>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { MinMaxRangeSlider } from './min-max-range-slider';\nimport { PercentInput } from './percent-intput';\n\nexport type ProportionInterval = { min: number; max: number };\n\nexport interface ProportionSelectorProps {\n proportionInterval: ProportionInterval;\n setMinProportion: (minProportion: number) => void;\n setMaxProportion: (maxProportion: number) => void;\n}\n\nexport const ProportionSelector: FunctionComponent<ProportionSelectorProps> = ({\n proportionInterval,\n setMinProportion,\n setMaxProportion,\n}) => {\n const { min: minProportion, max: maxProportion } = proportionInterval;\n return (\n <div class='flex flex-col w-64 mb-2'>\n <div class='flex items-center '>\n <PercentInput\n percentage={minProportion * 100}\n setPercentage={(percentage) => setMinProportion(percentage / 100)}\n />\n <div class='m-2'>-</div>\n <PercentInput\n percentage={maxProportion * 100}\n setPercentage={(percentage) => setMaxProportion(percentage / 100)}\n />\n </div>\n <div class='my-1'>\n <MinMaxRangeSlider\n min={minProportion * 100}\n max={maxProportion * 100}\n setMin={(percentage) => setMinProportion(percentage / 100)}\n setMax={(percentage) => setMaxProportion(percentage / 100)}\n />\n </div>\n </div>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { ProportionSelector, type ProportionSelectorProps } from './proportion-selector';\n\nexport interface ProportionSelectorDropdownProps extends ProportionSelectorProps {\n openDirection?: 'left' | 'right';\n}\n\nexport const ProportionSelectorDropdown: FunctionComponent<ProportionSelectorDropdownProps> = ({\n proportionInterval,\n setMinProportion,\n setMaxProportion,\n openDirection = 'right',\n}) => {\n const label = `${(proportionInterval.min * 100).toFixed(1)}% - ${(proportionInterval.max * 100).toFixed(1)}%`;\n\n return (\n <div class={`dropdown ${openDirection === 'left' ? 'dropdown-end' : ''}`}>\n <div tabIndex={0} role='button' class='btn btn-xs whitespace-nowrap'>\n Proportion {label}\n </div>\n <ul tabIndex={0} class='p-2 shadow menu dropdown-content z-[1] bg-base-100 rounded-box w-72'>\n <div class='mb-2 ml-2'>\n <ProportionSelector\n proportionInterval={proportionInterval}\n setMinProportion={setMinProportion}\n setMaxProportion={setMaxProportion}\n />\n </div>\n </ul>\n </div>\n );\n};\n","import { Fragment, type FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { type JSXInternal } from 'preact/src/jsx';\n\ntype Tab = {\n title: string;\n content: JSXInternal.Element;\n};\n\ninterface ComponentTabsProps {\n tabs: Tab[];\n toolbar?: JSXInternal.Element | ((activeTab: string) => JSXInternal.Element);\n}\n\nconst Tabs: FunctionComponent<ComponentTabsProps> = ({ tabs, toolbar }) => {\n const [activeTab, setActiveTab] = useState(tabs[0].title);\n\n const tabNames = tabs.map((tab) => tab.title).join(', ');\n\n const tabElements = tabs.map((tab) => {\n return (\n <Fragment key={tab.title}>\n <input\n type='radio'\n name={tabNames}\n role='tab'\n className='tab'\n aria-label={tab.title}\n checked={activeTab === tab.title}\n onChange={() => setActiveTab(tab.title)}\n />\n <div role='tabpanel' className='tab-content bg-base-100 border-base-300 rounded-box p-1'>\n {tab.content}\n </div>\n </Fragment>\n );\n });\n\n const toolbarElement = typeof toolbar === 'function' ? toolbar(activeTab) : toolbar;\n\n return (\n <div role='tablist' className='tabs tabs-lifted'>\n {tabElements}\n {toolbar && <div className='m-1 col-[9999]'>{toolbarElement}</div>}\n </div>\n );\n};\n\nexport default Tabs;\n","import { useEffect, useState } from 'preact/hooks';\n\nexport function useQuery<Data>(fetchDataCallback: () => Promise<Data>, dependencies: unknown[] = []) {\n const [data, setData] = useState<Data | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const result = await fetchDataCallback();\n setData(result);\n setError(null);\n } catch (error) {\n setError(error as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(dependencies)]);\n\n return { data, error, isLoading };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type Dispatch, type StateUpdater, useContext, useMemo, useState } from 'preact/hooks';\n\nimport { getMutationComparisonTableData } from './getMutationComparisonTableData';\nimport { MutationComparisonTable } from './mutation-comparison-table';\nimport { MutationComparisonVenn } from './mutation-comparison-venn';\nimport { filterMutationData, type MutationData, queryMutationData } from './queryMutationData';\nimport { type LapisFilter, type SequenceType } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { type DisplayedSegment, SegmentSelector, useDisplayedSegments } from '../components/SegmentSelector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { type DisplayedMutationType, MutationTypeSelector } from '../components/mutation-type-selector';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { ProportionSelectorDropdown } from '../components/proportion-selector-dropdown';\nimport Tabs from '../components/tabs';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'table' | 'venn';\n\nexport interface MutationComparisonVariant {\n lapisFilter: LapisFilter;\n displayName: string;\n}\n\nexport interface MutationComparisonProps {\n variants: MutationComparisonVariant[];\n sequenceType: SequenceType;\n views: View[];\n}\n\nexport const MutationComparison: FunctionComponent<MutationComparisonProps> = ({ variants, sequenceType, views }) => {\n const lapis = useContext(LapisUrlContext);\n\n const { data, error, isLoading } = useQuery(async () => {\n return queryMutationData(variants, sequenceType, lapis);\n }, [variants, sequenceType, lapis]);\n\n const headline = 'Mutation comparison';\n\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <MutationComparisonTabs data={data.mutationData} sequenceType={sequenceType} views={views} />\n </Headline>\n );\n};\n\ntype MutationComparisonTabsProps = {\n data: MutationData[];\n views: View[];\n sequenceType: SequenceType;\n};\n\nconst MutationComparisonTabs: FunctionComponent<MutationComparisonTabsProps> = ({ data, views, sequenceType }) => {\n const [proportionInterval, setProportionInterval] = useState({ min: 0.5, max: 1 });\n const [displayedMutationTypes, setDisplayedMutationTypes] = useState<DisplayedMutationType[]>([\n { label: 'Substitutions', checked: true, type: 'substitution' },\n { label: 'Deletions', checked: true, type: 'deletion' },\n ]);\n const [displayedSegments, setDisplayedSegments] = useDisplayedSegments(sequenceType);\n\n const filteredData = useMemo(\n () => filterMutationData(data, displayedSegments, displayedMutationTypes),\n [data, displayedSegments, displayedMutationTypes],\n );\n\n const getTab = (view: View) => {\n switch (view) {\n case 'table':\n return {\n title: 'Table',\n content: (\n <MutationComparisonTable\n data={{ content: filteredData }}\n proportionInterval={proportionInterval}\n />\n ),\n };\n case 'venn':\n return {\n title: 'Venn',\n content: (\n <MutationComparisonVenn\n data={{ content: filteredData }}\n proportionInterval={proportionInterval}\n />\n ),\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n return (\n <Tabs\n tabs={tabs}\n toolbar={\n <Toolbar\n displayedSegments={displayedSegments}\n setDisplayedSegments={setDisplayedSegments}\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n filteredData={filteredData}\n proportionInterval={proportionInterval}\n setProportionInterval={setProportionInterval}\n />\n }\n />\n );\n};\n\ntype ToolbarProps = {\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (segments: DisplayedSegment[]) => void;\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (types: DisplayedMutationType[]) => void;\n filteredData: MutationData[];\n proportionInterval: ProportionInterval;\n setProportionInterval: Dispatch<StateUpdater<ProportionInterval>>;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n displayedSegments,\n setDisplayedSegments,\n displayedMutationTypes,\n setDisplayedMutationTypes,\n filteredData,\n proportionInterval,\n setProportionInterval,\n}) => {\n return (\n <div class='flex flex-row'>\n <ProportionSelectorDropdown\n proportionInterval={proportionInterval}\n setMinProportion={(min) => setProportionInterval((prev) => ({ ...prev, min }))}\n setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}\n />\n <SegmentSelector displayedSegments={displayedSegments} setDisplayedSegments={setDisplayedSegments} />\n <MutationTypeSelector\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n />\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getMutationComparisonTableData({ content: filteredData }, proportionInterval)}\n filename='mutation_comparison.csv'\n />\n <Info className='mx-1' content='Info for mutation comparison' />\n </div>\n );\n};\n","import { consume } from '@lit/context';\nimport { type PropertyValues, ReactiveElement } from '@lit/reactive-element';\nimport { unsafeCSS } from 'lit';\nimport { render } from 'preact';\nimport { type JSXInternal } from 'preact/src/jsx';\n\nimport { lapisContext } from './lapis-context';\nimport { referenceGenomeContext } from './reference-genome-context';\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\nimport { LapisUrlContext } from '../preact/LapisUrlContext';\nimport { ReferenceGenomeContext } from '../preact/ReferenceGenomeContext';\nimport minMaxPercentSliderCss from '../preact/components/min-max-percent-slider.css?inline';\nimport tailwindStyle from '../styles/tailwind.css?inline';\n\nimport '../styles/tailwind.css';\nimport '../preact/components/min-max-percent-slider.css';\n\nconst tailwindElementCss = unsafeCSS(tailwindStyle);\nconst minMaxPercentSliderElementCss = unsafeCSS(minMaxPercentSliderCss);\n\nexport abstract class PreactLitAdapter extends ReactiveElement {\n static override styles = [tailwindElementCss, minMaxPercentSliderElementCss];\n\n /**\n * @internal\n * The URL of the Lapis instance.\n *\n * This component must be a child of a `gs-app` component.\n * This value will automatically be injected by the parent `gs-app` component.\n */\n @consume({ context: lapisContext })\n lapis: string = '';\n\n /**\n * @internal\n * The reference genomes of the underlying organism.\n * These will be fetched from the Lapis instance.\n *\n * This component must be a child of a `gs-app` component.\n * This value will automatically be injected by the parent `gs-app` component.\n */\n @consume({ context: referenceGenomeContext, subscribe: true })\n referenceGenome: ReferenceGenome = {\n nucleotideSequences: [],\n genes: [],\n };\n\n override update(changedProperties: PropertyValues) {\n console.log('this.lapis', this.lapis);\n const vdom = (\n <LapisUrlContext.Provider value={this.lapis}>\n <ReferenceGenomeContext.Provider value={this.referenceGenome}>\n {this.render()}\n </ReferenceGenomeContext.Provider>\n </LapisUrlContext.Provider>\n );\n super.update(changedProperties);\n render(vdom, this.renderRoot);\n }\n\n protected abstract render(): JSXInternal.Element;\n}\n","import gridJsStyle from 'gridjs/dist/theme/mermaid.css?inline';\nimport { unsafeCSS } from 'lit';\n\nimport { PreactLitAdapter } from './PreactLitAdapter';\n\nimport 'gridjs/dist/theme/mermaid.css';\n\nconst gridJsElementCss = unsafeCSS(gridJsStyle);\n\nexport abstract class PreactLitAdapterWithGridJsStyles extends PreactLitAdapter {\n static override styles = [...PreactLitAdapter.styles, gridJsElementCss];\n}\n","import { customElement, property } from 'lit/decorators.js';\n\nimport {\n MutationComparison,\n type MutationComparisonVariant,\n type View,\n} from '../../preact/mutationComparison/mutation-comparison';\nimport { type SequenceType } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-mutation-comparison-component')\nexport class MutationComparisonComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Array })\n variants: MutationComparisonVariant[] = [];\n\n @property({ type: String })\n sequenceType: SequenceType = 'nucleotide';\n\n @property({ type: Array })\n views: View[] = ['table'];\n\n override render() {\n return <MutationComparison variants={this.variants} sequenceType={this.sequenceType} views={this.views} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutation-comparison-component': MutationComparisonComponent;\n }\n}\n","import { type InsertionEntry } from '../../types';\n\nexport function getInsertionsTableData(data: InsertionEntry[]) {\n return data.map((mutationEntry) => {\n return {\n insertion: mutationEntry.mutation.toString(),\n count: mutationEntry.count,\n };\n });\n}\n","import { type SubstitutionOrDeletionEntry } from '../../types';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\nexport function getMutationsTableData(data: SubstitutionOrDeletionEntry[], proportionInterval: ProportionInterval) {\n const byProportion = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return mutationEntry.proportion >= proportionInterval.min && mutationEntry.proportion <= proportionInterval.max;\n };\n\n return data.filter(byProportion).map((mutationEntry) => {\n return {\n mutation: mutationEntry.mutation.toString(),\n type: mutationEntry.type,\n count: mutationEntry.count,\n proportion: mutationEntry.proportion,\n };\n });\n}\n","const pattern = /(?:([A-Za-z0-9]+):)?(\\d+)$/;\n\nexport const sortMutationPositions = (a: string, b: string) => {\n const aMatch = a.match(pattern);\n const bMatch = b.match(pattern);\n\n if (aMatch && bMatch) {\n if (aMatch[1] !== bMatch[1]) {\n return aMatch[1].localeCompare(bMatch[1]);\n }\n return parseInt(aMatch[2], 10) - parseInt(bMatch[2], 10);\n }\n throw new Error(`Invalid mutation position: ${a} or ${b}`);\n};\n","import { type BaseCell } from './mutations-grid';\nimport type { SequenceType, SubstitutionOrDeletionEntry } from '../../types';\nimport { bases } from '../../utils/mutations';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { sortMutationPositions } from '../shared/sort/sortMutationPositions';\n\nexport const getMutationsGridData = (\n data: SubstitutionOrDeletionEntry[],\n sequenceType: SequenceType,\n proportionInterval: ProportionInterval,\n) => {\n return accumulateByPosition(data, sequenceType).filter((row) => byProportion(row, proportionInterval));\n};\n\nconst accumulateByPosition = (data: SubstitutionOrDeletionEntry[], sequenceType: SequenceType) => {\n const basesOfView = bases[sequenceType];\n const positionsToProportionAtBase = new Map<string, Map<string | undefined, number>>();\n const referenceBases = new Map<string, string | undefined>();\n\n for (const mutationEntry of data) {\n const position =\n (mutationEntry.mutation.segment ? `${mutationEntry.mutation.segment}:` : '') +\n mutationEntry.mutation.position;\n referenceBases.set(position, mutationEntry.mutation.valueAtReference);\n\n const initiallyFillPositionsToProportionAtBase = () => {\n if (!positionsToProportionAtBase.has(position)) {\n const empty = new Map();\n basesOfView.forEach((base) => empty.set(base, 0));\n empty.set(mutationEntry.mutation.valueAtReference, 1);\n positionsToProportionAtBase.set(position, empty);\n }\n };\n initiallyFillPositionsToProportionAtBase();\n\n const substitutionValue =\n mutationEntry.type === 'substitution' ? mutationEntry.mutation.substitutionValue : '-';\n\n const subtractSubstitutionValue = () => {\n const proportionAtBase = positionsToProportionAtBase.get(position)!;\n proportionAtBase.set(substitutionValue, mutationEntry.proportion);\n proportionAtBase.set(\n mutationEntry.mutation.valueAtReference,\n proportionAtBase.get(mutationEntry.mutation.valueAtReference)! - mutationEntry.proportion,\n );\n };\n subtractSubstitutionValue();\n }\n const orderedPositionsToProportionAtBase = [...positionsToProportionAtBase.entries()]\n .map(([position, proportionsAtBase]) => ({ position, proportions: proportionsAtBase }))\n .sort((a, b) => {\n return sortMutationPositions(a.position, b.position);\n });\n\n return orderedPositionsToProportionAtBase.map((proportionsForBaseAtPosition) => {\n const proportions = bases[sequenceType].map((base) => {\n return {\n [base]: {\n proportion: proportionsForBaseAtPosition.proportions.get(base)!,\n isReference: base === referenceBases.get(proportionsForBaseAtPosition.position),\n },\n };\n });\n\n return {\n position: proportionsForBaseAtPosition.position,\n ...proportions.reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n } as MutationsGridDataRow;\n });\n};\n\nexport type BasesData = {\n [base: string]: BaseCell;\n};\nexport type MutationsGridDataRow = BasesData & { position: string };\n\nconst byProportion = (row: MutationsGridDataRow, proportionInterval: ProportionInterval) => {\n const numbersAndIsReference = Object.values(row).filter(\n (\n cell,\n ): cell is {\n proportion: number;\n isReference: boolean;\n } => typeof cell === 'object',\n );\n\n return numbersAndIsReference.some((cell) => {\n return (\n !cell.isReference && cell.proportion >= proportionInterval.min && cell.proportion <= proportionInterval.max\n );\n });\n};\n","import { type Row } from 'gridjs';\nimport { type FunctionComponent } from 'preact';\n\nimport { getMutationsGridData } from './getMutationsGridData';\nimport { type SequenceType, type SubstitutionOrDeletionEntry } from '../../types';\nimport { bases } from '../../utils/mutations';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { Table, tableStyle } from '../components/table';\nimport { sortMutationPositions } from '../shared/sort/sortMutationPositions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\ninterface MutationsGridProps {\n data: SubstitutionOrDeletionEntry[];\n sequenceType: SequenceType;\n proportionInterval: ProportionInterval;\n}\n\nexport type BaseCell = {\n proportion: number;\n isReference: boolean;\n};\n\nexport const MutationsGrid: FunctionComponent<MutationsGridProps> = ({ data, sequenceType, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Position',\n sort: {\n compare: (a: string, b: string) => {\n return sortMutationPositions(a, b);\n },\n },\n },\n ...getBasesHeaders(),\n ];\n };\n\n const getBasesHeaders = () => {\n return bases[sequenceType].map((base) => {\n return {\n name: base,\n sort: {\n compare: (a: BaseCell, b: BaseCell) => {\n const aProportion = a.proportion;\n const bProportion = b.proportion;\n if (aProportion < bProportion) {\n return -1;\n }\n if (aProportion > bProportion) {\n return 1;\n }\n\n return 0;\n },\n },\n formatter: (cell: BaseCell) => formatProportion(cell.proportion),\n attributes: (cell: BaseCell, row: Row) => {\n // grid-js: the cell and row are null for header cells\n if (row === null) {\n return {};\n }\n\n return styleCells(cell);\n },\n };\n });\n };\n\n const styleCells = (cell: BaseCell) => {\n if (cell.isReference || cell.proportion < 0.0001) {\n return {\n style: {\n ...tableStyle.td,\n color: 'gray',\n },\n };\n }\n return {};\n };\n\n const tableData = getMutationsGridData(data, sequenceType, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { Insertion } from '../../../utils/mutations';\n\nexport const sortInsertions = (a: string, b: string) => {\n const insertionA = Insertion.parse(a);\n const insertionB = Insertion.parse(b);\n\n if (insertionA && insertionB) {\n const segmentA = insertionA.segment;\n const segmentB = insertionB.segment;\n if (segmentA !== undefined && segmentB !== undefined && segmentA !== segmentB) {\n return segmentA.localeCompare(segmentB);\n }\n const positionA = insertionA.position;\n const positionB = insertionB.position;\n if (positionA !== positionB) {\n return positionA - positionB;\n }\n return insertionA.insertedSymbols.localeCompare(insertionB.insertedSymbols);\n }\n throw new Error(`Invalid insertion: ${a} or ${b}`);\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getInsertionsTableData } from './getInsertionsTableData';\nimport { type InsertionEntry } from '../../types';\nimport { Table } from '../components/table';\nimport { sortInsertions } from '../shared/sort/sortInsertions';\n\nexport interface InsertionsTableProps {\n data: InsertionEntry[];\n}\n\nexport const InsertionsTable: FunctionComponent<InsertionsTableProps> = ({ data }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Insertion',\n sort: {\n compare: (a: string, b: string) => {\n return sortInsertions(a, b);\n },\n },\n },\n {\n name: 'Count',\n sort: true,\n },\n ];\n };\n\n const tableData = getInsertionsTableData(data).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getMutationsTableData } from './getMutationsTableData';\nimport { type SubstitutionOrDeletionEntry } from '../../types';\nimport type { ProportionInterval } from '../components/proportion-selector';\nimport { Table } from '../components/table';\nimport { sortSubstitutionsAndDeletions } from '../shared/sort/sortSubstitutionsAndDeletions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\nexport interface MutationsTableProps {\n data: SubstitutionOrDeletionEntry[];\n proportionInterval: ProportionInterval;\n}\n\nconst MutationsTable: FunctionComponent<MutationsTableProps> = ({ data, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Mutation',\n sort: {\n compare: (a: string, b: string) => {\n return sortSubstitutionsAndDeletions(a, b);\n },\n },\n },\n {\n name: 'Type',\n sort: true,\n },\n {\n name: 'Count',\n sort: true,\n },\n {\n name: 'Proportion',\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n },\n ];\n };\n\n const tableData = getMutationsTableData(data, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n\nexport default MutationsTable;\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchInsertions } from '../lapisApi/lapisApi';\nimport { type InsertionEntry, type LapisFilter, type SequenceType } from '../types';\nimport { Insertion } from '../utils/mutations';\n\nexport class FetchInsertionsOperator implements Operator<InsertionEntry> {\n constructor(\n private filter: LapisFilter,\n private sequenceType: SequenceType,\n ) {}\n\n async evaluate(lapisUrl: string, signal?: AbortSignal): Promise<Dataset<InsertionEntry>> {\n const insertions = (await fetchInsertions(lapisUrl, this.filter, this.sequenceType, signal)).data;\n\n const content: InsertionEntry[] = insertions.map(({ count, insertedSymbols, sequenceName, position }) => ({\n type: 'insertion',\n mutation: new Insertion(sequenceName ?? undefined, position, insertedSymbols),\n count,\n }));\n\n return { content };\n }\n}\n","import { FetchInsertionsOperator } from '../operator/FetchInsertionsOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type SequenceType } from '../types';\n\nexport function queryInsertions(variant: LapisFilter, sequenceType: SequenceType, lapis: string, signal?: AbortSignal) {\n const fetchData = new FetchInsertionsOperator(variant, sequenceType);\n const sortData = new SortOperator(fetchData, (a, b) => {\n if (a.mutation.segment !== b.mutation.segment) {\n return (a.mutation.segment ?? '').localeCompare(b.mutation.segment ?? '');\n }\n return a.mutation.position - b.mutation.position;\n });\n return sortData.evaluate(lapis, signal);\n}\n","import { queryInsertions } from '../../query/queryInsertions';\nimport { querySubstitutionsOrDeletions } from '../../query/querySubstitutionsOrDeletions';\nimport {\n type InsertionEntry,\n type LapisFilter,\n type MutationEntry,\n type SubstitutionOrDeletionEntry,\n} from '../../types';\nimport { type DisplayedSegment } from '../components/SegmentSelector';\nimport { type DisplayedMutationType } from '../components/mutation-type-selector';\n\nexport async function queryMutationsData(\n variant: LapisFilter,\n sequenceType: 'nucleotide' | 'amino acid',\n lapis: string,\n) {\n const substitutionsOrDeletions = (await querySubstitutionsOrDeletions(variant, sequenceType, lapis)).content;\n const insertions = (await queryInsertions(variant, sequenceType, lapis)).content;\n\n return {\n substitutionsOrDeletions,\n insertions,\n };\n}\n\nexport function filterMutationsData(\n data: { insertions: InsertionEntry[]; substitutionsOrDeletions: SubstitutionOrDeletionEntry[] },\n displayedSegments: DisplayedSegment[],\n displayedMutationTypes: DisplayedMutationType[],\n) {\n function bySelectedSegments(mutationEntry: MutationEntry) {\n if (mutationEntry.mutation.segment === undefined) {\n return true;\n }\n return displayedSegments.some(\n (displayedSegment) =>\n displayedSegment.segment === mutationEntry.mutation.segment && displayedSegment.checked,\n );\n }\n\n const byDisplayedMutationTypes = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return displayedMutationTypes.some(\n (displayedMutationType) =>\n displayedMutationType.checked && displayedMutationType.type === mutationEntry.type,\n );\n };\n\n const filteredSubstitutionsOrDeletions = data.substitutionsOrDeletions.filter(bySelectedSegments);\n\n return {\n insertions: data.insertions.filter(bySelectedSegments),\n tableData: filteredSubstitutionsOrDeletions.filter(byDisplayedMutationTypes),\n gridData: filteredSubstitutionsOrDeletions,\n };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type Dispatch, type StateUpdater, useContext, useState } from 'preact/hooks';\n\nimport { getInsertionsTableData } from './getInsertionsTableData';\nimport { getMutationsTableData } from './getMutationsTableData';\nimport { MutationsGrid } from './mutations-grid';\nimport { InsertionsTable } from './mutations-insertions-table';\nimport MutationsTable from './mutations-table';\nimport { filterMutationsData, queryMutationsData } from './queryMutations';\nimport {\n type InsertionEntry,\n type LapisFilter,\n type SequenceType,\n type SubstitutionOrDeletionEntry,\n} from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { type DisplayedSegment, SegmentSelector, useDisplayedSegments } from '../components/SegmentSelector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { type DisplayedMutationType, MutationTypeSelector } from '../components/mutation-type-selector';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport type { ProportionInterval } from '../components/proportion-selector';\nimport { ProportionSelectorDropdown } from '../components/proportion-selector-dropdown';\nimport Tabs from '../components/tabs';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'table' | 'grid' | 'insertions';\n\nexport interface MutationsProps {\n variant: LapisFilter;\n sequenceType: SequenceType;\n views: View[];\n}\n\nexport const Mutations: FunctionComponent<MutationsProps> = ({ variant, sequenceType, views }) => {\n const lapis = useContext(LapisUrlContext);\n const { data, error, isLoading } = useQuery(async () => {\n return queryMutationsData(variant, sequenceType, lapis);\n }, [variant, sequenceType, lapis]);\n\n const headline = 'Mutations';\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <MutationsTabs mutationsData={data} sequenceType={sequenceType} views={views} />\n </Headline>\n );\n};\n\ntype MutationTabsProps = {\n mutationsData: { insertions: InsertionEntry[]; substitutionsOrDeletions: SubstitutionOrDeletionEntry[] };\n sequenceType: SequenceType;\n views: View[];\n};\n\nconst MutationsTabs: FunctionComponent<MutationTabsProps> = ({ mutationsData, sequenceType, views }) => {\n const [proportionInterval, setProportionInterval] = useState({ min: 0.05, max: 1 });\n\n const [displayedSegments, setDisplayedSegments] = useDisplayedSegments(sequenceType);\n const [displayedMutationTypes, setDisplayedMutationTypes] = useState<DisplayedMutationType[]>([\n { label: 'Substitutions', checked: true, type: 'substitution' },\n { label: 'Deletions', checked: true, type: 'deletion' },\n ]);\n\n const filteredData = filterMutationsData(mutationsData, displayedSegments, displayedMutationTypes);\n\n const getTab = (view: View) => {\n switch (view) {\n case 'table':\n return {\n title: 'Table',\n content: <MutationsTable data={filteredData.tableData} proportionInterval={proportionInterval} />,\n };\n case 'grid':\n return {\n title: 'Grid',\n content: (\n <MutationsGrid\n data={filteredData.gridData}\n sequenceType={sequenceType}\n proportionInterval={proportionInterval}\n />\n ),\n };\n case 'insertions':\n return {\n title: 'Insertions',\n content: <InsertionsTable data={filteredData.insertions} />,\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n const toolbar = (activeTab: string) => (\n <Toolbar\n activeTab={activeTab}\n displayedSegments={displayedSegments}\n setDisplayedSegments={setDisplayedSegments}\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n filteredData={filteredData}\n proportionInterval={proportionInterval}\n setProportionInterval={setProportionInterval}\n />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype ToolbarProps = {\n activeTab: string;\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (segments: DisplayedSegment[]) => void;\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (types: DisplayedMutationType[]) => void;\n filteredData: { tableData: SubstitutionOrDeletionEntry[]; insertions: InsertionEntry[] };\n proportionInterval: ProportionInterval;\n setProportionInterval: Dispatch<StateUpdater<ProportionInterval>>;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n activeTab,\n displayedSegments,\n setDisplayedSegments,\n displayedMutationTypes,\n setDisplayedMutationTypes,\n filteredData,\n proportionInterval,\n setProportionInterval,\n}) => {\n return (\n <div class='flex flex-row'>\n <SegmentSelector displayedSegments={displayedSegments} setDisplayedSegments={setDisplayedSegments} />\n {activeTab === 'Table' && (\n <MutationTypeSelector\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n displayedMutationTypes={displayedMutationTypes}\n />\n )}\n {(activeTab === 'Table' || activeTab === 'Grid') && (\n <>\n <ProportionSelectorDropdown\n proportionInterval={proportionInterval}\n setMinProportion={(min) => setProportionInterval((prev) => ({ ...prev, min }))}\n setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}\n openDirection={'left'}\n />\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getMutationsTableData(filteredData.tableData, proportionInterval)}\n filename='substitutionsAndDeletions.csv'\n />\n </>\n )}\n {activeTab === 'Insertions' && (\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getInsertionsTableData(filteredData.insertions)}\n filename='insertions.csv'\n />\n )}\n <Info className='mx-1' content='Info for mutations' />\n </div>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { Mutations, type View } from '../../preact/mutations/mutations';\nimport { type LapisFilter, type SequenceType } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-mutations-component')\nexport class MutationsComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Object })\n variant: LapisFilter = { displayName: '' };\n\n @property({ type: String })\n sequenceType: SequenceType = 'nucleotide';\n\n @property({ type: Array })\n views: View[] = ['table', 'grid'];\n\n override render() {\n return <Mutations variant={this.variant} sequenceType={this.sequenceType} views={this.views} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutations-component': MutationsComponent;\n }\n}\n","import { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { type TemporalGranularity } from '../../types';\n\nexport function getPrevalenceOverTimeTableData(data: PrevalenceOverTimeData, granularity: TemporalGranularity) {\n return data[0].content.map((row, rowNumber) => {\n const otherColumns = data\n .map((dataset) => ({\n [`${dataset.displayName} prevalence`]: dataset.content[rowNumber].prevalence.toFixed(4),\n [`${dataset.displayName} count`]: dataset.content[rowNumber].count,\n }))\n .reduce((acc, val) => ({ ...acc, ...val }), {});\n\n return {\n [granularity]: row.dateRange?.toString() ?? 'Unknown',\n ...otherColumns,\n };\n });\n}\n","import { type Chart, type CoreScaleOptions, Scale } from 'chart.js';\n\nexport class LogitScale extends Scale {\n static id = 'logit';\n\n constructor(cfg: { id: string; type: string; ctx: CanvasRenderingContext2D; chart: Chart }) {\n super(cfg);\n this.min = 0.001;\n this.max = 0.999;\n }\n\n override buildTicks() {\n const tickValues = [this.min, 0.01, 0.1, 0.5, 0.9, 0.99, this.max];\n\n this.ticks = tickValues.map((value) => ({ value }));\n return this.ticks;\n }\n\n getLogit(value: number): number {\n if (value <= 0) {\n return -Infinity;\n }\n if (value >= 1) {\n return Infinity;\n }\n\n return Math.log(value / (1 - value));\n }\n\n override getPixelForValue(value: number): number {\n const logitMin = this.getLogit(this.min);\n const logitMax = this.getLogit(this.max);\n\n const logitValue = this.getLogit(value);\n\n const decimal = (logitValue - logitMin) / (logitMax - logitMin);\n\n return this.getPixelForDecimal(decimal);\n }\n}\n\ndeclare module 'chart.js' {\n export interface CartesianScaleTypeRegistry {\n logit: {\n options: CoreScaleOptions;\n };\n }\n}\n","// colorblind friendly colors taken from https://personal.sron.nl/~pault/\n\nconst ColorsRGB = {\n indigo: [51, 34, 136],\n green: [17, 119, 51],\n cyan: [136, 204, 238],\n teal: [68, 170, 153],\n olive: [153, 153, 51],\n sand: [221, 204, 119],\n rose: [204, 102, 119],\n wine: [136, 34, 85],\n purple: [170, 68, 153],\n};\n\ntype GraphColor = keyof typeof ColorsRGB;\n\nexport const singleGraphColorRGBAById = (id: number, alpha = 1) => {\n const keys = Object.keys(ColorsRGB) as GraphColor[];\n const key = keys[id % keys.length];\n\n return `rgba(${ColorsRGB[key].join(',')},${alpha})`;\n};\n\nexport const singleGraphColorRGBByName = (name: GraphColor, alpha = 1) => {\n return `rgba(${ColorsRGB[name].join(',')},${alpha})`;\n};\n","// calculateWilsonInterval calculates the Wilson score interval for 95% confidence.\n//\n// This function is based on https://github.com/erikfox/wilson-interval, but without\n// high precision math.\n//\n// observed - number of observed positive outcomes\n// sample - number of experiments or size of the sample\nexport function wilson95PercentConfidenceInterval(observed: number, sample: number) {\n const p = observed / sample;\n const n = sample;\n const z = 1.9599639715843482;\n\n const numerator = p + (z * z) / (2 * n);\n const w_plus_minus = z * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * (n * n)));\n const denominator = 1 + (z * z) / n;\n\n return {\n lowerLimit: (numerator - w_plus_minus) / denominator,\n upperLimit: (numerator + w_plus_minus) / denominator,\n };\n}\n\nexport const confidenceIntervalDataLabel = (value: number, lowerLimit: number, upperLimit: number, prefix?: string) => {\n const label = prefix ? `${prefix}: ` : '';\n\n return `${label}${value.toFixed(3)} (${lowerLimit.toFixed(3)} - ${upperLimit.toFixed(3)})`;\n};\n\nexport type ConfidenceIntervalMethod = 'wilson' | 'none';\n","export type ScaleType = 'linear' | 'logarithmic' | 'logit';\n\nexport function getYAxisScale(scaleType: ScaleType) {\n switch (scaleType) {\n case 'linear': {\n return { beginAtZero: true, type: 'linear' as const, min: 0, max: 1 };\n }\n case 'logarithmic': {\n return { type: 'logarithmic' as const };\n }\n case 'logit':\n return { type: 'logit' as const };\n default:\n return { beginAtZero: true, type: 'linear' as const };\n }\n}\n","import { Chart, type ChartConfiguration, registerables, type TooltipItem } from 'chart.js';\nimport { BarWithErrorBar, BarWithErrorBarsController } from 'chartjs-chart-error-bars';\n\nimport { type PrevalenceOverTimeData, type PrevalenceOverTimeVariantData } from '../../query/queryPrevalenceOverTime';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport { type ConfidenceIntervalMethod, wilson95PercentConfidenceInterval } from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeBarChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n}\n\nChart.register(...registerables, LogitScale, BarWithErrorBarsController, BarWithErrorBar);\n\nconst PrevalenceOverTimeBarChart = ({\n data,\n yAxisScaleType,\n confidenceIntervalMethod,\n}: PrevalenceOverTimeBarChartProps) => {\n const config: ChartConfiguration = {\n type: BarWithErrorBarsController.id,\n data: {\n labels: data[0]?.content.map((dateRange) => dateRange.dateRange?.toString() ?? 'Unknown') || [],\n datasets: data.map((graphData, index) => datasets(graphData, index, confidenceIntervalMethod)),\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(confidenceIntervalMethod),\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nconst datasets = (\n prevalenceOverTimeVariant: PrevalenceOverTimeVariantData,\n index: number,\n confidenceIntervalMethod: ConfidenceIntervalMethod,\n) => {\n const generalConfig = {\n borderWidth: 1,\n pointRadius: 0,\n label: prevalenceOverTimeVariant.displayName,\n backgroundColor: singleGraphColorRGBAById(index, 0.3),\n borderColor: singleGraphColorRGBAById(index),\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => ({\n y: dataPoint.prevalence,\n yMin: wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).lowerLimit,\n yMax: wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).upperLimit,\n })),\n };\n default:\n return {\n ...generalConfig,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => dataPoint.prevalence),\n };\n }\n};\n\nconst tooltip = (confidenceIntervalMethod: ConfidenceIntervalMethod) => {\n const generalConfig = {\n mode: 'index' as const,\n intersect: false,\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n callbacks: {\n label: (context: TooltipItem<'barWithErrorBars'>) => {\n const value = context.dataset.data[context.dataIndex] as {\n y: number;\n yMin: number;\n yMax: number;\n };\n\n return `${context.dataset.label}: ${value.y.toFixed(3)} (${value.yMin.toFixed(3)} - ${value.yMax.toFixed(3)})`;\n },\n },\n };\n default:\n return generalConfig;\n }\n};\n\nexport default PrevalenceOverTimeBarChart;\n","export var SECONDS_A_MINUTE = 60;\nexport var SECONDS_A_HOUR = SECONDS_A_MINUTE * 60;\nexport var SECONDS_A_DAY = SECONDS_A_HOUR * 24;\nexport var SECONDS_A_WEEK = SECONDS_A_DAY * 7;\nexport var MILLISECONDS_A_SECOND = 1e3;\nexport var MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND; // English locales\n\nexport var MS = 'millisecond';\nexport var S = 'second';\nexport var MIN = 'minute';\nexport var H = 'hour';\nexport var D = 'day';\nexport var W = 'week';\nexport var M = 'month';\nexport var Q = 'quarter';\nexport var Y = 'year';\nexport var DATE = 'date';\nexport var FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ';\nexport var INVALID_DATE_STRING = 'Invalid Date'; // regex\n\nexport var REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nexport var REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;","// English [en]\n// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale\nexport default {\n name: 'en',\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n ordinal: function ordinal(n) {\n var s = ['th', 'st', 'nd', 'rd'];\n var v = n % 100;\n return \"[\" + n + (s[(v - 20) % 10] || s[v] || s[0]) + \"]\";\n }\n};","import * as C from './constant';\n\nvar padStart = function padStart(string, length, pad) {\n var s = String(string);\n if (!s || s.length >= length) return string;\n return \"\" + Array(length + 1 - s.length).join(pad) + string;\n};\n\nvar padZoneStr = function padZoneStr(instance) {\n var negMinutes = -instance.utcOffset();\n var minutes = Math.abs(negMinutes);\n var hourOffset = Math.floor(minutes / 60);\n var minuteOffset = minutes % 60;\n return \"\" + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + \":\" + padStart(minuteOffset, 2, '0');\n};\n\nvar monthDiff = function monthDiff(a, b) {\n // function from moment.js in order to keep the same result\n if (a.date() < b.date()) return -monthDiff(b, a);\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month());\n var anchor = a.clone().add(wholeMonthDiff, C.M);\n var c = b - anchor < 0;\n var anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M);\n return +(-(wholeMonthDiff + (b - anchor) / (c ? anchor - anchor2 : anchor2 - anchor)) || 0);\n};\n\nvar absFloor = function absFloor(n) {\n return n < 0 ? Math.ceil(n) || 0 : Math.floor(n);\n};\n\nvar prettyUnit = function prettyUnit(u) {\n var special = {\n M: C.M,\n y: C.Y,\n w: C.W,\n d: C.D,\n D: C.DATE,\n h: C.H,\n m: C.MIN,\n s: C.S,\n ms: C.MS,\n Q: C.Q\n };\n return special[u] || String(u || '').toLowerCase().replace(/s$/, '');\n};\n\nvar isUndefined = function isUndefined(s) {\n return s === undefined;\n};\n\nexport default {\n s: padStart,\n z: padZoneStr,\n m: monthDiff,\n a: absFloor,\n p: prettyUnit,\n u: isUndefined\n};","import * as C from './constant';\nimport en from './locale/en';\nimport U from './utils';\nvar L = 'en'; // global locale\n\nvar Ls = {}; // global loaded locale\n\nLs[L] = en;\nvar IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define\n\nvar isDayjs = function isDayjs(d) {\n return d instanceof Dayjs || !!(d && d[IS_DAYJS]);\n};\n\nvar parseLocale = function parseLocale(preset, object, isLocal) {\n var l;\n if (!preset) return L;\n\n if (typeof preset === 'string') {\n var presetLower = preset.toLowerCase();\n\n if (Ls[presetLower]) {\n l = presetLower;\n }\n\n if (object) {\n Ls[presetLower] = object;\n l = presetLower;\n }\n\n var presetSplit = preset.split('-');\n\n if (!l && presetSplit.length > 1) {\n return parseLocale(presetSplit[0]);\n }\n } else {\n var name = preset.name;\n Ls[name] = preset;\n l = name;\n }\n\n if (!isLocal && l) L = l;\n return l || !isLocal && L;\n};\n\nvar dayjs = function dayjs(date, c) {\n if (isDayjs(date)) {\n return date.clone();\n } // eslint-disable-next-line no-nested-ternary\n\n\n var cfg = typeof c === 'object' ? c : {};\n cfg.date = date;\n cfg.args = arguments; // eslint-disable-line prefer-rest-params\n\n return new Dayjs(cfg); // eslint-disable-line no-use-before-define\n};\n\nvar wrapper = function wrapper(date, instance) {\n return dayjs(date, {\n locale: instance.$L,\n utc: instance.$u,\n x: instance.$x,\n $offset: instance.$offset // todo: refactor; do not use this.$offset in you code\n\n });\n};\n\nvar Utils = U; // for plugin use\n\nUtils.l = parseLocale;\nUtils.i = isDayjs;\nUtils.w = wrapper;\n\nvar parseDate = function parseDate(cfg) {\n var date = cfg.date,\n utc = cfg.utc;\n if (date === null) return new Date(NaN); // null is invalid\n\n if (Utils.u(date)) return new Date(); // today\n\n if (date instanceof Date) return new Date(date);\n\n if (typeof date === 'string' && !/Z$/i.test(date)) {\n var d = date.match(C.REGEX_PARSE);\n\n if (d) {\n var m = d[2] - 1 || 0;\n var ms = (d[7] || '0').substring(0, 3);\n\n if (utc) {\n return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms));\n }\n\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n\n return new Date(date); // everything else\n};\n\nvar Dayjs = /*#__PURE__*/function () {\n function Dayjs(cfg) {\n this.$L = parseLocale(cfg.locale, null, true);\n this.parse(cfg); // for plugin\n\n this.$x = this.$x || cfg.x || {};\n this[IS_DAYJS] = true;\n }\n\n var _proto = Dayjs.prototype;\n\n _proto.parse = function parse(cfg) {\n this.$d = parseDate(cfg);\n this.init();\n };\n\n _proto.init = function init() {\n var $d = this.$d;\n this.$y = $d.getFullYear();\n this.$M = $d.getMonth();\n this.$D = $d.getDate();\n this.$W = $d.getDay();\n this.$H = $d.getHours();\n this.$m = $d.getMinutes();\n this.$s = $d.getSeconds();\n this.$ms = $d.getMilliseconds();\n } // eslint-disable-next-line class-methods-use-this\n ;\n\n _proto.$utils = function $utils() {\n return Utils;\n };\n\n _proto.isValid = function isValid() {\n return !(this.$d.toString() === C.INVALID_DATE_STRING);\n };\n\n _proto.isSame = function isSame(that, units) {\n var other = dayjs(that);\n return this.startOf(units) <= other && other <= this.endOf(units);\n };\n\n _proto.isAfter = function isAfter(that, units) {\n return dayjs(that) < this.startOf(units);\n };\n\n _proto.isBefore = function isBefore(that, units) {\n return this.endOf(units) < dayjs(that);\n };\n\n _proto.$g = function $g(input, get, set) {\n if (Utils.u(input)) return this[get];\n return this.set(set, input);\n };\n\n _proto.unix = function unix() {\n return Math.floor(this.valueOf() / 1000);\n };\n\n _proto.valueOf = function valueOf() {\n // timezone(hour) * 60 * 60 * 1000 => ms\n return this.$d.getTime();\n };\n\n _proto.startOf = function startOf(units, _startOf) {\n var _this = this;\n\n // startOf -> endOf\n var isStartOf = !Utils.u(_startOf) ? _startOf : true;\n var unit = Utils.p(units);\n\n var instanceFactory = function instanceFactory(d, m) {\n var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this);\n return isStartOf ? ins : ins.endOf(C.D);\n };\n\n var instanceFactorySet = function instanceFactorySet(method, slice) {\n var argumentStart = [0, 0, 0, 0];\n var argumentEnd = [23, 59, 59, 999];\n return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread\n _this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this);\n };\n\n var $W = this.$W,\n $M = this.$M,\n $D = this.$D;\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n\n switch (unit) {\n case C.Y:\n return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11);\n\n case C.M:\n return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1);\n\n case C.W:\n {\n var weekStart = this.$locale().weekStart || 0;\n var gap = ($W < weekStart ? $W + 7 : $W) - weekStart;\n return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M);\n }\n\n case C.D:\n case C.DATE:\n return instanceFactorySet(utcPad + \"Hours\", 0);\n\n case C.H:\n return instanceFactorySet(utcPad + \"Minutes\", 1);\n\n case C.MIN:\n return instanceFactorySet(utcPad + \"Seconds\", 2);\n\n case C.S:\n return instanceFactorySet(utcPad + \"Milliseconds\", 3);\n\n default:\n return this.clone();\n }\n };\n\n _proto.endOf = function endOf(arg) {\n return this.startOf(arg, false);\n };\n\n _proto.$set = function $set(units, _int) {\n var _C$D$C$DATE$C$M$C$Y$C;\n\n // private set\n var unit = Utils.p(units);\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + \"Month\", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + \"FullYear\", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + \"Hours\", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + \"Minutes\", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + \"Seconds\", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + \"Milliseconds\", _C$D$C$DATE$C$M$C$Y$C)[unit];\n var arg = unit === C.D ? this.$D + (_int - this.$W) : _int;\n\n if (unit === C.M || unit === C.Y) {\n // clone is for badMutable plugin\n var date = this.clone().set(C.DATE, 1);\n date.$d[name](arg);\n date.init();\n this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d;\n } else if (name) this.$d[name](arg);\n\n this.init();\n return this;\n };\n\n _proto.set = function set(string, _int2) {\n return this.clone().$set(string, _int2);\n };\n\n _proto.get = function get(unit) {\n return this[Utils.p(unit)]();\n };\n\n _proto.add = function add(number, units) {\n var _this2 = this,\n _C$MIN$C$H$C$S$unit;\n\n number = Number(number); // eslint-disable-line no-param-reassign\n\n var unit = Utils.p(units);\n\n var instanceFactorySet = function instanceFactorySet(n) {\n var d = dayjs(_this2);\n return Utils.w(d.date(d.date() + Math.round(n * number)), _this2);\n };\n\n if (unit === C.M) {\n return this.set(C.M, this.$M + number);\n }\n\n if (unit === C.Y) {\n return this.set(C.Y, this.$y + number);\n }\n\n if (unit === C.D) {\n return instanceFactorySet(1);\n }\n\n if (unit === C.W) {\n return instanceFactorySet(7);\n }\n\n var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms\n\n var nextTimeStamp = this.$d.getTime() + number * step;\n return Utils.w(nextTimeStamp, this);\n };\n\n _proto.subtract = function subtract(number, string) {\n return this.add(number * -1, string);\n };\n\n _proto.format = function format(formatStr) {\n var _this3 = this;\n\n var locale = this.$locale();\n if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING;\n var str = formatStr || C.FORMAT_DEFAULT;\n var zoneStr = Utils.z(this);\n var $H = this.$H,\n $m = this.$m,\n $M = this.$M;\n var weekdays = locale.weekdays,\n months = locale.months,\n meridiem = locale.meridiem;\n\n var getShort = function getShort(arr, index, full, length) {\n return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length);\n };\n\n var get$H = function get$H(num) {\n return Utils.s($H % 12 || 12, num, '0');\n };\n\n var meridiemFunc = meridiem || function (hour, minute, isLowercase) {\n var m = hour < 12 ? 'AM' : 'PM';\n return isLowercase ? m.toLowerCase() : m;\n };\n\n var matches = function matches(match) {\n switch (match) {\n case 'YY':\n return String(_this3.$y).slice(-2);\n\n case 'YYYY':\n return Utils.s(_this3.$y, 4, '0');\n\n case 'M':\n return $M + 1;\n\n case 'MM':\n return Utils.s($M + 1, 2, '0');\n\n case 'MMM':\n return getShort(locale.monthsShort, $M, months, 3);\n\n case 'MMMM':\n return getShort(months, $M);\n\n case 'D':\n return _this3.$D;\n\n case 'DD':\n return Utils.s(_this3.$D, 2, '0');\n\n case 'd':\n return String(_this3.$W);\n\n case 'dd':\n return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2);\n\n case 'ddd':\n return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3);\n\n case 'dddd':\n return weekdays[_this3.$W];\n\n case 'H':\n return String($H);\n\n case 'HH':\n return Utils.s($H, 2, '0');\n\n case 'h':\n return get$H(1);\n\n case 'hh':\n return get$H(2);\n\n case 'a':\n return meridiemFunc($H, $m, true);\n\n case 'A':\n return meridiemFunc($H, $m, false);\n\n case 'm':\n return String($m);\n\n case 'mm':\n return Utils.s($m, 2, '0');\n\n case 's':\n return String(_this3.$s);\n\n case 'ss':\n return Utils.s(_this3.$s, 2, '0');\n\n case 'SSS':\n return Utils.s(_this3.$ms, 3, '0');\n\n case 'Z':\n return zoneStr;\n // 'ZZ' logic below\n\n default:\n break;\n }\n\n return null;\n };\n\n return str.replace(C.REGEX_FORMAT, function (match, $1) {\n return $1 || matches(match) || zoneStr.replace(':', '');\n }); // 'ZZ'\n };\n\n _proto.utcOffset = function utcOffset() {\n // Because a bug at FF24, we're rounding the timezone offset around 15 minutes\n // https://github.com/moment/moment/pull/1871\n return -Math.round(this.$d.getTimezoneOffset() / 15) * 15;\n };\n\n _proto.diff = function diff(input, units, _float) {\n var _this4 = this;\n\n var unit = Utils.p(units);\n var that = dayjs(input);\n var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE;\n var diff = this - that;\n\n var getMonth = function getMonth() {\n return Utils.m(_this4, that);\n };\n\n var result;\n\n switch (unit) {\n case C.Y:\n result = getMonth() / 12;\n break;\n\n case C.M:\n result = getMonth();\n break;\n\n case C.Q:\n result = getMonth() / 3;\n break;\n\n case C.W:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK;\n break;\n\n case C.D:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY;\n break;\n\n case C.H:\n result = diff / C.MILLISECONDS_A_HOUR;\n break;\n\n case C.MIN:\n result = diff / C.MILLISECONDS_A_MINUTE;\n break;\n\n case C.S:\n result = diff / C.MILLISECONDS_A_SECOND;\n break;\n\n default:\n result = diff; // milliseconds\n\n break;\n }\n\n return _float ? result : Utils.a(result);\n };\n\n _proto.daysInMonth = function daysInMonth() {\n return this.endOf(C.M).$D;\n };\n\n _proto.$locale = function $locale() {\n // get locale object\n return Ls[this.$L];\n };\n\n _proto.locale = function locale(preset, object) {\n if (!preset) return this.$L;\n var that = this.clone();\n var nextLocaleName = parseLocale(preset, object, true);\n if (nextLocaleName) that.$L = nextLocaleName;\n return that;\n };\n\n _proto.clone = function clone() {\n return Utils.w(this.$d, this);\n };\n\n _proto.toDate = function toDate() {\n return new Date(this.valueOf());\n };\n\n _proto.toJSON = function toJSON() {\n return this.isValid() ? this.toISOString() : null;\n };\n\n _proto.toISOString = function toISOString() {\n // ie 8 return\n // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)\n // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')\n return this.$d.toISOString();\n };\n\n _proto.toString = function toString() {\n return this.$d.toUTCString();\n };\n\n return Dayjs;\n}();\n\nvar proto = Dayjs.prototype;\ndayjs.prototype = proto;\n[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) {\n proto[g[1]] = function (input) {\n return this.$g(input, g[0], g[1]);\n };\n});\n\ndayjs.extend = function (plugin, option) {\n if (!plugin.$i) {\n // install plugin only once\n plugin(option, Dayjs, dayjs);\n plugin.$i = true;\n }\n\n return dayjs;\n};\n\ndayjs.locale = parseLocale;\ndayjs.isDayjs = isDayjs;\n\ndayjs.unix = function (timestamp) {\n return dayjs(timestamp * 1e3);\n};\n\ndayjs.en = Ls[L];\ndayjs.Ls = Ls;\ndayjs.p = {};\nexport default dayjs;","import { FORMAT_DEFAULT } from '../../constant';\nexport default (function (o, c) {\n // locale needed later\n var proto = c.prototype;\n var oldFormat = proto.format;\n\n proto.format = function (formatStr) {\n var _this = this;\n\n var locale = this.$locale();\n\n if (!this.isValid()) {\n return oldFormat.bind(this)(formatStr);\n }\n\n var utils = this.$utils();\n var str = formatStr || FORMAT_DEFAULT;\n var result = str.replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function (match) {\n switch (match) {\n case 'Q':\n return Math.ceil((_this.$M + 1) / 3);\n\n case 'Do':\n return locale.ordinal(_this.$D);\n\n case 'gggg':\n return _this.weekYear();\n\n case 'GGGG':\n return _this.isoWeekYear();\n\n case 'wo':\n return locale.ordinal(_this.week(), 'W');\n // W for week\n\n case 'w':\n case 'ww':\n return utils.s(_this.week(), match === 'w' ? 1 : 2, '0');\n\n case 'W':\n case 'WW':\n return utils.s(_this.isoWeek(), match === 'W' ? 1 : 2, '0');\n\n case 'k':\n case 'kk':\n return utils.s(String(_this.$H === 0 ? 24 : _this.$H), match === 'k' ? 1 : 2, '0');\n\n case 'X':\n return Math.floor(_this.$d.getTime() / 1000);\n\n case 'x':\n return _this.$d.getTime();\n\n case 'z':\n return \"[\" + _this.offsetName() + \"]\";\n\n case 'zzz':\n return \"[\" + _this.offsetName('long') + \"]\";\n\n default:\n return match;\n }\n });\n return oldFormat.bind(this)(result);\n };\n});","import { D, W, Y } from '../../constant';\nvar isoWeekPrettyUnit = 'isoweek';\nexport default (function (o, c, d) {\n var getYearFirstThursday = function getYearFirstThursday(year, isUtc) {\n var yearFirstDay = (isUtc ? d.utc : d)().year(year).startOf(Y);\n var addDiffDays = 4 - yearFirstDay.isoWeekday();\n\n if (yearFirstDay.isoWeekday() > 4) {\n addDiffDays += 7;\n }\n\n return yearFirstDay.add(addDiffDays, D);\n };\n\n var getCurrentWeekThursday = function getCurrentWeekThursday(ins) {\n return ins.add(4 - ins.isoWeekday(), D);\n };\n\n var proto = c.prototype;\n\n proto.isoWeekYear = function () {\n var nowWeekThursday = getCurrentWeekThursday(this);\n return nowWeekThursday.year();\n };\n\n proto.isoWeek = function (week) {\n if (!this.$utils().u(week)) {\n return this.add((week - this.isoWeek()) * 7, D);\n }\n\n var nowWeekThursday = getCurrentWeekThursday(this);\n var diffWeekThursday = getYearFirstThursday(this.isoWeekYear(), this.$u);\n return nowWeekThursday.diff(diffWeekThursday, W) + 1;\n };\n\n proto.isoWeekday = function (week) {\n if (!this.$utils().u(week)) {\n return this.day(this.day() % 7 ? week : week - 7);\n }\n\n return this.day() || 7;\n };\n\n var oldStartOf = proto.startOf;\n\n proto.startOf = function (units, startOf) {\n var utils = this.$utils();\n var isStartOf = !utils.u(startOf) ? startOf : true;\n var unit = utils.p(units);\n\n if (unit === isoWeekPrettyUnit) {\n return isStartOf ? this.date(this.date() - (this.isoWeekday() - 1)).startOf('day') : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf('day');\n }\n\n return oldStartOf.bind(this)(units, startOf);\n };\n});","import dayjs from 'dayjs/esm';\nimport advancedFormat from 'dayjs/esm/plugin/advancedFormat';\nimport isoWeek from 'dayjs/esm/plugin/isoWeek';\n\ndayjs.extend(isoWeek);\ndayjs.extend(advancedFormat);\n\nexport class TemporalCache {\n private yearMonthDayCache = new Map<string, YearMonthDay>();\n private yearWeekCache = new Map<string, YearWeek>();\n private yearMonthCache = new Map<string, YearMonth>();\n private yearCache = new Map<string, Year>();\n\n private constructor() {}\n\n getYearMonthDay(s: string): YearMonthDay {\n if (!this.yearMonthDayCache.has(s)) {\n this.yearMonthDayCache.set(s, YearMonthDay.parse(s, this));\n }\n return this.yearMonthDayCache.get(s)!;\n }\n\n getYearMonth(s: string): YearMonth {\n if (!this.yearMonthCache.has(s)) {\n this.yearMonthCache.set(s, YearMonth.parse(s, this));\n }\n return this.yearMonthCache.get(s)!;\n }\n\n getYearWeek(s: string): YearWeek {\n if (!this.yearWeekCache.has(s)) {\n this.yearWeekCache.set(s, YearWeek.parse(s, this));\n }\n return this.yearWeekCache.get(s)!;\n }\n\n getYear(s: string): Year {\n if (!this.yearCache.has(s)) {\n this.yearCache.set(s, Year.parse(s, this));\n }\n return this.yearCache.get(s)!;\n }\n\n private static instance = new TemporalCache();\n\n static getInstance(): TemporalCache {\n return this.instance;\n }\n}\n\nexport class YearMonthDay {\n readonly date;\n readonly dayjs;\n\n constructor(\n readonly yearNumber: number,\n readonly monthNumber: number,\n readonly dayNumber: number,\n readonly cache: TemporalCache,\n ) {\n this.date = new Date(this.yearNumber, this.monthNumber - 1, this.dayNumber);\n this.dayjs = dayjs(this.date);\n }\n\n get text(): string {\n return this.dayjs.format('YYYY-MM-DD');\n }\n\n toString(): string {\n return this.text;\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.yearNumber}`);\n }\n\n get month(): YearMonth {\n return this.cache.getYearMonth(this.dayjs.format('YYYY-MM'));\n }\n\n get week(): YearWeek {\n return this.cache.getYearWeek(this.dayjs.format('GGGG-WW'));\n }\n\n addDays(days: number): YearMonthDay {\n const date = this.dayjs.add(days, 'day');\n const s = date.format('YYYY-MM-DD');\n return this.cache.getYearMonthDay(s);\n }\n\n minus(other: YearMonthDay): number {\n return this.dayjs.diff(other.dayjs, 'day');\n }\n\n static parse(s: string, cache: TemporalCache): YearMonthDay {\n const [year, month, day] = s.split('-').map((s) => parseInt(s, 10));\n return new YearMonthDay(year, month, day, cache);\n }\n}\n\nexport class YearWeek {\n constructor(\n readonly isoYearNumber: number,\n readonly isoWeekNumber: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY-WW');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstDay(): YearMonthDay {\n // \"The first week of the year, hence, always contains 4 January.\" https://en.wikipedia.org/wiki/ISO_week_date\n const firstDay = dayjs()\n .year(this.isoYearNumber)\n .month(1)\n .date(4)\n .isoWeek(this.isoWeekNumber)\n .startOf('isoWeek');\n return this.cache.getYearMonthDay(firstDay.format('YYYY-MM-DD'));\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.isoYearNumber}`);\n }\n\n addWeeks(weeks: number): YearWeek {\n const date = this.firstDay.dayjs.add(weeks, 'week');\n const s = date.format('YYYY-WW');\n return this.cache.getYearWeek(s);\n }\n\n minus(other: YearWeek): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'week');\n }\n\n static parse(s: string, cache: TemporalCache): YearWeek {\n const [year, week] = s.split('-').map((s) => parseInt(s, 10));\n return new YearWeek(year, week, cache);\n }\n}\n\nexport class YearMonth {\n constructor(\n readonly yearNumber: number,\n readonly monthNumber: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY-MM');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstDay(): YearMonthDay {\n return this.cache.getYearMonthDay(dayjs(`${this.yearNumber}-${this.monthNumber}-01`).format('YYYY-MM-DD'));\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.yearNumber}`);\n }\n\n addMonths(months: number): YearMonth {\n const date = this.firstDay.dayjs.add(months, 'month');\n const s = date.format('YYYY-MM');\n return this.cache.getYearMonth(s);\n }\n\n minus(other: YearMonth): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'month');\n }\n\n static parse(s: string, cache: TemporalCache): YearMonth {\n const [year, month] = s.split('-').map((s) => parseInt(s, 10));\n return new YearMonth(year, month, cache);\n }\n}\n\nexport class Year {\n constructor(\n readonly year: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstMonth(): YearMonth {\n return this.cache.getYearMonth(`${this.year}-01`);\n }\n\n get firstDay(): YearMonthDay {\n return this.firstMonth.firstDay;\n }\n\n addYears(years: number): Year {\n const date = this.firstDay.dayjs.add(years, 'year');\n const s = date.format('YYYY');\n return this.cache.getYear(s);\n }\n\n minus(other: Year): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'year');\n }\n\n static parse(s: string, cache: TemporalCache): Year {\n const year = parseInt(s, 10);\n return new Year(year, cache);\n }\n}\n\nexport type Temporal = YearMonthDay | YearWeek | YearMonth | Year;\n\nexport function generateAllDaysInRange(start: YearMonthDay, end: YearMonthDay): YearMonthDay[] {\n const days = [];\n const daysInBetween = end.minus(start);\n for (let i = 0; i <= daysInBetween; i++) {\n days.push(start.addDays(i));\n }\n return days;\n}\n\nexport function generateAllWeeksInRange(start: YearWeek, end: YearWeek): YearWeek[] {\n const weeks = [];\n const weeksInBetween = end.minus(start);\n for (let i = 0; i <= weeksInBetween; i++) {\n weeks.push(start.addWeeks(i));\n }\n return weeks;\n}\n\nexport function generateAllMonthsInRange(start: YearMonth, end: YearMonth): YearMonth[] {\n const months = [];\n const monthsInBetween = end.minus(start);\n for (let i = 0; i <= monthsInBetween; i++) {\n months.push(start.addMonths(i));\n }\n return months;\n}\n\nexport function generateAllYearsInRange(start: Year, end: Year): Year[] {\n const years = [];\n const yearsInBetween = end.minus(start);\n for (let i = 0; i <= yearsInBetween; i++) {\n years.push(start.addYears(i));\n }\n return years;\n}\n\nexport function generateAllInRange(start: Temporal | null, end: Temporal | null): Temporal[] {\n if (start === null || end === null) {\n return [];\n }\n if (start instanceof YearMonthDay && end instanceof YearMonthDay) {\n return generateAllDaysInRange(start, end);\n }\n if (start instanceof YearWeek && end instanceof YearWeek) {\n return generateAllWeeksInRange(start, end);\n }\n if (start instanceof YearMonth && end instanceof YearMonth) {\n return generateAllMonthsInRange(start, end);\n }\n if (start instanceof Year && end instanceof Year) {\n return generateAllYearsInRange(start, end);\n }\n throw new Error(`Invalid arguments: start and end must be of the same type: ${start}, ${end}`);\n}\n\nexport function minusTemporal(a: Temporal, b: Temporal): number {\n if (a instanceof YearMonthDay && b instanceof YearMonthDay) {\n return a.minus(b);\n }\n if (a instanceof YearWeek && b instanceof YearWeek) {\n return a.minus(b);\n }\n if (a instanceof YearMonth && b instanceof YearMonth) {\n return a.minus(b);\n }\n if (a instanceof Year && b instanceof Year) {\n return a.minus(b);\n }\n throw new Error(`Cannot compare ${a} and ${b}`);\n}\n\nexport function compareTemporal(a: Temporal | null, b: Temporal | null): number {\n if (a === null) {\n return 1;\n }\n if (b === null) {\n return -1;\n }\n const diff = minusTemporal(a, b);\n if (diff < 0) {\n return -1;\n }\n if (diff > 0) {\n return 1;\n }\n return 0;\n}\n\nexport function getMinMaxTemporal(values: Iterable<Temporal | null>): [Temporal, Temporal] | null {\n let min = null;\n let max = null;\n for (const value of values) {\n if (value === null) {\n continue;\n }\n if (min === null || compareTemporal(value, min) < 0) {\n min = value;\n }\n if (max === null || compareTemporal(value, max) > 0) {\n max = value;\n }\n }\n if (min === null || max === null) {\n return null;\n }\n return [min, max];\n}\n\nexport function addUnit(temporal: Temporal, amount: number): Temporal {\n if (temporal instanceof YearMonthDay) {\n return temporal.addDays(amount);\n }\n if (temporal instanceof YearWeek) {\n return temporal.addWeeks(amount);\n }\n if (temporal instanceof YearMonth) {\n return temporal.addMonths(amount);\n }\n if (temporal instanceof Year) {\n return temporal.addYears(amount);\n }\n throw new Error(`Invalid argument: ${temporal}`);\n}\n","import { type LapisFilter } from '../types';\n\nexport function getMinMaxNumber(values: Iterable<number>): [number, number] | null {\n let min = null;\n let max = null;\n for (const value of values) {\n if (min === null || value < min) {\n min = value;\n }\n if (max === null || value > max) {\n max = value;\n }\n }\n if (min === null || max === null) {\n return null;\n }\n return [min, max];\n}\n\nexport function mapLapisFilterToUrlParams(filter: LapisFilter): URLSearchParams {\n const params = Object.entries(filter).map(([key, value]) => [key, stringifyLapisFilterValue(value)]);\n\n return new URLSearchParams(params);\n}\n\nfunction stringifyLapisFilterValue(value: LapisFilter[string]) {\n if (value === null) {\n return 'null';\n }\n switch (typeof value) {\n case 'boolean':\n return value ? 'true' : 'false';\n case 'number':\n return value.toString();\n case 'string':\n return value;\n }\n}\n","import { Chart, type ChartConfiguration, registerables } from 'chart.js';\n\nimport { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { addUnit, minusTemporal } from '../../utils/temporal';\nimport { getMinMaxNumber } from '../../utils/utils';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeBubbleChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst PrevalenceOverTimeBubbleChart = ({ data, yAxisScaleType }: PrevalenceOverTimeBubbleChartProps) => {\n const firstDate = data[0].content[0].dateRange!;\n const total = data.map((graphData) => graphData.content.map((dataPoint) => dataPoint.total)).flat();\n const [minTotal, maxTotal] = getMinMaxNumber(total)!;\n const scaleBubble = (value: number) => {\n return ((value - minTotal) / (maxTotal - minTotal)) * 4.5 + 0.5;\n };\n\n const config: ChartConfiguration = {\n type: 'bubble',\n data: {\n datasets: data.map((graphData, index) => ({\n label: graphData.displayName,\n data: graphData.content\n .filter((dataPoint) => dataPoint.dateRange !== null)\n .map((dataPoint) => ({\n x: minusTemporal(dataPoint.dateRange!, firstDate),\n y: dataPoint.prevalence,\n r: scaleBubble(dataPoint.total),\n })),\n borderWidth: 1,\n pointRadius: 0,\n backgroundColor: singleGraphColorRGBAById(index, 0.3),\n borderColor: singleGraphColorRGBAById(index),\n })),\n },\n options: {\n animation: false,\n scales: {\n x: {\n ticks: {\n callback: (value) => addUnit(firstDate, value as number).toString(),\n },\n },\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n mode: 'index',\n intersect: false,\n callbacks: {\n title: (context) => {\n const dataset = data[context[0].datasetIndex!];\n const dataPoint = dataset.content[context[0].dataIndex!];\n return dataPoint.dateRange?.toString();\n },\n label: (context) => {\n const dataset = data[context.datasetIndex!];\n const dataPoint = dataset.content[context.dataIndex!];\n\n const percentage = (dataPoint.prevalence * 100).toFixed(2);\n const count = dataPoint.count.toFixed(0);\n const total = dataPoint.total.toFixed(0);\n\n return `${dataset.displayName}: ${percentage}%, ${count}/${total} samples`;\n },\n },\n },\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nexport default PrevalenceOverTimeBubbleChart;\n","import { Chart, type ChartConfiguration, registerables } from 'chart.js';\nimport { type TooltipItem } from 'chart.js/dist/types';\n\nimport { type PrevalenceOverTimeData, type PrevalenceOverTimeVariantData } from '../../query/queryPrevalenceOverTime';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport {\n confidenceIntervalDataLabel,\n type ConfidenceIntervalMethod,\n wilson95PercentConfidenceInterval,\n} from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeLineChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst PrevalenceOverTimeLineChart = ({\n data,\n yAxisScaleType,\n confidenceIntervalMethod,\n}: PrevalenceOverTimeLineChartProps) => {\n const datasets = data.map((graphData, index) => getDataset(graphData, index, confidenceIntervalMethod)).flat();\n const labels = data[0]?.content.map((dateRange) => dateRange.dateRange?.toString() ?? 'Unknown') || [];\n\n const config: ChartConfiguration = {\n type: 'line',\n data: {\n labels,\n datasets,\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(confidenceIntervalMethod),\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nconst getDataset = (\n prevalenceOverTimeVariant: PrevalenceOverTimeVariantData,\n dataIndex: number,\n confidenceIntervalMethod: ConfidenceIntervalMethod,\n) => {\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return [\n getDatasetCIUpper(prevalenceOverTimeVariant, dataIndex),\n getDatasetLine(prevalenceOverTimeVariant, dataIndex),\n getDatasetCILower(prevalenceOverTimeVariant, dataIndex),\n ].flat();\n default:\n return getDatasetLine(prevalenceOverTimeVariant, dataIndex);\n }\n};\n\nconst getDatasetCIUpper = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: `${prevalenceOverTimeVariant.displayName} CI upper`,\n data: prevalenceOverTimeVariant.content.map(\n (dataPoint) => wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).upperLimit,\n ),\n borderWidth: 0,\n pointRadius: 0,\n fill: '+1',\n backgroundColor: singleGraphColorRGBAById(dataIndex, 0.3),\n});\n\nconst getDatasetCILower = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: `${prevalenceOverTimeVariant.displayName} CI lower`,\n data: prevalenceOverTimeVariant.content.map(\n (dataPoint) => wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).lowerLimit,\n ),\n borderWidth: 0,\n pointRadius: 0,\n fill: '-1',\n backgroundColor: singleGraphColorRGBAById(dataIndex, 0.3),\n});\n\nconst getDatasetLine = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: prevalenceOverTimeVariant.displayName,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => dataPoint.prevalence),\n borderWidth: 1,\n pointRadius: 0,\n borderColor: singleGraphColorRGBAById(dataIndex),\n backgroundColor: singleGraphColorRGBAById(dataIndex),\n});\n\nconst tooltip = (confidenceIntervalMethod?: ConfidenceIntervalMethod) => {\n const generalConfig = {\n mode: 'index' as const,\n intersect: false,\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n filter: ({ datasetIndex }: TooltipItem<'line'>) => {\n return datasetIndex % 3 === 1;\n },\n callbacks: {\n label: (context: TooltipItem<'line'>) => {\n if (context.datasetIndex % 3 === 1) {\n const value = context.dataset.data[context.dataIndex];\n const ciLower = context.dataset.data[context.dataIndex - 1];\n const ciUpper = context.dataset.data[context.dataIndex + 1];\n\n if (\n typeof value !== 'number' ||\n typeof ciLower !== 'number' ||\n typeof ciUpper !== 'number'\n ) {\n return '';\n }\n\n return confidenceIntervalDataLabel(value, ciLower, ciUpper, context.dataset.label);\n }\n return context.dataset.label;\n },\n },\n };\n default:\n return generalConfig;\n }\n};\n\nexport default PrevalenceOverTimeLineChart;\n","import { getPrevalenceOverTimeTableData } from './getPrevalenceOverTimeTableData';\nimport { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { type TemporalGranularity } from '../../types';\nimport { Table } from '../components/table';\nimport { formatProportion } from '../shared/table/formatProportion';\n\ninterface PrevalenceOverTimeTableProps {\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n}\n\nconst PrevalenceOverTimeTable = ({ data, granularity }: PrevalenceOverTimeTableProps) => {\n const getSplitColumns = (data: PrevalenceOverTimeData) => {\n return data.map((dataset) => ({\n name: dataset.displayName,\n columns: [\n {\n name: 'prevalence',\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n },\n {\n name: 'count',\n sort: true,\n },\n ],\n }));\n };\n\n const getColumns = (data: PrevalenceOverTimeData) => [\n {\n name: granularity,\n sort: true,\n },\n ...getSplitColumns(data),\n ];\n\n const getData = (data: PrevalenceOverTimeData, granularity: TemporalGranularity) => {\n const dataByHeader = getPrevalenceOverTimeTableData(data, granularity);\n return Object.values(dataByHeader).map((row) => Object.values(row));\n };\n\n return <Table data={getData(data, granularity)} columns={getColumns(data)} pagination={false} />;\n};\n\nexport default PrevalenceOverTimeTable;\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { type MappedNumber, type NumberFields } from '../utils/type-utils';\n\nexport type DivisionOperatorResult<\n KeyField extends keyof ValueObject,\n ValueObject,\n ResultField extends string,\n NumeratorField extends string,\n DenominatorField extends string,\n> = { [P in KeyField]: ValueObject[KeyField] } & MappedNumber<ResultField> &\n MappedNumber<NumeratorField> &\n MappedNumber<DenominatorField>;\n\nexport class DivisionOperator<\n ValueObject,\n KeyField extends keyof ValueObject,\n ValueField extends NumberFields<ValueObject>,\n ResultField extends string,\n NumeratorField extends string,\n DenominatorField extends string,\n> implements Operator<DivisionOperatorResult<KeyField, ValueObject, ResultField, NumeratorField, DenominatorField>>\n{\n constructor(\n private numerator: Operator<ValueObject>,\n private denominator: Operator<ValueObject>,\n private keyField: KeyField,\n private valueField: ValueField,\n private resultField: ResultField,\n private numeratorField: NumeratorField,\n private denominatorField: DenominatorField,\n ) {}\n\n async evaluate(\n lapis: string,\n signal?: AbortSignal,\n ): Promise<Dataset<DivisionOperatorResult<KeyField, ValueObject, ResultField, NumeratorField, DenominatorField>>> {\n const numeratorEvaluated = await this.numerator.evaluate(lapis, signal);\n const denominatorEvaluated = await this.denominator.evaluate(lapis, signal);\n\n const numeratorMap = new Map<ValueObject[KeyField], ValueObject[ValueField]>();\n numeratorEvaluated.content.forEach((row) => {\n numeratorMap.set(row[this.keyField], row[this.valueField]);\n });\n\n const content = denominatorEvaluated.content.map((row) => {\n const numeratorValue = numeratorMap.get(row[this.keyField]) ?? 0;\n return {\n [this.keyField]: row[this.keyField],\n [this.numeratorField]: numeratorValue as number,\n [this.denominatorField]: row[this.valueField] as number,\n [this.resultField]: (numeratorValue as number) / (row[this.valueField] as number),\n } as { [P in KeyField]: ValueObject[KeyField] } & MappedNumber<ResultField> &\n MappedNumber<NumeratorField> &\n MappedNumber<DenominatorField>;\n });\n\n return { content };\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchAggregated } from '../lapisApi/lapisApi';\nimport { type AggregatedItem } from '../lapisApi/lapisTypes';\nimport { type LapisFilter } from '../types';\n\nexport class FetchAggregatedOperator<Fields extends Record<string, unknown>>\n implements\n Operator<\n Fields & {\n count: number;\n }\n >\n{\n constructor(\n private filter: LapisFilter,\n private fields: string[],\n ) {}\n\n async evaluate(lapisUrl: string, signal?: AbortSignal): Promise<Dataset<Fields & { count: number }>> {\n const aggregatedResponse = (\n await fetchAggregated(\n lapisUrl,\n {\n ...this.filter,\n fields: this.fields,\n },\n signal,\n )\n ).data;\n\n if (isFieldsArrayWithCount<Fields & { count: number }>(aggregatedResponse)) {\n return {\n content: aggregatedResponse,\n };\n }\n\n throw new Error('Aggregated response does not have count');\n }\n}\n\nfunction isFieldsArrayWithCount<T>(data: AggregatedItem[]): data is (T & { count: number })[] {\n return data.every((item) => typeof item === 'object' && 'count' in item && typeof item.count === 'number');\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class FillMissingOperator<Data, KeyToFill extends keyof Data> implements Operator<Data> {\n constructor(\n private child: Operator<Data>,\n private keyField: KeyToFill,\n private getMinMaxFn: (values: Iterable<Data[KeyToFill]>) => [Data[KeyToFill], Data[KeyToFill]] | null,\n private getAllRequiredKeysFn: (min: Data[KeyToFill], max: Data[KeyToFill]) => Data[KeyToFill][],\n private defaultValueFn: (key: Data[KeyToFill]) => Data,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<Data>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const existingKeys = new Set(childEvaluated.content.map((row) => row[this.keyField]));\n const minMax = this.getMinMaxFn(existingKeys);\n if (minMax === null) {\n return childEvaluated;\n }\n const [min, max] = minMax;\n const requiredKeys = this.getAllRequiredKeysFn(min, max);\n const content = childEvaluated.content;\n for (const key of requiredKeys) {\n if (!existingKeys.has(key)) {\n content.push(this.defaultValueFn(key));\n }\n }\n return { content };\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class GroupByOperator<Data, AggregationResult, KeyToGroupBy extends keyof Data>\n implements Operator<AggregationResult>\n{\n constructor(\n private child: Operator<Data>,\n private field: KeyToGroupBy,\n private aggregate: (values: Data[]) => AggregationResult,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<AggregationResult>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const grouped = new Map<Data[KeyToGroupBy], Data[]>();\n for (const row of childEvaluated.content) {\n const key = row[this.field];\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(row);\n }\n const result = new Array<AggregationResult>();\n for (const [, values] of grouped) {\n result.push(this.aggregate(values));\n }\n\n return {\n content: result,\n };\n }\n}\n","import { GroupByOperator } from './GroupByOperator';\nimport { type Operator } from './Operator';\nimport { type NumberFields } from '../utils/type-utils';\n\ntype Result<Data, KeyToGroupBy extends keyof Data, KeyToSumBy extends keyof Data> = {\n [P in KeyToGroupBy | KeyToSumBy]: P extends KeyToGroupBy ? Data[KeyToGroupBy] : number;\n};\n\nexport class GroupByAndSumOperator<\n Data,\n KeyToGroupBy extends keyof Data,\n KeySoSumBy extends NumberFields<Data>,\n> extends GroupByOperator<Data, Result<Data, KeyToGroupBy, KeySoSumBy>, KeyToGroupBy> {\n constructor(child: Operator<Data>, groupByField: KeyToGroupBy, sumField: KeySoSumBy) {\n super(child, groupByField, (values: Data[]) => {\n let n = 0;\n for (const value of values) {\n n += value[sumField] as number;\n }\n return {\n [groupByField]: values[0][groupByField],\n [sumField]: n,\n } as Result<Data, KeyToGroupBy, KeySoSumBy>;\n });\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class MapOperator<S, T> implements Operator<T> {\n constructor(\n private child: Operator<S>,\n private func: (value: S) => T,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<T>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n return {\n content: childEvaluated.content.map(this.func),\n };\n }\n}\n","import { type Operator } from './Operator';\n\nexport class SlidingOperator<Data, AggregationResult> implements Operator<AggregationResult> {\n constructor(\n private child: Operator<Data>,\n private windowSize: number,\n private aggregate: (values: Data[]) => AggregationResult,\n ) {\n if (windowSize < 1) {\n throw new Error('Window size must be at least 1');\n }\n }\n\n async evaluate(lapis: string, signal?: AbortSignal) {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const content = new Array<AggregationResult>();\n const numberOfWindows = Math.max(childEvaluated.content.length - this.windowSize, 0) + 1;\n for (let i = 0; i < numberOfWindows; i++) {\n content.push(this.aggregate(childEvaluated.content.slice(i, i + this.windowSize)));\n }\n return { content };\n }\n}\n","import { DivisionOperator } from '../operator/DivisionOperator';\nimport { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';\nimport { FillMissingOperator } from '../operator/FillMissingOperator';\nimport { GroupByAndSumOperator } from '../operator/GroupByAndSumOperator';\nimport { MapOperator } from '../operator/MapOperator';\nimport { SlidingOperator } from '../operator/SlidingOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type NamedLapisFilter, type TemporalGranularity } from '../types';\nimport {\n compareTemporal,\n generateAllInRange,\n getMinMaxTemporal,\n type Temporal,\n TemporalCache,\n} from '../utils/temporal';\n\nexport type PrevalenceOverTimeData = PrevalenceOverTimeVariantData[];\n\nexport type PrevalenceOverTimeVariantData = {\n displayName: string;\n content: { count: number; prevalence: number; total: number; dateRange: Temporal | null }[];\n};\n\nexport function queryPrevalenceOverTime(\n numeratorFilter: NamedLapisFilter | NamedLapisFilter[],\n denominatorFilter: NamedLapisFilter,\n granularity: TemporalGranularity,\n smoothingWindow: number,\n lapis: string,\n signal?: AbortSignal,\n): Promise<PrevalenceOverTimeData> {\n const numeratorFilters = makeArray(numeratorFilter);\n\n const denominatorData = fetchAndPrepare(getFilter(denominatorFilter), granularity, smoothingWindow);\n const subQueries = numeratorFilters.map(async (namedLapisFilter) => {\n const { displayName, ...filter } = namedLapisFilter;\n const numeratorData = fetchAndPrepare(filter, granularity, smoothingWindow);\n const divide = new DivisionOperator(\n numeratorData,\n denominatorData,\n 'dateRange',\n 'count',\n 'prevalence',\n 'count',\n 'total',\n );\n const dataset = await divide.evaluate(lapis, signal);\n return {\n displayName,\n content: dataset.content,\n };\n });\n return Promise.all(subQueries);\n}\n\nfunction getFilter(filter: NamedLapisFilter) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { displayName, ...filterWithoutDisplayName } = filter;\n return filterWithoutDisplayName;\n}\n\nfunction makeArray<T>(arrayOrSingleItem: T | T[]) {\n if (Array.isArray(arrayOrSingleItem)) {\n return arrayOrSingleItem;\n }\n return [arrayOrSingleItem];\n}\n\nfunction fetchAndPrepare(filter: LapisFilter, granularity: TemporalGranularity, smoothingWindow: number) {\n const fetchData = new FetchAggregatedOperator<{\n date: string | null;\n }>(filter, ['date']);\n const mapData = new MapOperator(fetchData, (d) => mapDateToGranularityRange(d, granularity));\n const groupByData = new GroupByAndSumOperator(mapData, 'dateRange', 'count');\n const fillData = new FillMissingOperator(\n groupByData,\n 'dateRange',\n getMinMaxTemporal,\n generateAllInRange,\n (key) => ({ dateRange: key, count: 0 }),\n );\n const sortData = new SortOperator(fillData, dateRangeCompare);\n\n return smoothingWindow >= 1 ? new SlidingOperator(sortData, smoothingWindow, averageSmoothing) : sortData;\n}\n\nfunction mapDateToGranularityRange(d: { date: string | null; count: number }, granularity: TemporalGranularity) {\n let dateRange: Temporal | null = null;\n if (d.date !== null) {\n const date = TemporalCache.getInstance().getYearMonthDay(d.date);\n switch (granularity) {\n case 'day':\n dateRange = date;\n break;\n case 'week':\n dateRange = date.week;\n break;\n case 'month':\n dateRange = date.month;\n break;\n case 'year':\n dateRange = date.year;\n break;\n }\n }\n return {\n dateRange,\n count: d.count,\n };\n}\n\nfunction dateRangeCompare(a: { dateRange: Temporal | null }, b: { dateRange: Temporal | null }) {\n if (a.dateRange === null) {\n return 1;\n }\n if (b.dateRange === null) {\n return -1;\n }\n return compareTemporal(a.dateRange, b.dateRange);\n}\n\nfunction averageSmoothing(slidingWindow: { dateRange: Temporal | null; count: number }[]) {\n const average = slidingWindow.reduce((acc, curr) => acc + curr.count, 0) / slidingWindow.length;\n const centerIndex = Math.floor(slidingWindow.length / 2);\n return { dateRange: slidingWindow[centerIndex].dateRange, count: average };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type JSXInternal } from 'preact/src/jsx';\n\nexport interface SelectProps {\n items: { label: string; value: string; disabled?: boolean }[];\n selected: string;\n onChange: JSXInternal.GenericEventHandler<HTMLSelectElement>;\n selectStyle?: string;\n}\n\nexport const Select: FunctionComponent<SelectProps> = ({ items, selected, onChange, selectStyle }) => {\n return (\n <select class={`select select-bordered ${selectStyle}`} value={selected} onChange={onChange}>\n {items.map((item) => (\n <option key={item.value} value={item.value} disabled={item.disabled}>\n {item.label}\n </option>\n ))}\n </select>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { Select } from './select';\nimport type { ConfidenceIntervalMethod } from '../shared/charts/confideceInterval';\n\ntype ConfidenceIntervalSelectorProps = {\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n setConfidenceIntervalMethod: (method: ConfidenceIntervalMethod) => void;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n};\n\nexport const ConfidenceIntervalSelector: FunctionComponent<ConfidenceIntervalSelectorProps> = ({\n confidenceIntervalMethod,\n setConfidenceIntervalMethod,\n confidenceIntervalMethods,\n}) => {\n if (confidenceIntervalMethods.length === 0) {\n return null;\n }\n\n const items = [\n { label: 'Confidence interval method', value: 'none', disabled: true },\n ...confidenceIntervalMethods.concat('none').map((method) => {\n switch (method) {\n case 'wilson':\n return { label: 'Wilson, 95% CI', value: 'wilson' };\n case 'none':\n return { label: 'None', value: 'none' };\n }\n }),\n ];\n\n return (\n <Select\n items={items}\n selected={confidenceIntervalMethod === undefined ? 'none' : confidenceIntervalMethod}\n onChange={(event: Event) => {\n const select = event.target as HTMLSelectElement;\n const value = select.value as ConfidenceIntervalMethod;\n setConfidenceIntervalMethod(value);\n }}\n selectStyle={'select-xs select-bordered'}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { Select } from './select';\nimport type { ScaleType } from '../shared/charts/getYAxisScale';\n\nexport type ScalingSelectorProps = {\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n className?: string;\n};\n\nexport const ScalingSelector: FunctionComponent<ScalingSelectorProps> = ({\n yAxisScaleType,\n setYAxisScaleType,\n className,\n}) => {\n const items = [\n { label: 'y axis scaling type', value: 'none', disabled: true },\n { label: 'Linear', value: 'linear' },\n { label: 'Logarithmic', value: 'logarithmic' },\n { label: 'Logit', value: 'logit' },\n ];\n\n return (\n <Select\n items={items}\n selected={yAxisScaleType}\n onChange={(event: Event) => {\n const select = event.target as HTMLSelectElement;\n const value = select.value as ScaleType;\n setYAxisScaleType(value);\n }}\n selectStyle={`${className} select-xs select-bordered`}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport { getPrevalenceOverTimeTableData } from './getPrevalenceOverTimeTableData';\nimport PrevalenceOverTimeBarChart from './prevalence-over-time-bar-chart';\nimport PrevalenceOverTimeBubbleChart from './prevalence-over-time-bubble-chart';\nimport PrevalenceOverTimeLineChart from './prevalence-over-time-line-chart';\nimport PrevalenceOverTimeTable from './prevalence-over-time-table';\nimport { type PrevalenceOverTimeData, queryPrevalenceOverTime } from '../../query/queryPrevalenceOverTime';\nimport { type NamedLapisFilter, type TemporalGranularity } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ConfidenceIntervalSelector } from '../components/confidence-interval-selector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { ScalingSelector } from '../components/scaling-selector';\nimport Tabs from '../components/tabs';\nimport { type ConfidenceIntervalMethod } from '../shared/charts/confideceInterval';\nimport { type ScaleType } from '../shared/charts/getYAxisScale';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'bar' | 'line' | 'bubble' | 'table';\n\nexport interface PrevalenceOverTimeProps {\n numerator: NamedLapisFilter | NamedLapisFilter[];\n denominator: NamedLapisFilter;\n granularity: TemporalGranularity;\n smoothingWindow: number;\n views: View[];\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n}\n\nexport const PrevalenceOverTime: FunctionComponent<PrevalenceOverTimeProps> = ({\n numerator,\n denominator,\n granularity,\n smoothingWindow,\n views,\n confidenceIntervalMethods,\n}) => {\n const lapis = useContext(LapisUrlContext);\n\n const { data, error, isLoading } = useQuery(\n () => queryPrevalenceOverTime(numerator, denominator, granularity, smoothingWindow, lapis),\n [lapis, numerator, denominator, granularity, smoothingWindow],\n );\n\n const headline = 'Prevalence over time';\n\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <PrevalenceOverTimeTabs\n views={views}\n data={data}\n granularity={granularity}\n confidenceIntervalMethods={confidenceIntervalMethods}\n />\n </Headline>\n );\n};\n\ntype PrevalenceOverTimeTabsProps = {\n views: View[];\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n};\n\nconst PrevalenceOverTimeTabs: FunctionComponent<PrevalenceOverTimeTabsProps> = ({\n views,\n data,\n granularity,\n confidenceIntervalMethods,\n}) => {\n const [yAxisScaleType, setYAxisScaleType] = useState<ScaleType>('linear');\n const [confidenceIntervalMethod, setConfidenceIntervalMethod] = useState<ConfidenceIntervalMethod>(\n confidenceIntervalMethods.length > 0 ? confidenceIntervalMethods[0] : 'none',\n );\n\n const getTab = (view: View) => {\n switch (view) {\n case 'bar':\n return {\n title: 'Bar',\n content: (\n <PrevalenceOverTimeBarChart\n data={data}\n yAxisScaleType={yAxisScaleType}\n confidenceIntervalMethod={confidenceIntervalMethod}\n />\n ),\n };\n case 'line':\n return {\n title: 'Line',\n content: (\n <PrevalenceOverTimeLineChart\n data={data}\n yAxisScaleType={yAxisScaleType}\n confidenceIntervalMethod={confidenceIntervalMethod}\n />\n ),\n };\n case 'bubble':\n return {\n title: 'Bubble',\n content: <PrevalenceOverTimeBubbleChart data={data} yAxisScaleType={yAxisScaleType} />,\n };\n case 'table':\n return { title: 'Table', content: <PrevalenceOverTimeTable data={data} granularity={granularity} /> };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n const toolbar = (activeTab: string) => (\n <Toolbar\n activeTab={activeTab}\n yAxisScaleType={yAxisScaleType}\n setYAxisScaleType={setYAxisScaleType}\n data={data}\n granularity={granularity}\n confidenceIntervalMethods={confidenceIntervalMethods}\n confidenceIntervalMethod={confidenceIntervalMethod}\n setConfidenceIntervalMethod={setConfidenceIntervalMethod}\n />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype ToolbarProps = {\n activeTab: string;\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n setConfidenceIntervalMethod: (confidenceIntervalMethod: ConfidenceIntervalMethod) => void;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n activeTab,\n yAxisScaleType,\n setYAxisScaleType,\n confidenceIntervalMethods,\n confidenceIntervalMethod,\n setConfidenceIntervalMethod,\n data,\n granularity,\n}) => {\n return (\n <div class='flex'>\n {activeTab !== 'Table' && (\n <ScalingSelector yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n )}\n {(activeTab === 'Bar' || activeTab === 'Line') && (\n <ConfidenceIntervalSelector\n confidenceIntervalMethods={confidenceIntervalMethods}\n confidenceIntervalMethod={confidenceIntervalMethod}\n setConfidenceIntervalMethod={setConfidenceIntervalMethod}\n />\n )}\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getPrevalenceOverTimeTableData(data, granularity)}\n filename='prevalence-over-time.csv'\n />\n <Info className='ml-1' content='Info for prevalence over time' />\n </div>\n );\n};\n\nexport default PrevalenceOverTime;\n","import { customElement, property } from 'lit/decorators.js';\n\nimport PrevalenceOverTime, { type View } from '../../preact/prevalenceOverTime/prevalence-over-time';\nimport { type ConfidenceIntervalMethod } from '../../preact/shared/charts/confideceInterval';\nimport { type NamedLapisFilter, type TemporalGranularity } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-prevalence-over-time')\nexport class PrevalenceOverTimeComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Object })\n numerator: NamedLapisFilter | NamedLapisFilter[] = { displayName: '' };\n\n @property({ type: Object })\n denominator: NamedLapisFilter = { displayName: '' };\n\n @property({ type: String })\n granularity: TemporalGranularity = 'day';\n\n @property({ type: Number })\n smoothingWindow: number = 0;\n\n @property({ type: Array })\n views: View[] = ['bar', 'line', 'bubble', 'table'];\n\n @property({ type: Array })\n confidenceIntervalMethods: ConfidenceIntervalMethod[] = ['wilson'];\n\n override render() {\n return (\n <PrevalenceOverTime\n numerator={this.numerator}\n denominator={this.denominator}\n granularity={this.granularity}\n smoothingWindow={this.smoothingWindow}\n views={this.views}\n confidenceIntervalMethods={this.confidenceIntervalMethods}\n />\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-prevalence-over-time': PrevalenceOverTimeComponent;\n }\n}\n","import { Chart, type ChartConfiguration, registerables, type TooltipItem } from 'chart.js';\n\nimport { type YearMonthDay } from '../../utils/temporal';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBByName } from '../shared/charts/colors';\nimport { confidenceIntervalDataLabel } from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface RelativeGrowthAdvantageChartData {\n t: YearMonthDay[];\n proportion: number[];\n ciLower: number[];\n ciUpper: number[];\n observed: number[];\n params: {\n fd: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n };\n}\n\ninterface RelativeGrowthAdvantageChartProps {\n data: RelativeGrowthAdvantageChartData;\n yAxisScaleType: ScaleType;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst RelativeGrowthAdvantageChart = ({ data, yAxisScaleType }: RelativeGrowthAdvantageChartProps) => {\n const config: ChartConfiguration = {\n type: 'line',\n data: {\n labels: data.t,\n datasets: datasets(data),\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(),\n },\n },\n };\n\n return (\n <>\n <GsChart configuration={config} />\n <div>\n Advantage: {(data.params.fd.value * 100).toFixed(2)}% ({(data.params.fd.ciLower * 100).toFixed(2)}% -{' '}\n {(data.params.fd.ciUpper * 100).toFixed(2)}%)\n </div>\n </>\n );\n};\n\nconst datasets = (data: RelativeGrowthAdvantageChartData) => {\n return [\n {\n type: 'line' as const,\n label: 'Prevalence',\n data: data.proportion,\n borderWidth: 1,\n pointRadius: 0,\n borderColor: singleGraphColorRGBByName('indigo'),\n backgroundColor: singleGraphColorRGBByName('indigo'),\n },\n {\n type: 'line' as const,\n label: 'CI Lower',\n data: data.ciLower,\n borderWidth: 1,\n pointRadius: 0,\n fill: '+1',\n backgroundColor: singleGraphColorRGBByName('indigo', 0.3),\n },\n {\n type: 'line' as const,\n label: 'CI Upper',\n data: data.ciUpper,\n borderWidth: 1,\n pointRadius: 0,\n fill: '-1',\n backgroundColor: singleGraphColorRGBByName('indigo', 0.3),\n },\n {\n type: 'scatter' as const,\n label: 'Observed',\n data: data.observed,\n pointBackgroundColor: singleGraphColorRGBByName('green'),\n pointRadius: 2,\n },\n ];\n};\n\nconst tooltip = () => {\n return {\n mode: 'index' as const,\n intersect: false,\n filter: ({ datasetIndex }: TooltipItem<'line'>) => {\n return datasetIndex !== 1 && datasetIndex !== 2;\n },\n callbacks: {\n label: (context: TooltipItem<'line'>) => {\n switch (context.datasetIndex) {\n case 0: {\n const value = context.dataset.data[context.dataIndex];\n const ciLower = context.dataset.data[context.dataIndex + 1];\n const ciUpper = context.dataset.data[context.dataIndex + 2];\n if (typeof value !== 'number' || typeof ciLower !== 'number' || typeof ciUpper !== 'number') {\n return '';\n }\n return confidenceIntervalDataLabel(value, ciLower, ciUpper, context.dataset.label);\n }\n\n case 3: {\n const value = context.dataset.data[context.dataIndex];\n if (typeof value !== 'number') {\n return '';\n }\n return `Observed: ${value.toFixed(3)}`;\n }\n default:\n return '';\n }\n },\n },\n };\n};\n\nexport default RelativeGrowthAdvantageChart;\n","import { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';\nimport { MapOperator } from '../operator/MapOperator';\nimport { type LapisFilter } from '../types';\nimport { getMinMaxTemporal, TemporalCache, type YearMonthDay } from '../utils/temporal';\n\nexport type RelativeGrowthAdvantageData = Awaited<ReturnType<typeof queryRelativeGrowthAdvantage>>;\n\nexport async function queryRelativeGrowthAdvantage(\n numerator: LapisFilter,\n denominator: LapisFilter,\n generationTime: number,\n lapis: string,\n signal?: AbortSignal,\n) {\n const fetchNumerator = new FetchAggregatedOperator<{\n date: string | null;\n }>(numerator, ['date']);\n const fetchDenominator = new FetchAggregatedOperator<{\n date: string | null;\n }>(denominator, ['date']);\n const mapNumerator = new MapOperator(fetchNumerator, toYearMonthDay);\n const mapDenominator = new MapOperator(fetchDenominator, toYearMonthDay);\n const [numeratorData, denominatorData] = await Promise.all([\n mapNumerator.evaluate(lapis, signal),\n mapDenominator.evaluate(lapis, signal),\n ]);\n const minMaxDate = getMinMaxTemporal(denominatorData.content.map((d) => d.date));\n if (!minMaxDate) {\n return null;\n }\n const [minDate, maxDate] = minMaxDate as [YearMonthDay, YearMonthDay];\n const numeratorCounts = new Map<YearMonthDay, number>();\n numeratorData.content.forEach((d) => {\n if (d.date) {\n numeratorCounts.set(d.date, d.count);\n }\n });\n const denominatorCounts = new Map<YearMonthDay, number>();\n const requestData = {\n t: [] as number[],\n n: [] as number[],\n k: [] as number[],\n };\n denominatorData.content.forEach((d) => {\n if (d.date) {\n denominatorCounts.set(d.date, d.count);\n const t = d.date.minus(minDate);\n requestData.t.push(t);\n requestData.n.push(d.count);\n requestData.k.push(numeratorCounts.get(d.date) ?? 0);\n }\n });\n const requestPayload = {\n config: {\n alpha: 0.95,\n generationTime,\n initialCasesVariant: 1,\n initialCasesWildtype: 1,\n reproductionNumberWildtype: 1,\n tStart: 0,\n tEnd: maxDate.minus(minDate),\n },\n data: requestData,\n };\n const response = await fetch('https://cov-spectrum.org/api/v2/computed/model/chen2021Fitness', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestPayload),\n signal,\n });\n const responseData = (await response.json()) as {\n estimatedAbsoluteNumbers: {\n t: number[];\n variantCases: number[];\n wildtypeCases: number[];\n };\n estimatedProportions: {\n t: number[];\n proportion: number[];\n ciLower: number[];\n ciUpper: number[];\n };\n params: {\n a: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n fc: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n fd: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n t0: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n };\n };\n const transformed = {\n ...responseData,\n estimatedProportions: {\n ...responseData.estimatedProportions,\n t: responseData.estimatedProportions.t.map((t) => minDate.addDays(t)),\n },\n };\n const observedProportions = transformed.estimatedProportions.t.map(\n (t) => (numeratorCounts.get(t) ?? 0) / (denominatorCounts.get(t) ?? 0),\n );\n\n return {\n ...transformed,\n observedProportions,\n };\n}\n\nfunction toYearMonthDay(d: { date: string | null; count: number }) {\n const temporalCache = TemporalCache.getInstance();\n return {\n date: d.date ? temporalCache.getYearMonthDay(d.date) : null,\n count: d.count,\n };\n}\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport RelativeGrowthAdvantageChart from './relative-growth-advantage-chart';\nimport {\n queryRelativeGrowthAdvantage,\n type RelativeGrowthAdvantageData,\n} from '../../query/queryRelativeGrowthAdvantage';\nimport { type LapisFilter } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { ScalingSelector } from '../components/scaling-selector';\nimport Tabs from '../components/tabs';\nimport { type ScaleType } from '../shared/charts/getYAxisScale';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'line';\n\nexport interface RelativeGrowthAdvantageProps {\n numerator: LapisFilter;\n denominator: LapisFilter;\n generationTime: number;\n views: View[];\n}\n\nexport const RelativeGrowthAdvantage: FunctionComponent<RelativeGrowthAdvantageProps> = ({\n numerator,\n denominator,\n generationTime,\n views,\n}) => {\n const lapis = useContext(LapisUrlContext);\n const [yAxisScaleType, setYAxisScaleType] = useState<ScaleType>('linear');\n\n const { data, error, isLoading } = useQuery(\n () => queryRelativeGrowthAdvantage(numerator, denominator, generationTime, lapis),\n [lapis, numerator, denominator, generationTime, views],\n );\n\n const headline = 'Relative growth advantage';\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <RelativeGrowthAdvantageTabs\n data={data}\n yAxisScaleType={yAxisScaleType}\n setYAxisScaleType={setYAxisScaleType}\n views={views}\n />\n </Headline>\n );\n};\n\ntype RelativeGrowthAdvantageTabsProps = {\n data: NonNullable<RelativeGrowthAdvantageData>;\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n views: View[];\n};\n\nconst RelativeGrowthAdvantageTabs: FunctionComponent<RelativeGrowthAdvantageTabsProps> = ({\n data,\n yAxisScaleType,\n setYAxisScaleType,\n views,\n}) => {\n const getTab = (view: View) => {\n switch (view) {\n case 'line':\n return {\n title: 'Line',\n content: (\n <RelativeGrowthAdvantageChart\n data={{\n ...data.estimatedProportions,\n observed: data.observedProportions,\n params: data.params,\n }}\n yAxisScaleType={yAxisScaleType}\n />\n ),\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n const toolbar = () => (\n <RelativeGrowthAdvantageToolbar yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype RelativeGrowthAdvantageToolbarProps = {\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n};\n\nconst RelativeGrowthAdvantageToolbar: FunctionComponent<RelativeGrowthAdvantageToolbarProps> = ({\n yAxisScaleType,\n setYAxisScaleType,\n}) => {\n return (\n <div class='flex'>\n <ScalingSelector yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n <Info className='ml-1' content='Line chart' />\n </div>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { RelativeGrowthAdvantage, type View } from '../../preact/relativeGrowthAdvantage/relative-growth-advantage';\nimport type { LapisFilter } from '../../types';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n@customElement('gs-relative-growth-advantage')\nexport class RelativeGrowthAdvantageComponent extends PreactLitAdapter {\n @property({ type: Object })\n numerator: LapisFilter = {};\n\n @property({ type: Object })\n denominator: LapisFilter = {};\n\n @property({ type: Number })\n generationTime: number = 7;\n\n @property({ type: Array })\n views: View[] = ['line'];\n\n override render() {\n return (\n <RelativeGrowthAdvantage\n numerator={this.numerator}\n denominator={this.denominator}\n generationTime={this.generationTime}\n views={this.views}\n />\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;\n }\n}\n","export const toYYYYMMDD = (date?: Date) => {\n if (!date) {\n return undefined;\n }\n\n const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit' };\n return date.toLocaleDateString('en-CA', options);\n};\n","import flatpickr from 'flatpickr';\nimport { type FunctionComponent } from 'preact';\nimport 'flatpickr/dist/flatpickr.min.css';\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport { toYYYYMMDD } from './dateConversion';\nimport { Select } from '../components/select';\nimport type { ScaleType } from '../shared/charts/getYAxisScale';\n\nexport type CustomSelectOption = { label: string; dateFrom: string; dateTo: string };\n\nexport interface DateRangeSelectorProps {\n customSelectOptions: CustomSelectOption[];\n earliestDate?: string;\n}\n\nexport const DateRangeSelector: FunctionComponent<DateRangeSelectorProps> = ({\n customSelectOptions,\n earliestDate = '1900-01-01',\n}) => {\n const datePickerRef = useRef<HTMLInputElement>(null);\n const endDatePickerRef = useRef<HTMLInputElement>(null);\n const divRef = useRef<HTMLDivElement>(null);\n const [dateFromPicker, setDateFromPicker] = useState<flatpickr.Instance | null>(null);\n const [dateToPicker, setDateToPicker] = useState<flatpickr.Instance | null>(null);\n\n const [selectedDateRange, setSelectedDateRange] = useState('last6Months');\n const [selectedDates, setSelectedDates] = useState<{ dateFrom: Date; dateTo: Date }>({\n dateFrom: getDatesForSelectorValue('last6Months', customSelectOptions, earliestDate).dateFrom,\n dateTo: getDatesForSelectorValue('last6Months', customSelectOptions, earliestDate).dateTo,\n });\n\n useEffect(() => {\n const commonConfig = {\n allowInput: true,\n dateFormat: 'Y-m-d',\n };\n\n if (datePickerRef.current) {\n setDateFromPicker(\n flatpickr(datePickerRef.current, {\n ...commonConfig,\n defaultDate: selectedDates.dateFrom,\n }),\n );\n }\n\n if (endDatePickerRef.current) {\n setDateToPicker(\n flatpickr(endDatePickerRef.current, {\n ...commonConfig,\n defaultDate: selectedDates.dateTo,\n }),\n );\n }\n\n return () => {\n dateFromPicker?.destroy();\n dateToPicker?.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [datePickerRef, endDatePickerRef]);\n\n const selectableOptions = () => {\n const presetOptions = [\n { label: 'Custom', value: 'custom' },\n { label: 'All times', value: 'allTimes' },\n { label: 'Last 2 weeks', value: 'last2Weeks' },\n { label: 'Last month', value: 'lastMonth' },\n { label: 'Last 2 weeks', value: 'last2Weeks' },\n { label: 'Last month', value: 'lastMonth' },\n { label: 'Last 2 months', value: 'last2Months' },\n { label: 'Last 3 months', value: 'last3Months' },\n { label: 'Last 6 months', value: 'last6Months' },\n ];\n\n const customOptions = customSelectOptions.map((customSelectOption) => {\n return { label: customSelectOption.label, value: customLabelToOptionValue(customSelectOption.label) };\n });\n\n return [...presetOptions, ...customOptions];\n };\n\n const onSelectChange = (value: string) => {\n setSelectedDateRange(value);\n\n const dateRange = getDatesForSelectorValue(value, customSelectOptions, earliestDate);\n\n dateToPicker?.set('minDate', dateRange.dateFrom);\n dateFromPicker?.set('maxDate', dateRange.dateTo);\n\n dateFromPicker?.setDate(dateRange.dateFrom);\n dateToPicker?.setDate(dateRange.dateTo);\n\n setSelectedDates({\n dateFrom: dateRange.dateFrom,\n dateTo: dateRange.dateTo,\n });\n\n submit();\n };\n\n const onChangeDateFrom = () => {\n if (selectedDates.dateFrom.toDateString() === dateFromPicker?.selectedDates[0].toDateString()) {\n return;\n }\n\n selectedDates.dateFrom = dateFromPicker?.selectedDates[0] || new Date();\n dateToPicker?.set('minDate', dateFromPicker?.selectedDates[0]);\n setSelectedDateRange('custom');\n\n submit();\n };\n\n const onChangeDateTo = () => {\n if (selectedDates.dateTo.toDateString() === dateToPicker?.selectedDates[0].toDateString()) {\n return;\n }\n\n selectedDates.dateTo = dateToPicker?.selectedDates[0] || new Date();\n dateFromPicker?.set('maxDate', dateToPicker?.selectedDates[0]);\n setSelectedDateRange('custom');\n\n submit();\n };\n\n const submit = () => {\n const dateFrom = toYYYYMMDD(dateFromPicker?.selectedDates[0]);\n const dateTo = toYYYYMMDD(dateToPicker?.selectedDates[0]);\n\n const detail = {\n ...(dateFrom !== undefined && { dateFrom }),\n ...(dateTo !== undefined && { dateTo }),\n };\n\n divRef.current?.dispatchEvent(\n new CustomEvent('gs-date-range-changed', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n return (\n <div class='join' ref={divRef}>\n <Select\n items={selectableOptions()}\n selected={selectedDateRange}\n selectStyle='select-bordered rounded-none join-item'\n onChange={(event: Event) => {\n event.preventDefault();\n const select = event.target as HTMLSelectElement;\n const value = select.value as ScaleType;\n onSelectChange(value);\n }}\n />\n <input\n class='input input-bordered rounded-none join-item'\n type='text'\n placeholder='Date from'\n ref={datePickerRef}\n onChange={onChangeDateFrom}\n onBlur={onChangeDateFrom}\n />\n <input\n class='input input-bordered rounded-none join-item'\n type='text'\n placeholder='Date to'\n ref={endDatePickerRef}\n onChange={onChangeDateTo}\n onBlur={onChangeDateFrom}\n />\n </div>\n );\n};\n\nconst customLabelToOptionValue = (customLabel: string) => {\n return `${customLabel}customLabel`;\n};\n\nconst getDatesForSelectorValue = (\n selectorValue: string,\n customSelectOptions: CustomSelectOption[],\n earliestDate: string,\n) => {\n const today = new Date();\n\n const customSelectOption = customSelectOptions.find(\n (option) => customLabelToOptionValue(option.label) === selectorValue,\n );\n if (customSelectOption) {\n return { dateFrom: new Date(customSelectOption.dateFrom), dateTo: new Date(customSelectOption.dateTo) };\n }\n\n switch (selectorValue) {\n case 'last2Weeks': {\n const twoWeeksAgo = new Date(today);\n twoWeeksAgo.setDate(today.getDate() - 14);\n return { dateFrom: twoWeeksAgo, dateTo: today };\n }\n case 'lastMonth': {\n const lastMonth = new Date(today);\n lastMonth.setMonth(today.getMonth() - 1);\n return { dateFrom: lastMonth, dateTo: today };\n }\n case 'last2Months': {\n const twoMonthsAgo = new Date(today);\n twoMonthsAgo.setMonth(today.getMonth() - 2);\n return { dateFrom: twoMonthsAgo, dateTo: today };\n }\n case 'last3Months': {\n const threeMonthsAgo = new Date(today);\n threeMonthsAgo.setMonth(today.getMonth() - 3);\n return { dateFrom: threeMonthsAgo, dateTo: today };\n }\n case 'last6Months': {\n const sixMonthsAgo = new Date(today);\n sixMonthsAgo.setMonth(today.getMonth() - 6);\n return { dateFrom: sixMonthsAgo, dateTo: today };\n }\n case 'allTimes': {\n return { dateFrom: new Date(earliestDate), dateTo: today };\n }\n default:\n return { dateFrom: today, dateTo: today };\n }\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { type CustomSelectOption, DateRangeSelector } from '../../preact/dateRangeSelector/date-range-selector';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<{ dateFrom: string; dateTo: string; }>} gs-date-range-changed - When the date range has changed\n */\n@customElement('gs-date-range-selector')\nexport class DateRangeSelectorComponent extends PreactLitAdapter {\n @property({ type: Array })\n customSelectOptions: CustomSelectOption[] = [];\n\n @property({ type: String })\n earliestDate: string | undefined = '1900-01-01';\n\n override render() {\n return <DateRangeSelector customSelectOptions={this.customSelectOptions} earliestDate={this.earliestDate} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-date-range-selector': DateRangeSelectorComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-date-range-changed': CustomEvent<{\n dateFrom: string;\n dateTo: string;\n }>;\n }\n}\n","import { FetchAggregatedOperator } from '../../operator/FetchAggregatedOperator';\n\nexport async function fetchAutocompletionList(fields: string[], lapis: string, signal?: AbortSignal) {\n const toAncestorInHierarchyOverwriteValues = Array(fields.length - 1)\n .fill(0)\n .map((_, i) => i + 1)\n .map((i) => fields.slice(i).reduce((acc, field) => ({ ...acc, [field]: null }), {}));\n\n const fetchAggregatedOperator = new FetchAggregatedOperator<Record<string, string | null>>({}, fields);\n\n const data = (await fetchAggregatedOperator.evaluate(lapis, signal)).content;\n const locationValues = data\n .map((entry) => fields.reduce((acc, field) => ({ ...acc, [field]: entry[field] }), {}))\n .reduce<Set<string>>((setOfAllHierarchies, entry) => {\n setOfAllHierarchies.add(JSON.stringify(entry));\n toAncestorInHierarchyOverwriteValues.forEach((overwriteValues) => {\n setOfAllHierarchies.add(JSON.stringify({ ...entry, ...overwriteValues }));\n });\n return setOfAllHierarchies;\n }, new Set());\n\n return [...locationValues].map((json) => JSON.parse(json)).sort(compareLocationEntries(fields));\n}\n\nfunction compareLocationEntries(fields: string[]) {\n return (a: Record<string, string | null>, b: Record<string, string | null>) => {\n for (const field of fields) {\n const valueA = a[field];\n const valueB = b[field];\n if (valueA === valueB) {\n continue;\n }\n if (valueA === null) {\n return -1;\n }\n if (valueB === null) {\n return 1;\n }\n return valueA < valueB ? -1 : 1;\n }\n return 0;\n };\n}\n","import { useContext, useRef, useState } from 'preact/hooks';\n\nimport { fetchAutocompletionList } from './fetchAutocompletionList';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { useQuery } from '../useQuery';\n\nexport type LocationFilterProps = {\n value?: string;\n fields: string[];\n};\n\nexport const LocationFilter = ({ value: initialValue, fields }: LocationFilterProps) => {\n const lapis = useContext(LapisUrlContext);\n\n const [value, setValue] = useState(initialValue ?? '');\n const [unknownLocation, setUnknownLocation] = useState(false);\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const { data, error, isLoading } = useQuery(() => fetchAutocompletionList(fields, lapis), [fields, lapis]);\n\n if (isLoading)\n return (\n <form class='flex'>\n <input type='text' class='input input-bordered grow' value={value} disabled />\n <button class='btn ml-1' disabled type='submit'>\n Loading...\n </button>\n </form>\n );\n\n if (error) {\n return (\n <p>\n Error: {error.name} {error.message} {error.stack}\n </p>\n );\n }\n\n const onInput = (event: InputEvent) => {\n if (event.target instanceof HTMLInputElement) {\n const inputValue = event.target.value;\n setValue(inputValue);\n if (unknownLocation) {\n const eventDetail = parseLocation(inputValue, fields);\n if (hasMatchingEntry(data, eventDetail)) {\n setUnknownLocation(false);\n }\n }\n }\n };\n\n const submit = (event: SubmitEvent) => {\n event.preventDefault();\n const eventDetail = parseLocation(value, fields);\n\n if (hasMatchingEntry(data, eventDetail)) {\n setUnknownLocation(false);\n\n formRef.current?.dispatchEvent(\n new CustomEvent('gs-location-changed', {\n detail: eventDetail,\n bubbles: true,\n composed: true,\n }),\n );\n } else {\n setUnknownLocation(true);\n }\n };\n\n return (\n <form class='flex' onSubmit={submit} ref={formRef}>\n <input\n type='text'\n class={`input input-bordered grow ${unknownLocation ? 'border-2 border-error' : ''}`}\n value={value}\n onInput={onInput}\n list='countries'\n />\n <datalist id='countries'>\n {data?.map((v) => {\n const value = fields\n .map((field) => v[field])\n .filter((value) => value !== null)\n .join(' / ');\n return <option key={value} value={value} />;\n })}\n </datalist>\n <button class='btn btn-primary ml-1' type='submit'>\n Submit\n </button>\n </form>\n );\n};\n\nconst parseLocation = (location: string, fields: string[]) => {\n const fieldValues = location.split('/').map((part) => part.trim());\n return fieldValues.reduce((acc, fieldValue, i) => ({ ...acc, [fields[i]]: fieldValue }), {});\n};\n\nconst hasMatchingEntry = (data: Record<string, string>[] | null, eventDetail: Record<string, string>) => {\n if (data === null) {\n return false;\n }\n\n const matchingEntries = Object.entries(eventDetail)\n .filter(([, value]) => value !== undefined)\n .reduce((filteredData, [key, value]) => filteredData.filter((it) => it[key] === value), data);\n\n return matchingEntries.length > 0;\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { LocationFilter } from '../../preact/locationFilter/location-filter';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * ## Tag\n *\n * `gs-location-filter`\n *\n * ## Context\n *\n * This component provides an input field to specify filters for locations.\n *\n * It expects a list of fields that form a strict hierarchical order, such as continent, country, and city.\n * The component retrieves a list of all possible values for these fields from the Lapis instance.\n * This list is then utilized to display autocomplete suggestions and to validate the input.\n *\n * Given `fields` are `['field1', 'field2', ..., 'fieldN']`,\n * then valid values for the location filter must be in the form `valueForField1 / valueForField2 / ... / valueForFieldK`,\n * where `1 <= K <= N`.\n * Values for the fields `i > K` are considered `undefined`.\n *\n * @fires {CustomEvent<Record<string, string>>} gs-location-changed\n * Fired when the field is submitted with a valid location value.\n * The `details` of this event contain an object with all `fields` as keys\n * and the corresponding values as values, if they are not `undefined`.\n * Example:\n * ```\n * {\n * continent: \"Asia\",\n * country: \"China\",\n * city: \"Beijing\"\n * }\n * ```\n */\n@customElement('gs-location-filter')\nexport class LocationFilterComponent extends PreactLitAdapter {\n /**\n * The initial value to use for this location filter.\n * Must be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.\n */\n @property()\n value = '';\n\n /**\n * The fields to display in the location filter, in hierarchical order.\n * The top-level field should be the first entry in the array.\n * This component assumes that the values for each field form a strict hierarchy\n * (e.g., `fields = ['continent', 'country', 'city']`).\n */\n @property({ type: Array })\n fields: string[] = [];\n\n override render() {\n return <LocationFilter value={this.value} fields={this.fields} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-location-filter': LocationFilterComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-location-changed': CustomEvent<Record<string, string>>;\n }\n}\n","import { FetchAggregatedOperator } from '../../operator/FetchAggregatedOperator';\n\nexport async function fetchAutocompleteList(lapis: string, field: string, signal?: AbortSignal) {\n const fetchAggregatedOperator = new FetchAggregatedOperator<Record<string, string>>({}, [field]);\n\n const data = (await fetchAggregatedOperator.evaluate(lapis, signal)).content;\n\n return data.map((item) => item[field]);\n}\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useRef } from 'preact/hooks';\n\nimport { fetchAutocompleteList } from './fetchAutocompleteList';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ErrorDisplay } from '../components/error-display';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { useQuery } from '../useQuery';\n\nexport interface TextInputProps {\n lapisField: string;\n placeholderText?: string;\n}\n\nexport const TextInput: FunctionComponent<TextInputProps> = ({ lapisField, placeholderText }) => {\n const lapis = useContext(LapisUrlContext);\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { data, error, isLoading } = useQuery(() => fetchAutocompleteList(lapis, lapisField), [lapisField, lapis]);\n\n if (isLoading) {\n return <LoadingDisplay />;\n }\n\n if (error !== null) {\n return <ErrorDisplay error={error} />;\n }\n\n if (data === null) {\n return <NoDataDisplay />;\n }\n\n const onInput = () => {\n const value = inputRef.current?.value;\n\n if (isValidValue(value)) {\n inputRef.current?.dispatchEvent(\n new CustomEvent('gs-text-input-changed', {\n detail: { [lapisField]: value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n };\n\n const isValidValue = (value: string | undefined) => {\n if (value === undefined) {\n return false;\n }\n return data.includes(value);\n };\n\n return (\n <>\n <input\n type='text'\n class='input input-bordered'\n placeholder={placeholderText !== undefined ? placeholderText : lapisField}\n onInput={onInput}\n ref={inputRef}\n list={lapisField}\n />\n <datalist id={lapisField}>\n {data.map((item) => (\n <option value={item} key={item} />\n ))}\n </datalist>\n </>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { TextInput } from '../../preact/textInput/text-input';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<Record<string, string>>} gs-text-input-changed - When the text input has changed\n */\n@customElement('gs-text-input')\nexport class TextInputComponent extends PreactLitAdapter {\n @property()\n lapisField = '';\n\n @property()\n placeholderText = '';\n\n override render() {\n return <TextInput lapisField={this.lapisField} placeholderText={this.placeholderText} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-text-input': TextInputComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-text-input-changed': CustomEvent<Record<string, string>>;\n }\n}\n","import type { ReferenceGenome } from '../../lapisApi/ReferenceGenome';\nimport type { SequenceType } from '../../types';\n\nexport const sequenceTypeFromSegment = (\n possibleSegment: string | undefined,\n referenceGenome: ReferenceGenome,\n): SequenceType | undefined => {\n if (possibleSegment === undefined) {\n return referenceGenome.nucleotideSequences.length === 1 ? 'nucleotide' : undefined;\n }\n\n if (referenceGenome.nucleotideSequences.some((sequence) => sequence.name === possibleSegment)) {\n return 'nucleotide';\n }\n\n if (referenceGenome.genes.some((gene) => gene.name === possibleSegment)) {\n return 'amino acid';\n }\n return undefined;\n};\n","import { type SelectedFilters } from './mutation-filter';\nimport { sequenceTypeFromSegment } from './sequenceTypeFromSegment';\nimport type { ReferenceGenome } from '../../lapisApi/ReferenceGenome';\nimport { Deletion, Insertion, Substitution } from '../../utils/mutations';\n\ntype ParsedMutationFilter = {\n [MutationType in keyof SelectedFilters]: { type: MutationType; value: SelectedFilters[MutationType][number] };\n}[keyof SelectedFilters];\n\nexport const parseAndValidateMutation = (\n value: string,\n referenceGenome: ReferenceGenome,\n): ParsedMutationFilter | null => {\n const possibleInsertion = Insertion.parse(value);\n if (possibleInsertion !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleInsertion.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideInsertions', value: possibleInsertion };\n case 'amino acid':\n return { type: 'aminoAcidInsertions', value: possibleInsertion };\n case undefined:\n return null;\n }\n }\n\n const possibleDeletion = Deletion.parse(value);\n if (possibleDeletion !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleDeletion.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideMutations', value: possibleDeletion };\n case 'amino acid':\n return { type: 'aminoAcidMutations', value: possibleDeletion };\n case undefined:\n return null;\n }\n }\n\n const possibleSubstitution = Substitution.parse(value);\n if (possibleSubstitution !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleSubstitution.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideMutations', value: possibleSubstitution };\n case 'amino acid':\n return { type: 'aminoAcidMutations', value: possibleSubstitution };\n case undefined:\n return null;\n }\n }\n\n return null;\n};\n","import type { FunctionComponent } from 'preact';\n\nexport const DeleteIcon: FunctionComponent = () => {\n return (\n <svg\n fill='currentColor'\n stroke-width='0'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 16 16'\n style='overflow: visible; color: currentcolor;'\n height='1em'\n width='1em'\n >\n <path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z' />\n </svg>\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useRef, useState } from 'preact/hooks';\n\nimport { parseAndValidateMutation } from './parseAndValidateMutation';\nimport { type Deletion, type Insertion, type Mutation, type Substitution } from '../../utils/mutations';\nimport { ReferenceGenomeContext } from '../ReferenceGenomeContext';\nimport { singleGraphColorRGBByName } from '../shared/charts/colors';\nimport { DeleteIcon } from '../shared/icons/DeleteIcon';\n\nexport type MutationFilterProps = {};\n\nexport type SelectedFilters = {\n nucleotideMutations: (Substitution | Deletion)[];\n aminoAcidMutations: (Substitution | Deletion)[];\n nucleotideInsertions: Insertion[];\n aminoAcidInsertions: Insertion[];\n};\n\nexport type SelectedMutationFilterStrings = {\n [Key in keyof SelectedFilters]: string[];\n};\n\nexport const MutationFilter: FunctionComponent<MutationFilterProps> = () => {\n const referenceGenome = useContext(ReferenceGenomeContext);\n const [selectedFilters, setSelectedFilters] = useState<SelectedFilters>({\n nucleotideMutations: [],\n aminoAcidMutations: [],\n nucleotideInsertions: [],\n aminoAcidInsertions: [],\n });\n const [inputValue, setInputValue] = useState('');\n const [isError, setIsError] = useState(false);\n const formRef = useRef<HTMLFormElement>(null);\n\n const handleSubmit = (event: Event) => {\n event.preventDefault();\n\n const parsedMutation = parseAndValidateMutation(inputValue, referenceGenome);\n\n if (parsedMutation === null) {\n setIsError(true);\n return;\n }\n\n const newSelectedValues = {\n ...selectedFilters,\n [parsedMutation.type]: [...selectedFilters[parsedMutation.type], parsedMutation.value],\n };\n\n setSelectedFilters(newSelectedValues);\n fireChangeEvent(newSelectedValues);\n setInputValue('');\n };\n\n const fireChangeEvent = (selectedFilters: SelectedFilters) => {\n const detail = mapToMutationFilterStrings(selectedFilters);\n\n formRef.current?.dispatchEvent(\n new CustomEvent<SelectedMutationFilterStrings>('gs-mutation-filter-changed', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n const handleOnBlur = () => {\n const detail = mapToMutationFilterStrings(selectedFilters);\n\n formRef.current?.dispatchEvent(\n new CustomEvent<SelectedMutationFilterStrings>('gs-mutation-filter-on-blur', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n const handleInputChange = (event: Event) => {\n setInputValue((event.target as HTMLInputElement).value);\n setIsError(false);\n };\n\n return (\n <div class={`rounded-lg border border-gray-300 bg-white p-2`}>\n <SelectedMutationDisplay\n selectedFilters={selectedFilters}\n setSelectedFilters={setSelectedFilters}\n fireChangeEvent={fireChangeEvent}\n />\n\n <form className='mt-2 w-full' onSubmit={handleSubmit} ref={formRef}>\n <label className={`input flex items-center gap-2 ${isError ? 'input-error' : 'input-bordered'}`}>\n <input\n className='grow min-w-0'\n type='text'\n value={inputValue}\n onInput={handleInputChange}\n placeholder={'Enter a mutation'}\n onBlur={handleOnBlur}\n />\n <button className='btn btn-sm'>+</button>\n </label>\n </form>\n </div>\n );\n};\n\nconst SelectedMutationDisplay: FunctionComponent<{\n selectedFilters: SelectedFilters;\n setSelectedFilters: (selectedFilters: SelectedFilters) => void;\n fireChangeEvent: (selectedFilters: SelectedFilters) => void;\n}> = ({ selectedFilters, setSelectedFilters, fireChangeEvent }) => {\n const onSelectedRemoved = <MutationType extends keyof SelectedFilters>(\n mutation: SelectedFilters[MutationType][number],\n key: MutationType,\n ) => {\n const newSelectedValues = {\n ...selectedFilters,\n [key]: selectedFilters[key].filter((i) => !mutation.equals(i)),\n };\n\n setSelectedFilters(newSelectedValues);\n\n fireChangeEvent(newSelectedValues);\n };\n\n return (\n <ul class='flex flex-wrap'>\n {selectedFilters.nucleotideMutations.map((mutation) => (\n <li key={mutation.toString()}>\n <SelectedNucleotideMutation\n mutation={mutation}\n onDelete={(mutation: Substitution | Deletion) =>\n onSelectedRemoved(mutation, 'nucleotideMutations')\n }\n />\n </li>\n ))}\n {selectedFilters.aminoAcidMutations.map((mutation) => (\n <li key={mutation.toString()}>\n <SelectedAminoAcidMutation\n mutation={mutation}\n onDelete={(mutation: Substitution | Deletion) =>\n onSelectedRemoved(mutation, 'aminoAcidMutations')\n }\n />\n </li>\n ))}\n {selectedFilters.nucleotideInsertions.map((insertion) => (\n <li key={insertion.toString()}>\n <SelectedNucleotideInsertion\n insertion={insertion}\n onDelete={(insertion) => onSelectedRemoved(insertion, 'nucleotideInsertions')}\n />\n </li>\n ))}\n {selectedFilters.aminoAcidInsertions.map((insertion) => (\n <li key={insertion.toString()}>\n <SelectedAminoAcidInsertion\n insertion={insertion}\n onDelete={(insertion: Insertion) => onSelectedRemoved(insertion, 'aminoAcidInsertions')}\n />\n </li>\n ))}\n </ul>\n );\n};\n\nconst SelectedAminoAcidInsertion: FunctionComponent<{\n insertion: Insertion;\n onDelete: (insertion: Insertion) => void;\n}> = ({ insertion, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('teal', 0.3);\n const textColor = singleGraphColorRGBByName('teal', 1);\n return (\n <SelectedFilter\n mutation={insertion}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedAminoAcidMutation: FunctionComponent<{\n mutation: Substitution | Deletion;\n onDelete: (mutation: Substitution | Deletion) => void;\n}> = ({ mutation, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('rose', 0.3);\n const textColor = singleGraphColorRGBByName('rose', 1);\n return (\n <SelectedFilter\n mutation={mutation}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedNucleotideMutation: FunctionComponent<{\n mutation: Substitution | Deletion;\n onDelete: (insertion: Substitution | Deletion) => void;\n}> = ({ mutation, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('indigo', 0.3);\n const textColor = singleGraphColorRGBByName('indigo', 1);\n return (\n <SelectedFilter\n mutation={mutation}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedNucleotideInsertion: FunctionComponent<{\n insertion: Insertion;\n onDelete: (insertion: Insertion) => void;\n}> = ({ insertion, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('green', 0.3);\n const textColor = singleGraphColorRGBByName('green', 1);\n\n return (\n <SelectedFilter\n mutation={insertion}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\ntype SelectedFilterProps<MutationType extends Mutation> = {\n mutation: MutationType;\n onDelete: (mutation: MutationType) => void;\n backgroundColor: string;\n textColor: string;\n};\n\nconst SelectedFilter = <MutationType extends Mutation>({\n mutation,\n onDelete,\n backgroundColor,\n textColor,\n}: SelectedFilterProps<MutationType>) => {\n return (\n <div\n class='flex items-center flex-nowrap gap-1 rounded me-1 px-2.5 py-0.5 font-medium text-xs mb-1'\n style={{ backgroundColor, color: textColor }}\n >\n <div>{mutation.toString()}</div>\n <button onClick={() => onDelete(mutation)}>\n <DeleteIcon />\n </button>\n </div>\n );\n};\n\nfunction mapToMutationFilterStrings(selectedFilters: SelectedFilters) {\n return {\n aminoAcidMutations: selectedFilters.aminoAcidMutations.map((mutation) => mutation.toString()),\n nucleotideMutations: selectedFilters.nucleotideMutations.map((mutation) => mutation.toString()),\n aminoAcidInsertions: selectedFilters.aminoAcidInsertions.map((insertion) => insertion.toString()),\n nucleotideInsertions: selectedFilters.nucleotideInsertions.map((insertion) => insertion.toString()),\n };\n}\n","import { customElement } from 'lit/decorators.js';\n\nimport { type TextInputComponent } from './text-input-component';\nimport { MutationFilter, type SelectedMutationFilterStrings } from '../../preact/mutationFilter/mutation-filter';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<SelectedMutationFilterStrings>} gs-mutation-filter-changed - When the mutation filter values have changed\n * @fires {CustomEvent<SelectedMutationFilterStrings>} gs-mutation-filter-on-blur - When the mutation filter has lost focus\n */\n@customElement('gs-mutation-filter')\nexport class MutationFilterComponent extends PreactLitAdapter {\n override render() {\n return <MutationFilter />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutation-filter': TextInputComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-mutation-filter-changed': CustomEvent<SelectedMutationFilterStrings>;\n 'gs-mutation-filter-on-blur': CustomEvent<SelectedMutationFilterStrings>;\n }\n}\n"],"names":["t","e","o","s","r","n","S","c","i","h","a","l","p","d","u","f","y","_a","z","__decorateClass","property","customElement","D","wrapper","useRef","useEffect","jsx","b","useState","useMemo","_","jsxs","createContext","item","useContext","error","Toolbar","ReactiveElement","byProportion","datasets","tooltip","v","padStart","padZoneStr","monthDiff","C.M","absFloor","prettyUnit","C.Y","C.W","C.D","C.DATE","C.H","C.MIN","C.S","C.MS","isUndefined","isDayjs","parseLocale","dayjs","parseDate","C.REGEX_PARSE","m","Dayjs","C.INVALID_DATE_STRING","instanceFactory","instanceFactorySet","C.MILLISECONDS_A_MINUTE","C.MILLISECONDS_A_HOUR","C.MILLISECONDS_A_SECOND","C.FORMAT_DEFAULT","getShort","get$H","matches","C.REGEX_FORMAT","diff","getMonth","C.Q","C.MILLISECONDS_A_WEEK","C.MILLISECONDS_A_DAY","proto","getYearFirstThursday","getCurrentWeekThursday","total","data","granularity","aggregatedResponse","options","value","selectedFilters","mutation","insertion"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,MAAMA,MAAE,CAAAA,OAAG,CAACC,IAAEC,OAAI;AAAC,aAASA,KAAEA,GAAE,eAAgB,MAAI;AAAC,mBAAe,OAAOF,IAAEC,EAAC;AAAA,EAAC,CAAC,IAAG,eAAe,OAAOD,IAAEC,EAAC;AAAC;ACL7G;AAAA;AAAA;AAAA;AAAA;AAKA,MAAMD,MAAE,YAAWC,MAAED,IAAE,eAAa,WAASA,IAAE,YAAUA,IAAE,SAAS,iBAAe,wBAAuB,SAAS,aAAW,aAAY,cAAc,WAAUG,MAAE,OAAQ,GAACD,MAAE,oBAAI;AAAO,IAAA,MAAC,MAAM,EAAC;AAAA,EAAC,YAAYF,IAAEC,IAAEC,IAAE;AAAC,QAAG,KAAK,eAAa,MAAGA,OAAIC;AAAE,YAAM,MAAM,mEAAmE;AAAE,SAAK,UAAQH,IAAE,KAAK,IAAEC;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,QAAID,KAAE,KAAK;AAAE,UAAMG,KAAE,KAAK;AAAE,QAAGF,OAAG,WAASD,IAAE;AAAC,YAAMC,KAAE,WAASE,MAAG,MAAIA,GAAE;AAAO,MAAAF,OAAID,KAAEE,IAAE,IAAIC,EAAC,IAAG,WAASH,QAAK,KAAK,IAAEA,KAAE,IAAI,iBAAe,YAAY,KAAK,OAAO,GAAEC,MAAGC,IAAE,IAAIC,IAAEH,EAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAO;AAAC;AAAM,MAACI,MAAE,CAAAJ,OAAG,IAAIK,IAAE,YAAU,OAAOL,KAAEA,KAAEA,KAAE,IAAG,QAAOG,GAAC,GAA2VG,MAAE,CAACH,IAAED,OAAI;AAAC,MAAGD;AAAE,IAAAE,GAAE,qBAAmBD,GAAE,IAAK,CAAAF,OAAGA,cAAa,gBAAcA,KAAEA,GAAE;;AAAkB,eAAUC,MAAKC,IAAE;AAAC,YAAMA,KAAE,SAAS,cAAc,OAAO,GAAEG,KAAEL,IAAE;AAAS,iBAASK,MAAGH,GAAE,aAAa,SAAQG,EAAC,GAAEH,GAAE,cAAYD,GAAE,SAAQE,GAAE,YAAYD,EAAC;AAAA,IAAC;AAAC,GAAEK,MAAEN,MAAE,CAAAD,OAAGA,KAAE,CAAAA,OAAGA,cAAa,iBAAe,CAAAA,OAAG;AAAC,MAAIC,KAAE;AAAG,aAAUE,MAAKH,GAAE;AAAS,IAAAC,MAAGE,GAAE;AAAQ,SAAOC,IAAEH,EAAC;AAAC,GAAGD,EAAC,IAAEA;ACJ3zC;AAAA;AAAA;AAAA;AAAA;AAIG,MAAK,EAAC,IAAGQ,KAAE,gBAAeP,KAAE,0BAAyBG,KAAE,qBAAoBK,KAAE,uBAAsBP,KAAE,gBAAeG,IAAC,IAAE,QAAOK,MAAE,YAAWH,MAAEG,IAAE,cAAaC,MAAEJ,MAAEA,IAAE,cAAY,IAAGK,MAAEF,IAAE,gCAA+BG,MAAE,CAACb,IAAEG,OAAIH,IAAEc,MAAE,EAAC,YAAYd,IAAEG,IAAE;AAAC,UAAOA,IAAC;AAAA,IAAE,KAAK;AAAQ,MAAAH,KAAEA,KAAEW,MAAE;AAAK;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,MAAAX,KAAE,QAAMA,KAAEA,KAAE,KAAK,UAAUA,EAAC;AAAA,EAAC;AAAC,SAAOA;AAAC,GAAE,cAAcA,IAAEG,IAAE;AAAC,MAAIK,KAAER;AAAE,UAAOG,IAAG;AAAA,IAAA,KAAK;AAAQ,MAAAK,KAAE,SAAOR;AAAE;AAAA,IAAM,KAAK;AAAO,MAAAQ,KAAE,SAAOR,KAAE,OAAK,OAAOA,EAAC;AAAE;AAAA,IAAM,KAAK;AAAA,IAAO,KAAK;AAAM,UAAG;AAAC,QAAAQ,KAAE,KAAK,MAAMR,EAAC;AAAA,MAAC,SAAOA,IAAE;AAAC,QAAAQ,KAAE;AAAA,MAAI;AAAA,EAAC;AAAC,SAAOA;AAAC,EAAC,GAAEO,MAAE,CAACf,IAAEG,OAAI,CAACK,IAAER,IAAEG,EAAC,GAAEa,MAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAUF,KAAE,SAAQ,OAAG,YAAWC,IAAC;AAAE,OAAO,aAAP,OAAO,WAAW,OAAO,UAAU,IAAEL,IAAE,wBAAFA,IAAE,sBAAsB,oBAAI;AAAQ,MAAM,UAAU,YAAW;AAAA,EAAC,OAAO,eAAeV,IAAE;AAAC,SAAK,KAAM,IAAE,KAAK,MAAL,KAAK,IAAI,CAAA,IAAI,KAAKA,EAAC;AAAA,EAAC;AAAA,EAAC,WAAW,qBAAoB;AAAC,WAAO,KAAK,YAAW,KAAK,QAAM,CAAC,GAAG,KAAK,KAAK,KAAM,CAAA;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeA,IAAEG,KAAEa,KAAE;AAAC,QAAGb,GAAE,UAAQA,GAAE,YAAU,QAAI,KAAK,KAAM,GAAC,KAAK,kBAAkB,IAAIH,IAAEG,EAAC,GAAE,CAACA,GAAE,YAAW;AAAC,YAAMK,KAAE,OAAM,GAAGJ,KAAE,KAAK,sBAAsBJ,IAAEQ,IAAEL,EAAC;AAAE,iBAASC,MAAGH,IAAE,KAAK,WAAUD,IAAEI,EAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsBJ,IAAEG,IAAEK,IAAE;AAAC,UAAK,EAAC,KAAIP,IAAE,KAAIQ,GAAC,IAAEL,IAAE,KAAK,WAAUJ,EAAC,KAAG,EAAC,MAAK;AAAC,aAAO,KAAKG,EAAC;AAAA,IAAC,GAAE,IAAIH,IAAE;AAAC,WAAKG,EAAC,IAAEH;AAAA,IAAC,EAAC;AAAE,WAAM,EAAC,MAAK;AAAC,aAAOC,MAAA,gBAAAA,GAAG,KAAK;AAAA,IAAK,GAAE,IAAIE,IAAE;AAAC,YAAMC,KAAEH,MAAA,gBAAAA,GAAG,KAAK;AAAM,MAAAQ,GAAE,KAAK,MAAKN,EAAC,GAAE,KAAK,cAAcH,IAAEI,IAAEI,EAAC;AAAA,IAAC,GAAE,cAAa,MAAG,YAAW,KAAE;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmBR,IAAE;AAAC,WAAO,KAAK,kBAAkB,IAAIA,EAAC,KAAGgB;AAAAA,EAAC;AAAA,EAAC,OAAO,OAAM;AAAC,QAAG,KAAK,eAAeH,IAAE,mBAAmB,CAAC;AAAE;AAAO,UAAMb,KAAEK,IAAE,IAAI;AAAE,IAAAL,GAAE,SAAU,GAAC,WAASA,GAAE,MAAI,KAAK,IAAE,CAAC,GAAGA,GAAE,CAAC,IAAG,KAAK,oBAAkB,IAAI,IAAIA,GAAE,iBAAiB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAU;AAAC,QAAG,KAAK,eAAea,IAAE,WAAW,CAAC;AAAE;AAAO,QAAG,KAAK,YAAU,MAAG,KAAK,KAAI,GAAG,KAAK,eAAeA,IAAE,YAAY,CAAC,GAAE;AAAC,YAAMb,KAAE,KAAK,YAAWG,KAAE,CAAC,GAAGM,IAAET,EAAC,GAAE,GAAGE,IAAEF,EAAC,CAAC;AAAE,iBAAUQ,MAAKL;AAAE,aAAK,eAAeK,IAAER,GAAEQ,EAAC,CAAC;AAAA,IAAC;AAAC,UAAMR,KAAE,KAAK,OAAO,QAAQ;AAAE,QAAG,SAAOA,IAAE;AAAC,YAAMG,KAAE,oBAAoB,IAAIH,EAAC;AAAE,UAAG,WAASG;AAAE,mBAAS,CAACH,IAAEQ,EAAC,KAAIL;AAAE,eAAK,kBAAkB,IAAIH,IAAEQ,EAAC;AAAA,IAAC;AAAC,SAAK,OAAK,oBAAI;AAAI,eAAS,CAACR,IAAEG,EAAC,KAAI,KAAK,mBAAkB;AAAC,YAAMK,KAAE,KAAK,KAAKR,IAAEG,EAAC;AAAE,iBAASK,MAAG,KAAK,KAAK,IAAIA,IAAER,EAAC;AAAA,IAAC;AAAC,SAAK,gBAAc,KAAK,eAAe,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,eAAeG,IAAE;AAAC,UAAMK,KAAE,CAAA;AAAG,QAAG,MAAM,QAAQL,EAAC,GAAE;AAAC,YAAMF,KAAE,IAAI,IAAIE,GAAE,KAAK,IAAE,CAAC,EAAE,QAAO,CAAE;AAAE,iBAAUA,MAAKF;AAAE,QAAAO,GAAE,QAAQR,IAAEG,EAAC,CAAC;AAAA,IAAC;AAAM,iBAASA,MAAGK,GAAE,KAAKR,IAAEG,EAAC,CAAC;AAAE,WAAOK;AAAA,EAAC;AAAA,EAAC,OAAO,KAAKR,IAAEG,IAAE;AAAC,UAAMK,KAAEL,GAAE;AAAU,WAAM,UAAKK,KAAE,SAAO,YAAU,OAAOA,KAAEA,KAAE,YAAU,OAAOR,KAAEA,GAAE,YAAa,IAAC;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,UAAK,GAAG,KAAK,OAAK,QAAO,KAAK,kBAAgB,OAAG,KAAK,aAAW,OAAG,KAAK,OAAK,MAAK,KAAK,KAAI;AAAA,EAAE;AAAA,EAAC,OAAM;;AAAC,SAAK,OAAK,IAAI,QAAS,CAAAA,OAAG,KAAK,iBAAeA,KAAI,KAAK,OAAK,oBAAI,OAAI,KAAK,KAAI,GAAG,KAAK,cAAe,IAAC,UAAK,YAAY,MAAjB,mBAAoB,QAAS,CAAAA,OAAGA,GAAE,IAAI;AAAA,EAAG;AAAA,EAAC,cAAcA,IAAE;;AAAC,KAAC,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC,GAAE,WAAS,KAAK,cAAY,KAAK,iBAAa,KAAAA,GAAE,kBAAF,wBAAAA;AAAA,EAAmB;AAAA,EAAC,iBAAiBA,IAAE;;AAAC,eAAK,SAAL,mBAAW,OAAOA;AAAA,EAAE;AAAA,EAAC,OAAM;AAAC,UAAMA,KAAE,oBAAI,OAAIG,KAAE,KAAK,YAAY;AAAkB,eAAUK,MAAKL,GAAE,KAAM;AAAC,WAAK,eAAeK,EAAC,MAAIR,GAAE,IAAIQ,IAAE,KAAKA,EAAC,CAAC,GAAE,OAAO,KAAKA,EAAC;AAAG,IAAAR,GAAE,OAAK,MAAI,KAAK,OAAKA;AAAA,EAAE;AAAA,EAAC,mBAAkB;AAAC,UAAMA,KAAE,KAAK,cAAY,KAAK,aAAa,KAAK,YAAY,iBAAiB;AAAE,WAAOG,IAAEH,IAAE,KAAK,YAAY,aAAa,GAAEA;AAAA,EAAC;AAAA,EAAC,oBAAmB;;AAAC,SAAK,eAAL,KAAK,aAAa,KAAK,iBAAkB,IAAC,KAAK,eAAe,IAAE,IAAE,UAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAiB,MAAAjB,GAAE,kBAAF,gBAAAiB,IAAA,KAAAjB;AAAA;AAAA,EAAqB;AAAA,EAAC,eAAeA,IAAE;AAAA,EAAE;AAAA,EAAA,uBAAsB;;AAAC,eAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAiB,MAAAjB,GAAE,qBAAF,gBAAAiB,IAAA,KAAAjB;AAAA;AAAA,EAAwB;AAAA,EAAC,yBAAyBA,IAAEG,IAAEK,IAAE;AAAC,SAAK,KAAKR,IAAEQ,EAAC;AAAA,EAAC;AAAA,EAAC,KAAKR,IAAEG,IAAE;;AAAC,UAAMK,KAAE,KAAK,YAAY,kBAAkB,IAAIR,EAAC,GAAEC,KAAE,KAAK,YAAY,KAAKD,IAAEQ,EAAC;AAAE,QAAG,WAASP,MAAG,SAAKO,GAAE,SAAQ;AAAC,YAAMJ,MAAG,aAAS,KAAAI,GAAE,cAAF,mBAAa,eAAYA,GAAE,YAAUM,KAAG,YAAYX,IAAEK,GAAE,IAAI;AAAE,WAAK,OAAKR,IAAE,QAAMI,KAAE,KAAK,gBAAgBH,EAAC,IAAE,KAAK,aAAaA,IAAEG,EAAC,GAAE,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,KAAKJ,IAAEG,IAAE;;AAAC,UAAMK,KAAE,KAAK,aAAYP,KAAEO,GAAE,KAAK,IAAIR,EAAC;AAAE,QAAG,WAASC,MAAG,KAAK,SAAOA,IAAE;AAAC,YAAMD,KAAEQ,GAAE,mBAAmBP,EAAC,GAAEG,KAAE,cAAY,OAAOJ,GAAE,YAAU,EAAC,eAAcA,GAAE,UAAS,IAAE,aAAS,KAAAA,GAAE,cAAF,mBAAa,iBAAcA,GAAE,YAAUc;AAAE,WAAK,OAAKb,IAAE,KAAKA,EAAC,IAAEG,GAAE,cAAcD,IAAEH,GAAE,IAAI,GAAE,KAAK,OAAK;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,cAAcA,IAAEG,IAAEK,IAAE;AAAC,QAAG,WAASR,IAAE;AAAC,UAAGQ,YAAI,KAAK,YAAY,mBAAmBR,EAAC,IAAE,EAAEQ,GAAE,cAAYO,KAAG,KAAKf,EAAC,GAAEG,EAAC;AAAE;AAAO,WAAK,EAAEH,IAAEG,IAAEK,EAAC;AAAA,IAAC;AAAC,cAAK,KAAK,oBAAkB,KAAK,OAAK,KAAK,KAAM;AAAA,EAAC;AAAA,EAAC,EAAER,IAAEG,IAAEK,IAAE;AAAC,SAAK,KAAK,IAAIR,EAAC,KAAG,KAAK,KAAK,IAAIA,IAAEG,EAAC,GAAE,SAAKK,GAAE,WAAS,KAAK,SAAOR,OAAI,KAAK,SAAL,KAAK,OAAO,oBAAI,QAAK,IAAIA,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,SAAK,kBAAgB;AAAG,QAAG;AAAC,YAAM,KAAK;AAAA,IAAI,SAAOA,IAAE;AAAC,cAAQ,OAAOA,EAAC;AAAA,IAAC;AAAC,UAAMA,KAAE,KAAK,eAAgB;AAAC,WAAO,QAAMA,MAAG,MAAMA,IAAE,CAAC,KAAK;AAAA,EAAe;AAAA,EAAC,iBAAgB;AAAC,WAAO,KAAK,cAAe;AAAA,EAAA;AAAA,EAAC,gBAAe;;AAAC,QAAG,CAAC,KAAK;AAAgB;AAAO,QAAG,CAAC,KAAK,YAAW;AAAC,UAAG,KAAK,eAAL,KAAK,aAAa,KAAK,iBAAgB,IAAG,KAAK,MAAK;AAAC,mBAAS,CAACA,IAAEG,EAAC,KAAI,KAAK;AAAK,eAAKH,EAAC,IAAEG;AAAE,aAAK,OAAK;AAAA,MAAM;AAAC,YAAMH,KAAE,KAAK,YAAY;AAAkB,UAAGA,GAAE,OAAK;AAAE,mBAAS,CAACG,IAAEK,EAAC,KAAIR;AAAE,mBAAKQ,GAAE,WAAS,KAAK,KAAK,IAAIL,EAAC,KAAG,WAAS,KAAKA,EAAC,KAAG,KAAK,EAAEA,IAAE,KAAKA,EAAC,GAAEK,EAAC;AAAA,IAAC;AAAC,QAAIR,KAAE;AAAG,UAAMG,KAAE,KAAK;AAAK,QAAG;AAAC,MAAAH,KAAE,KAAK,aAAaG,EAAC,GAAEH,MAAG,KAAK,WAAWG,EAAC,IAAE,UAAK,SAAL,mBAAW,QAAS,CAAAH,OAAC;;AAAE,gBAAAiB,MAAAjB,GAAE,eAAF,gBAAAiB,IAAA,KAAAjB;AAAA,UAAmB,KAAK,OAAOG,EAAC,KAAG,KAAK,KAAM;AAAA,IAAA,SAAOA,IAAE;AAAC,YAAMH,KAAE,OAAG,KAAK,KAAI,GAAGG;AAAA,IAAC;AAAC,IAAAH,MAAG,KAAK,KAAKG,EAAC;AAAA,EAAC;AAAA,EAAC,WAAWH,IAAE;AAAA,EAAE;AAAA,EAAA,KAAKA,IAAE;;AAAC,eAAK,SAAL,mBAAW,QAAS,CAAAA,OAAC;;AAAE,cAAAiB,MAAAjB,GAAE,gBAAF,gBAAAiB,IAAA,KAAAjB;AAAA,QAAoB,KAAK,eAAa,KAAK,aAAW,MAAG,KAAK,aAAaA,EAAC,IAAG,KAAK,QAAQA,EAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,SAAK,OAAK,oBAAI,OAAI,KAAK,kBAAgB;AAAA,EAAE;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK,kBAAiB;AAAA,EAAE;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAI;AAAA,EAAC,aAAaA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,OAAOA,IAAE;AAAC,SAAK,SAAL,KAAK,OAAO,KAAK,KAAK,QAAS,CAAAA,OAAG,KAAK,KAAKA,IAAE,KAAKA,EAAC,CAAC,CAAG,IAAC,KAAK,KAAI;AAAA,EAAE;AAAA,EAAC,QAAQA,IAAE;AAAA,EAAA;AAAA,EAAE,aAAaA,IAAE;AAAA,EAAA;AAAE;AAAC,EAAE,gBAAc,CAAA,GAAG,EAAE,oBAAkB,EAAC,MAAK,OAAM,GAAE,EAAEa,IAAE,mBAAmB,CAAC,IAAE,oBAAI,OAAI,EAAEA,IAAE,WAAW,CAAC,IAAE,oBAAI,OAAID,2BAAI,EAAC,iBAAgB,EAAC,KAAIF,IAAE,4BAAFA,IAAE,0BAA0B,CAAA,IAAI,KAAK,OAAO;ACJx7K;AAAA;AAAA;AAAA;AAAA;AAIG,MAAMR,MAAE,EAAC,WAAU,MAAG,MAAK,QAAO,WAAUF,KAAE,SAAQ,OAAG,YAAWC,IAAC,GAAEG,MAAE,CAACJ,KAAEE,KAAED,IAAEG,OAAI;AAAC,QAAK,EAAC,MAAKC,IAAE,UAASG,GAAC,IAAEJ;AAAE,MAAID,KAAE,WAAW,oBAAoB,IAAIK,EAAC;AAAE,MAAG,WAASL,MAAG,WAAW,oBAAoB,IAAIK,IAAEL,KAAE,oBAAI,KAAG,GAAEA,GAAE,IAAIC,GAAE,MAAKJ,EAAC,GAAE,eAAaK,IAAE;AAAC,UAAK,EAAC,MAAKH,GAAC,IAAEE;AAAE,WAAM,EAAC,IAAIA,IAAE;AAAC,YAAMC,KAAEJ,GAAE,IAAI,KAAK,IAAI;AAAE,MAAAA,GAAE,IAAI,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcF,IAAEG,IAAEL,EAAC;AAAA,IAAC,GAAE,KAAKC,IAAE;AAAC,aAAO,WAASA,MAAG,KAAK,EAAEC,IAAE,QAAOF,EAAC,GAAEC;AAAA,IAAC,EAAC;AAAA,EAAC;AAAC,MAAG,aAAWI,IAAE;AAAC,UAAK,EAAC,MAAKH,GAAC,IAAEE;AAAE,WAAO,SAASA,IAAE;AAAC,YAAMC,KAAE,KAAKH,EAAC;AAAE,MAAAD,GAAE,KAAK,MAAKG,EAAC,GAAE,KAAK,cAAcF,IAAEG,IAAEL,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,QAAM,MAAM,qCAAmCK,EAAC;AAAC;AAAE,SAASA,GAAEL,IAAE;AAAC,SAAM,CAACC,IAAEC,OAAI,YAAU,OAAOA,KAAEE,IAAEJ,IAAEC,IAAEC,EAAC,KAAG,CAACF,IAAEC,IAAEC,OAAI;AAAC,UAAME,KAAEH,GAAE,eAAeC,EAAC;AAAE,WAAOD,GAAE,YAAY,eAAeC,IAAEE,KAAE,EAAC,GAAGJ,IAAE,SAAQ,KAAE,IAAEA,EAAC,GAAEI,KAAE,OAAO,yBAAyBH,IAAEC,EAAC,IAAE;AAAA,EAAM,GAAGF,IAAEC,IAAEC,EAAC;AAAC;ACH1vB,MAAA,eAAe,cAAsB,eAAe;ACEpD,MAAA,yBAAyB,cAA+B,0BAA0B;ACAlF,MAAA,0BAA0BgB,IAAE,OAAO;AAAA,EAC5C,qBAAqBA,IAAE;AAAA,IACnBA,IAAE,OAAO;AAAA,MACL,MAAMA,IAAE,OAAO;AAAA,MACf,UAAUA,IAAE,OAAO;AAAA,IAAA,CACtB;AAAA,EACL;AAAA,EACA,OAAOA,IAAE;AAAA,IACLA,IAAE,OAAO;AAAA,MACL,MAAMA,IAAE,OAAO;AAAA,MACf,UAAUA,IAAE,OAAO;AAAA,IAAA,CACtB;AAAA,EACL;AACJ,CAAC;AAGY,MAAA,kBAAkB,CAAC,iBAAkC,iBAA+B;AAC7F,UAAQ,cAAc;AAAA,IAClB,KAAK,cAAc;AACf,aAAO,gBAAgB,oBAAoB,IAAI,CAAC,aAAa,SAAS,IAAI;AAAA,IAC9E;AAAA,IACA,KAAK,cAAc;AACf,aAAO,gBAAgB,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,IACxD;AAAA,EACJ;AACJ;AC3BO,MAAM,cAAcA,IAAE,KAAK,CAAC,aAAa,YAAY,CAAC;AAEhD,MAAA,UAAUA,IAAE,OAAO;AAAA,EAC5B,OAAOA,IAAE,OAAO;AAAA,EAChB,MAAM;AACV,CAAC;AAEY,MAAA,mBAAmBA,IAC3B,OAAO;AAAA,EACJ,OAAOA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,QAAQA,IAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQA,IAAE,MAAMA,IAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,SAASA,IAAE,MAAM,OAAO,EAAE,SAAS;AACvC,CAAC,EACA,SAASA,IAAE,MAAM,CAACA,IAAE,QAAA,GAAWA,IAAE,UAAU,GAAGA,IAAE,OAAA,GAAUA,IAAE,OAAO,GAAGA,IAAE,QAAQA,IAAE,MAAMA,IAAE,QAAQ,CAAC,CAAC,CAAC;AAG1E,iBAAiB,OAAO,EAAE,eAAeA,IAAE,OAAO,EAAE,SAAS,GAAG;AAGhG,MAAM,0BAA0BA,IAAE,OAAO;AAAA,EACrC,UAAUA,IAAE,OAAO;AAAA,EACnB,YAAYA,IAAE,OAAO;AAAA,EACrB,OAAOA,IAAE,OAAO;AAAA,EAChB,cAAcA,IAAE,MAAM,CAACA,IAAE,UAAUA,IAAE,KAAK,CAAC,CAAC;AAAA,EAC5C,cAAcA,IAAE,OAAO;AAAA,EACvB,YAAYA,IAAE,OAAO;AAAA,EACrB,UAAUA,IAAE,OAAO;AACvB,CAAC;AACM,MAAM,oBAAoB,kBAAkBA,IAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,iBAAiBA,IAAE,OAAO;AAAA,EAC5B,WAAWA,IAAE,OAAO;AAAA,EACpB,OAAOA,IAAE,OAAO;AAAA,EAChB,iBAAiBA,IAAE,OAAO;AAAA,EAC1B,UAAUA,IAAE,OAAO;AAAA,EACnB,cAAcA,IAAE,MAAM,CAACA,IAAE,UAAUA,IAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AACM,MAAM,qBAAqB,kBAAkBA,IAAE,MAAM,cAAc,CAAC;AAE9D,MAAA,iBAAiBA,IAAE,OAAO,EAAE,OAAOA,IAAE,OAAO,EAAA,CAAG,EAAE,SAASA,IAAE,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,UAAUA,IAAE,MAAM,CAAC,CAAC;AAC3G,MAAM,qBAAqB,kBAAkBA,IAAE,MAAM,cAAc,CAAC;AAG3E,SAAS,kBAAwC,MAAS;AACtD,SAAOA,IAAE,OAAO;AAAA,IACZ;AAAA,EAAA,CACH;AACL;ACxCsB,eAAA,gBAAgB,UAAkB,MAAwB,QAAsB;AAClG,QAAM,WAAW,MAAM,MAAM,mBAAmB,QAAQ,GAAG;AAAA,IACvD,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EAAA,CACH;AAED,QAAM,aAAa,QAAQ;AAE3B,SAAO,mBAAmB,MAAM,MAAM,SAAS,KAAM,CAAA;AACzD;AAEA,eAAsB,gBAClB,UACA,MACA,cACA,QACF;AACE,QAAM,WAAW,MAAM,MAAM,mBAAmB,UAAU,YAAY,GAAG;AAAA,IACrE,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EAAA,CACH;AAED,QAAM,aAAa,QAAQ;AAE3B,SAAO,mBAAmB,MAAM,MAAM,SAAS,KAAM,CAAA;AACzD;AAEA,eAAsB,8BAClB,UACA,MACA,cACA,QACF;AACE,QAAM,WAAW,MAAM,MAAM,iCAAiC,UAAU,YAAY,GAAG;AAAA,IACnF,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EAAA,CACH;AAED,QAAM,aAAa,QAAQ;AAE3B,SAAO,kBAAkB,MAAM,MAAM,SAAS,KAAM,CAAA;AACxD;AAEsB,eAAA,qBAAqB,UAAkB,QAAsB;AAC/E,QAAM,WAAW,MAAM,MAAM,wBAAwB,QAAQ,GAAG;AAAA,IAC5D,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA;AAAA,EAAA,CACH;AAED,QAAM,aAAa,QAAQ;AAC3B,SAAO,wBAAwB,MAAM,MAAM,SAAS,KAAM,CAAA;AAC9D;AAEA,MAAM,eAAe,OAAO,aAAuB;AAC3C,MAAA,CAAC,SAAS,IAAI;AACV,QAAA,SAAS,SAAS,QAAQ,GAAG;AAC7B,YAAM,IAAI,MAAM,GAAG,SAAS,UAAU,KAAK,KAAK,UAAU,MAAM,SAAS,KAAK,CAAC,CAAC,EAAE;AAAA,IACtF;AACM,UAAA,IAAI,MAAM,GAAG,SAAS,UAAU,KAAK,SAAS,MAAM,EAAE;AAAA,EAChE;AACJ;AAEO,MAAM,qBAAqB,CAAC,aAAqB,GAAG,QAAQ;AACtD,MAAA,qBAAqB,CAAC,UAAkB,iBAA+B;AAChF,SAAO,iBAAiB,eAClB,GAAG,QAAQ,gCACX,GAAG,QAAQ;AACrB;AACa,MAAA,mCAAmC,CAAC,UAAkB,iBAA+B;AAC9F,SAAO,iBAAiB,eAClB,GAAG,QAAQ,+BACX,GAAG,QAAQ;AACrB;AACO,MAAM,0BAA0B,CAAC,aAAqB,GAAG,QAAQ;;;;;;;;;;;;ACvF3D,IAAA,MAAN,cAAkB,WAAW;AAAA,EAA7B,cAAA;AAAA,UAAA,GAAA,SAAA;AAGa,SAAA,QAAA;AAGmB,SAAA,kBAAA;AAAA,MAC/B,qBAAqB,CAAC;AAAA,MACtB,OAAO,CAAC;AAAA,IAAA;AAGJ,SAAA,wBAAwB,IAAI,KAAK,MAAM;AAAA,MAC3C,MAAM,YAAY;AACd,aAAK,kBAAkB,MAAM,qBAAqB,KAAK,KAAK;AAAA,MAChE;AAAA,MACA,MAAM,MAAM,CAAC,KAAK,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA;AAAA,EAEQ,SAAS;AACP,WAAA,KAAK,sBAAsB,OAAO;AAAA,MACrC,UAAU,MAAM;AACL,eAAA;AAAA,MACX;AAAA,MACA,OAAO,MAAM;AAAA;AAAA,MACb,SAAS,MAAM;AACJ,eAAA;AAAA,MACX;AAAA,IAAA,CACH;AAAA,EACL;AAAA,EAES,mBAAmB;AACjB,WAAA;AAAA,EACX;AACJ;AA9BIC,kBAAA;AAAA,EAFC,QAAQ,EAAE,SAAS,cAAc;AAAA,EACjCC,GAAS;AAAA,GAFD,IAGT,WAAA,SAAA,CAAA;AAGAD,kBAAA;AAAA,EADC,QAAQ,EAAE,SAAS,wBAAwB;AAAA,GALnC,IAMT,WAAA,mBAAA,CAAA;AANS,MAANA,kBAAA;AAAA,EADNE,IAAc,QAAQ;AAAA,GACV,GAAA;ACXwW,IAAuEN,MAAE;AAAkB,SAASD,IAAEb,IAAED,IAAEK,IAAEH,IAAEM,IAAEM,IAAE;AAAC,MAAIJ,IAAEH,IAAEK,KAAE,CAAA;AAAG,OAAIL,MAAKP;AAAE,aAAOO,KAAEG,KAAEV,GAAEO,EAAC,IAAEK,GAAEL,EAAC,IAAEP,GAAEO,EAAC;AAAE,MAAII,KAAE,EAAC,MAAKV,IAAE,OAAMW,IAAE,KAAIP,IAAE,KAAIK,IAAE,KAAI,MAAK,IAAG,MAAK,KAAI,GAAE,KAAI,MAAK,KAAI,QAAO,KAAI,MAAK,aAAY,QAAO,KAAI,EAAEK,KAAE,KAAI,IAAG,KAAI,GAAE,UAASP,IAAE,QAAOM,GAAC;AAAE,MAAG,cAAY,OAAOb,OAAIS,KAAET,GAAE;AAAc,SAAIM,MAAKG;AAAE,iBAASE,GAAEL,EAAC,MAAIK,GAAEL,EAAC,IAAEG,GAAEH,EAAC;AAAG,SAAOH,QAAE,SAAOA,QAAE,MAAMO,EAAC,GAAEA;AAAC;ACA1vB,IAAI,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,CAAE,GAAC,IAAE,CAAA,GAAG,IAAEN,SAAE,IAAE,EAAE,KAAI,IAAE,EAAE,KAAI,IAAE,EAAE,QAAO,IAAE,EAAE,KAAI,IAAE,EAAE,SAAQ,IAAE,EAAE;AAAG,SAAS,EAAEA,IAAEL,IAAE;AAAC,IAAE,OAAK,EAAE,IAAI,GAAEK,IAAE,KAAGL,EAAC,GAAE,IAAE;AAAE,MAAIc,KAAE,EAAE,QAAM,EAAE,MAAI,EAAC,IAAG,IAAG,KAAI,CAAE,EAAA;AAAG,SAAOT,MAAGS,GAAE,GAAG,UAAQA,GAAE,GAAG,KAAK,EAAC,KAAI,EAAC,CAAC,GAAEA,GAAE,GAAGT,EAAC;AAAC;AAAC,SAAS,EAAEA,IAAE;AAAC,SAAO,IAAE,GAAE,EAAEiB,KAAEjB,EAAC;AAAC;AAAC,SAAS,EAAEA,IAAES,IAAEN,IAAE;AAAC,MAAIN,KAAE,EAAE,KAAI,CAAC;AAAE,MAAGA,GAAE,IAAEG,IAAE,CAACH,GAAE,QAAMA,GAAE,KAAG,CAACM,KAAEA,GAAEM,EAAC,IAAEQ,IAAE,QAAOR,EAAC,GAAE,SAAST,IAAE;AAAC,QAAIL,KAAEE,GAAE,MAAIA,GAAE,IAAI,CAAC,IAAEA,GAAE,GAAG,CAAC,GAAEE,KAAEF,GAAE,EAAEF,IAAEK,EAAC;AAAE,IAAAL,OAAII,OAAIF,GAAE,MAAI,CAACE,IAAEF,GAAE,GAAG,CAAC,CAAC,GAAEA,GAAE,IAAI,SAAS,CAAE,CAAA;AAAA,EAAE,CAAC,GAAEA,GAAE,MAAI,GAAE,CAAC,EAAE,IAAG;AAAC,QAAIa,KAAE,SAASV,IAAEL,IAAEI,IAAE;AAAC,UAAG,CAACF,GAAE,IAAI;AAAI,eAAM;AAAG,UAAIY,KAAEZ,GAAE,IAAI,IAAI,GAAG,OAAO,SAASG,IAAE;AAAC,eAAM,CAAC,CAACA,GAAE;AAAA,MAAG,CAAC;AAAE,UAAGS,GAAE,MAAM,SAAST,IAAE;AAAC,eAAM,CAACA,GAAE;AAAA,MAAG,CAAC;AAAE,eAAM,CAACE,MAAGA,GAAE,KAAK,MAAKF,IAAEL,IAAEI,EAAC;AAAE,UAAII,KAAE;AAAG,aAAOM,GAAE,QAAQ,SAAST,IAAE;AAAC,YAAGA,GAAE,KAAI;AAAC,cAAIL,KAAEK,GAAE,GAAG,CAAC;AAAE,UAAAA,GAAE,KAAGA,GAAE,KAAIA,GAAE,MAAI,QAAOL,OAAIK,GAAE,GAAG,CAAC,MAAIG,KAAE;AAAA,QAAG;AAAA,MAAC,CAAC,GAAE,EAAE,CAACA,MAAGN,GAAE,IAAI,UAAQG,QAAK,CAACE,MAAGA,GAAE,KAAK,MAAKF,IAAEL,IAAEI,EAAC;AAAA,IAAE;AAAE,MAAE,IAAE;AAAG,QAAIG,KAAE,EAAE,uBAAsBN,KAAE,EAAE;AAAoB,MAAE,sBAAoB,SAASI,IAAEL,IAAEI,IAAE;AAAC,UAAG,KAAK,KAAI;AAAC,YAAIU,KAAEP;AAAE,QAAAA,KAAE,QAAOQ,GAAEV,IAAEL,IAAEI,EAAC,GAAEG,KAAEO;AAAA,MAAC;AAAC,MAAAb,MAAGA,GAAE,KAAK,MAAKI,IAAEL,IAAEI,EAAC;AAAA,IAAC,GAAE,EAAE,wBAAsBW;AAAA,EAAC;AAAC,SAAOb,GAAE,OAAKA,GAAE;AAAE;AAAC,SAAS,EAAEG,IAAES,IAAE;AAAC,MAAIN,KAAE,EAAE,KAAI,CAAC;AAAE,GAAC,EAAE,OAAK,EAAEA,GAAE,KAAIM,EAAC,MAAIN,GAAE,KAAGH,IAAEG,GAAE,IAAEM,IAAE,EAAE,IAAI,IAAI,KAAKN,EAAC;AAAE;AAAiF,SAAS,EAAEH,IAAE;AAAC,SAAO,IAAE,GAAE,EAAE,WAAU;AAAC,WAAM,EAAC,SAAQA,GAAC;AAAA,EAAC,GAAE,CAAE,CAAA;AAAC;AAAsL,SAAS,EAAEA,IAAED,IAAE;AAAC,MAAIU,KAAE,EAAE,KAAI,CAAC;AAAE,SAAO,EAAEA,GAAE,KAAIV,EAAC,KAAGU,GAAE,MAAIT,GAAC,GAAGS,GAAE,IAAEV,IAAEU,GAAE,MAAIT,IAAES,GAAE,OAAKA,GAAE;AAAE;AAAsD,SAAS,EAAET,IAAE;AAAC,MAAIS,KAAE,EAAE,QAAQT,GAAE,GAAG,GAAEG,KAAE,EAAE,KAAI,CAAC;AAAE,SAAOA,GAAE,IAAEH,IAAES,MAAG,QAAMN,GAAE,OAAKA,GAAE,KAAG,MAAGM,GAAE,IAAI,CAAC,IAAGA,GAAE,MAAM,SAAOT,GAAE;AAAE;AAA6X,SAAS,IAAG;AAAC,WAAQA,IAAEA,KAAE,EAAE,MAAK;AAAI,QAAGA,GAAE,OAAKA,GAAE;AAAI,UAAG;AAAC,QAAAA,GAAE,IAAI,IAAI,QAAQ,CAAC,GAAEA,GAAE,IAAI,IAAI,QAAQ,CAAC,GAAEA,GAAE,IAAI,MAAI,CAAE;AAAA,MAAA,SAAOL,IAAE;AAAC,QAAAK,GAAE,IAAI,MAAI,CAAE,GAAC,EAAE,IAAIL,IAAEK,GAAE,GAAG;AAAA,MAAC;AAAC;AAAC,EAAE,MAAI,SAASA,IAAE;AAAC,MAAE,MAAK,KAAG,EAAEA,EAAC;AAAC,GAAE,EAAE,KAAG,SAASA,IAAEL,IAAE;AAAC,EAAAK,MAAGL,GAAE,OAAKA,GAAE,IAAI,QAAMK,GAAE,MAAIL,GAAE,IAAI,MAAK,KAAG,EAAEK,IAAEL,EAAC;AAAC,GAAE,EAAE,MAAI,SAASK,IAAE;AAAC,OAAG,EAAEA,EAAC,GAAE,IAAE;AAAE,MAAIG,MAAG,IAAEH,GAAE,KAAK;AAAI,EAAAG,OAAI,MAAI,KAAGA,GAAE,MAAI,CAAA,GAAG,EAAE,MAAI,CAAA,GAAGA,GAAE,GAAG,QAAQ,SAASH,IAAE;AAAC,IAAAA,GAAE,QAAMA,GAAE,KAAGA,GAAE,MAAKA,GAAE,MAAI,GAAEA,GAAE,MAAIA,GAAE,IAAE;AAAA,EAAM,CAAC,MAAIG,GAAE,IAAI,QAAQ,CAAC,GAAEA,GAAE,IAAI,QAAQ,CAAC,GAAEA,GAAE,MAAI,CAAA,GAAG,IAAE,KAAI,IAAE;AAAC,GAAE,EAAE,SAAO,SAASH,IAAE;AAAC,OAAG,EAAEA,EAAC;AAAE,MAAIL,KAAEK,GAAE;AAAI,EAAAL,MAAGA,GAAE,QAAMA,GAAE,IAAI,IAAI,WAAS,MAAI,EAAE,KAAKA,EAAC,KAAG,MAAI,EAAE,2BAAyB,IAAE,EAAE,0BAAwB,GAAG,CAAC,IAAGA,GAAE,IAAI,GAAG,QAAQ,SAASK,IAAE;AAAC,IAAAA,GAAE,MAAIA,GAAE,MAAIA,GAAE,IAAGA,GAAE,QAAM,MAAIA,GAAE,KAAGA,GAAE,MAAKA,GAAE,IAAE,QAAOA,GAAE,MAAI;AAAA,EAAC,CAAC,IAAG,IAAE,IAAE;AAAI,GAAE,EAAE,MAAI,SAASA,IAAEL,IAAE;AAAC,EAAAA,GAAE,KAAK,SAASK,IAAE;AAAC,QAAG;AAAC,MAAAA,GAAE,IAAI,QAAQ,CAAC,GAAEA,GAAE,MAAIA,GAAE,IAAI,OAAO,SAASA,IAAE;AAAC,eAAM,CAACA,GAAE,MAAI,EAAEA,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,SAAOD,IAAE;AAAC,MAAAJ,GAAE,KAAK,SAASK,IAAE;AAAC,QAAAA,GAAE,QAAMA,GAAE,MAAI;MAAG,CAAC,GAAEL,KAAE,CAAE,GAAC,EAAE,IAAII,IAAEC,GAAE,GAAG;AAAA,IAAC;AAAA,EAAC,CAAC,GAAE,KAAG,EAAEA,IAAEL,EAAC;AAAC,GAAE,EAAE,UAAQ,SAASK,IAAE;AAAC,OAAG,EAAEA,EAAC;AAAE,MAAIL,IAAEI,KAAEC,GAAE;AAAI,EAAAD,MAAGA,GAAE,QAAMA,GAAE,IAAI,GAAG,QAAQ,SAASC,IAAE;AAAC,QAAG;AAAC,QAAEA,EAAC;AAAA,IAAC,SAAOA,IAAE;AAAC,MAAAL,KAAEK;AAAA,IAAC;AAAA,EAAC,CAAC,GAAED,GAAE,MAAI,QAAOJ,MAAG,EAAE,IAAIA,IAAEI,GAAE,GAAG;AAAE;AAAE,IAAI,IAAE,cAAY,OAAO;AAAsB,SAAS,EAAEC,IAAE;AAAC,MAAIL,IAAEI,KAAE,WAAU;AAAC,iBAAaU,EAAC,GAAE,KAAG,qBAAqBd,EAAC,GAAE,WAAWK,EAAC;AAAA,EAAC,GAAES,KAAE,WAAWV,IAAE,GAAG;AAAE,QAAIJ,KAAE,sBAAsBI,EAAC;AAAE;AAAC,SAAS,EAAEC,IAAE;AAAC,MAAIL,KAAE,GAAEc,KAAET,GAAE;AAAI,gBAAY,OAAOS,OAAIT,GAAE,MAAI,QAAOS,GAAC,IAAI,IAAEd;AAAC;AAAC,SAAS,EAAEK,IAAE;AAAC,MAAIL,KAAE;AAAE,EAAAK,GAAE,MAAIA,GAAE,MAAK,IAAEL;AAAC;AAAC,SAAS,EAAEK,IAAEL,IAAE;AAAC,SAAM,CAACK,MAAGA,GAAE,WAASL,GAAE,UAAQA,GAAE,KAAK,SAASA,IAAEI,IAAE;AAAC,WAAOJ,OAAIK,GAAED,EAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAASkB,IAAEjB,IAAEL,IAAE;AAAC,SAAM,cAAY,OAAOA,KAAEA,GAAEK,EAAC,IAAEL;AAAC;ACQ37G,SAAA,+BAA+B,MAA6B,oBAAwC;AAC1G,QAAA,6CAA6B;AAExB,aAAA,gBAAgB,KAAK,SAAS;AAC1B,eAAA,iBAAiB,aAAa,MAAM;AACrC,YAAA,WAAW,cAAc,SAAS,SAAS;AACjD,YAAM,cAAc,uBAAuB,IAAI,QAAQ,KAAK,CAAA;AAChD,kBAAA,aAAa,WAAW,IAAI,cAAc;AAC/B,6BAAA,IAAI,UAAU,WAAW;AAAA,IACpD;AAAA,EACJ;AAEO,SAAA,CAAC,GAAG,uBAAuB,QAAS,CAAA,EACtC,IAAI,CAAC,CAAC,UAAU,WAAW,MAAM;AACvB,WAAA;AAAA,MACH;AAAA,MACA,GAAG,KAAK,QACH,IAAI,CAAC,iBAAiB;AACZ,eAAA;AAAA,UACH,CAAC,GAAG,aAAa,WAAW,aAAa,GAAG,YAAY,aAAa,WAAW,KAAK;AAAA,QAAA;AAAA,MACzF,CACH,EACA,OAAO,CAAC,KAAK,SAAS,EAAE,GAAG,KAAK,GAAG,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEzD,CAAA,EACA;AAAA,IAAO,CAAC,QACL,OAAO,OAAO,GAAG,EAAE;AAAA,MACf,CAAC,UACG,OAAO,UAAU,YAAY,SAAS,mBAAmB,OAAO,SAAS,mBAAmB;AAAA,IACpG;AAAA,EAAA;AAEZ;AChCO,MAAM,aAAa;AAAA,EACtB,OAAO;AAAA,IACH,UAAU;AAAA,EACd;AAAA,EACA,IAAI;AAAA,IACA,SAAS;AAAA,IACT,WAAW;AAAA,EACf;AAAA,EACA,IAAI;AAAA,IACA,WAAW;AAAA,IACX,SAAS;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACJ,UAAU;AAAA,EACd;AACJ;AAQO,MAAM,QAAQ,CAAC,EAAE,MAAM,SAAS,iBAA6B;AAC1D,QAAAuB,WAAUC,EAAO,IAAI;AAE3BC,IAAU,MAAM;AACR,QAAAF,SAAQ,YAAY,MAAM;AAC1B;AAAA,IACJ;AACM,UAAA,OAAO,IAAI,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACH,CAAA,EAAE,OAAOA,SAAQ,OAAO;AAEzB,WAAO,MAAM;AACT,WAAK,QAAQ;AAAA,IAAA;AAAA,EACjB,CACH;AAEM,SAAAG,oBAAC,OAAI,EAAA,KAAKH,SAAS,CAAA;AAC9B;AClDO,MAAM,+BAA+B;AAE/B,MAAA,gCAAgC,CAACb,IAAWiB,OAAc;AAC7D,QAAA,SAASjB,GAAE,MAAM,4BAA4B;AAC7C,QAAA,SAASiB,GAAE,MAAM,4BAA4B;AAEnD,MAAI,UAAU,QAAQ;AAClB,QAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG;AACzB,aAAO,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC;AAAA,IAC5C;AACA,QAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG;AAClB,aAAA,SAAS,OAAO,CAAC,GAAG,EAAE,IAAI,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,IAC3D;AACA,WAAO,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC;AAAA,EAC5C;AACA,QAAM,IAAI,MAAM,qCAAqCjB,EAAC,OAAOiB,EAAC,EAAE;AACpE;AChBa,MAAA,mBAAmB,CAAC,eAAuB;AACpD,SAAO,IAAI,aAAa,KAAK,QAAQ,CAAC,CAAC;AAC3C;ACaO,MAAM,0BAAkE,CAAC,EAAE,MAAM,yBAAyB;AAC7G,QAAM,aAAa,MAAM;AACd,WAAA;AAAA,MACH;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,UACF,SAAS,CAACjB,IAAWiB,OAAc;AACxB,mBAAA,8BAA8BjB,IAAGiB,EAAC;AAAA,UAC7C;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,SAAS,KAAK,QAAQ,IAAI,CAAC,iBAAiB;AACjC,iBAAA;AAAA,YACH,MAAM,aAAa;AAAA,YACnB,MAAM;AAAA,YACN,WAAW,CAAC,SAAiB,iBAAiB,IAAI;AAAA,UAAA;AAAA,QACtD,CACH;AAAA,MACL;AAAA,IAAA;AAAA,EACJ;AAGE,QAAA,YAAY,+BAA+B,MAAM,kBAAkB,EAAE,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC;AAEnG,SAAAD,oBAAC,SAAM,MAAM,WAAW,SAAS,cAAc,YAAY,KAAM,CAAA;AAC5E;ACnCA,MAAM,UAAU,CAAC,EAAE,oBAAkC;AAC3C,QAAA,YAAYF,EAA0B,IAAI;AAC1C,QAAA,WAAWA,EAAqB,IAAI;AAE1CC,IAAU,MAAM;AACR,QAAA,UAAU,YAAY,MAAM;AAC5B;AAAA,IACJ;AAEA,UAAM,MAAM,UAAU,QAAQ,WAAW,IAAI;AAC7C,QAAI,QAAQ,MAAM;AACd;AAAA,IACJ;AAEA,aAAS,UAAU,IAAI,MAAM,KAAK,aAAa;AAE/C,WAAO,MAAM;;AACT,qBAAS,YAAT,mBAAkB;AAAA,IAAQ;AAAA,EAC9B,GACD,CAAC,WAAW,aAAa,CAAC;AAEtB,SAAAC,oBAAC,UAAO,EAAA,KAAK,UAAW,CAAA;AACnC;ACnBA,MAAM,SAAS,GAAG,eAAe,uBAAuB,QAAQ;AAOzD,MAAM,yBAAyE,CAAC;AAAA,EACnF;AAAA,EACA;AACJ,MAAM;AACI,QAAA,SAASF,EAAuB,IAAI;AAC1C,QAAM,2BAA2B;AACjC,QAAM,CAAC,sBAAsB,uBAAuB,IAAII,EAAwB,IAAI;AAEpF,QAAM,OAAOC;AAAAA,IACT,MACI;AAAA,MACI,KAAK,QACA,IAAI,CAAC,kBAAkB;AAAA,QACpB,aAAa,aAAa;AAAA,QAC1B,MAAM,aAAa,KAAK;AAAA,UACpB,CAAC,kBACG,cAAc,cAAc,mBAAmB,OAC/C,cAAc,cAAc,mBAAmB;AAAA,QACvD;AAAA,MAAA,EACF,EACD,IAAI,CAAC,iBAAiB;AACZ,eAAA;AAAA,UACH,OAAO,aAAa;AAAA,UACpB,QAAQ,aAAa,KAAK,IAAI,CAAC,kBAAkB,cAAc,SAAS,UAAU;AAAA,QAAA;AAAA,MACtF,CACH;AAAA,IACT;AAAA,IACJ,CAAC,MAAM,kBAAkB;AAAA,EAAA;AAG7BJ,IAAU,MAAM;AACR,QAAA,OAAO,YAAY,MAAM;AACzB;AAAA,IACJ;AACA,QAAI,yBAAyB,MAAM;AAC/B,aAAO,QAAQ,YAAY;AAC3B;AAAA,IACJ;AAEA,UAAM,SAAS,KAAK,SAAS,CAAC,EAAE,KAAK,oBAAoB,EAAE;AAC3D,UAAM,QAAQ,KAAK,SAAS,CAAC,EAAE,KAAK,oBAAoB,EAAE;AACnD,WAAA,QAAS,YAAY,GAAG,KAAK,KAAK,OAAO,KAAK,IAAI,CAAC,MAAM;AAAA,EACjE,GAAA,CAAC,QAAQ,sBAAsB,IAAI,CAAC;AAEvC,QAAM,SAA6BI;AAAAA,IAC/B,OAAO;AAAA,MACH,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,QACL,QAAQ;AAAA,UACJ,GAAG;AAAA,YACC,OAAO;AAAA,cACH,OAAO;AAAA,cACP,MAAM;AAAA,gBACF,MAAM;AAAA,cACV;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,GAAG;AAAA,YACC,OAAO;AAAA,cACH,OAAO;AAAA,cACP,MAAM;AAAA,gBACF,MAAM;AAAA,cACV;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,QAAQ,CAAC,OAAO;AAAA,QAChB,QAAQC,IAAe,UAA2B;AAC1C,cAAA,SAAS,WAAW,GAAG;AACvB,oCAAwB,IAAI;AAAA,UAChC;AAAA,QACJ;AAAA,QACA,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,QAAQ;AAAA,UACJ,SAAS;AAAA,QACb;AAAA,QACA,SAAS;AAAA,UACL,QAAQ;AAAA,YACJ,SAAS;AAAA,UACb;AAAA,UACA,SAAS;AAAA,YACL,QAAQ,CAAC,EAAE,gBAAgB;AACvB,sCAAwB,SAAS;AAC1B,qBAAA;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA;AAAA,IAEJ,CAAC,IAAI;AAAA,EAAA;AAGL,MAAA,KAAK,QAAQ,SAAS,GAAG;AAClB,WAAAJ,oBAAC,SAAI,UAAgD,mDAAA,CAAA;AAAA,EAChE;AAEA,SAEQK,oBAAA,UAAA,EAAA,UAAA;AAAA,IAACL,oBAAA,SAAA,EAAQ,eAAe,OAAQ,CAAA;AAAA,IAC/BA,oBAAA,OAAA,EAAI,OAAM,kCAAiC,KAAK,QAAQ;AAAA,EAC7D,EAAA,CAAA;AAER;AC7GO,MAAM,oBACT;AAEG,MAAM,aAAiC;AAAA,EAG1C,YACa,SACA,kBACA,mBACA,UACX;AAJW,SAAA,UAAA;AACA,SAAA,mBAAA;AACA,SAAA,oBAAA;AACA,SAAA,WAAA;AAET,UAAM,gBAAgB,KAAK,UAAU,GAAG,KAAK,OAAO,MAAM;AAC1D,UAAM,yBAAyB,KAAK,mBAAmB,GAAG,KAAK,gBAAgB,KAAK;AACpF,UAAM,0BAA0B,KAAK,oBAAoB,GAAG,KAAK,iBAAiB,KAAK;AAClF,SAAA,OAAO,GAAG,aAAa,GAAG,sBAAsB,GAAG,KAAK,QAAQ,GAAG,uBAAuB;AAAA,EACnG;AAAA,EAEA,OAAO,OAA0B;AACzB,QAAA,EAAE,iBAAiB,eAAe;AAC3B,aAAA;AAAA,IACX;AACA,WACI,KAAK,YAAY,MAAM,WACvB,KAAK,qBAAqB,MAAM,oBAChC,KAAK,sBAAsB,MAAM,qBACjC,KAAK,aAAa,MAAM;AAAA,EAEhC;AAAA,EAEA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,OAAO,MAAM,aAA0C;AAC7C,UAAA,QAAQ,YAAY,MAAM,iBAAiB;AACjD,QAAI,UAAU,QAAQ,MAAM,WAAW,QAAW;AACvC,aAAA;AAAA,IACX;AACA,WAAO,IAAI;AAAA,MACP,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,SAAS,MAAM,OAAO,UAAU,EAAE;AAAA,IAAA;AAAA,EAE1C;AACJ;AAEO,MAAM,gBAAgB;AAEtB,MAAM,SAA6B;AAAA,EAGtC,YACa,SACA,kBACA,UACX;AAHW,SAAA,UAAA;AACA,SAAA,mBAAA;AACA,SAAA,WAAA;AAET,UAAM,gBAAgB,KAAK,UAAU,GAAG,KAAK,OAAO,MAAM;AAC1D,UAAM,yBAAyB,KAAK,mBAAmB,GAAG,KAAK,gBAAgB,KAAK;AACpF,SAAK,OAAO,GAAG,aAAa,GAAG,sBAAsB,GAAG,KAAK,QAAQ;AAAA,EACzE;AAAA,EAEA,OAAO,OAA0B;AACzB,QAAA,EAAE,iBAAiB,WAAW;AACvB,aAAA;AAAA,IACX;AAEI,WAAA,KAAK,YAAY,MAAM,WACvB,KAAK,qBAAqB,MAAM,oBAChC,KAAK,aAAa,MAAM;AAAA,EAEhC;AAAA,EAEA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,OAAO,MAAM,aAAsC;AACzC,UAAA,QAAQ,YAAY,MAAM,aAAa;AAC7C,QAAI,UAAU,QAAQ,MAAM,WAAW,QAAW;AACvC,aAAA;AAAA,IACX;AAEA,WAAO,IAAI,SAAS,MAAM,OAAO,SAAS,MAAM,OAAO,kBAAkB,SAAS,MAAM,OAAO,UAAU,EAAE,CAAC;AAAA,EAChH;AACJ;AAEO,MAAM,kBACT;AAEG,MAAM,UAA8B;AAAA,EAGvC,YACa,SACA,UACA,iBACX;AAHW,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,kBAAA;AAET,SAAK,OAAO,OAAO,KAAK,UAAU,GAAG,KAAK,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ,IAAI,KAAK,eAAe;AAAA,EACrG;AAAA,EAEA,OAAO,OAA0B;AACzB,QAAA,EAAE,iBAAiB,YAAY;AACxB,aAAA;AAAA,IACX;AAEI,WAAA,KAAK,YAAY,MAAM,WACvB,KAAK,oBAAoB,MAAM,mBAC/B,KAAK,aAAa,MAAM;AAAA,EAEhC;AAAA,EAEA,WAAW;AACP,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,OAAO,MAAM,aAAuC;AAC1C,UAAA,QAAQ,YAAY,MAAM,eAAe;AAC/C,QAAI,UAAU,QAAQ,MAAM,WAAW,QAAW;AACvC,aAAA;AAAA,IACX;AAEA,WAAO,IAAI,UAAU,MAAM,OAAO,SAAS,SAAS,MAAM,OAAO,UAAU,EAAE,GAAG,MAAM,OAAO,eAAe;AAAA,EAChH;AACJ;AAEO,MAAM,QAA2C;AAAA,EACpD,YAAY,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACpC,cAAc;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AC9JO,MAAM,sCAAuF;AAAA,EAChG,YACY,QACA,cACA,eACV;AAHU,SAAA,SAAA;AACA,SAAA,eAAA;AACA,SAAA,gBAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,OAAe,QAAqE;AAC/F,UAAM,YAAY,MAAM,KAAK,eAAe,OAAO,MAAM;AAEzD,UAAM,UAAyC,UAAU;AAAA,MACrD,CAAC,EAAE,OAAO,YAAY,cAAc,YAAY,UAAU,mBAAmB;AACzE,YAAI,eAAe,KAAK;AACb,iBAAA;AAAA,YACH,MAAM;AAAA,YACN,UAAU,IAAI,SAAS,gBAAgB,QAAW,cAAc,QAAQ;AAAA,YACxE;AAAA,YACA;AAAA,UAAA;AAAA,QAER;AACO,eAAA;AAAA,UACH,MAAM;AAAA,UACN,UAAU,IAAI,aAAa,gBAAgB,QAAW,cAAc,YAAY,QAAQ;AAAA,UACxF;AAAA,UACA;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAGJ,WAAO,EAAE,QAAQ;AAAA,EACrB;AAAA,EAEA,MAAc,eAAe,OAAe,QAAsB;AAC9D,UAAM,SAAS;AAAA,MACX,GAAG,KAAK;AAAA,MACR,eAAe,KAAK;AAAA,IAAA;AAGxB,WAAO,8BAA8B,OAAO,QAAQ,KAAK,cAAc,MAAM,EAAE;AAAA,MAC3E,CAAC,aAAa,SAAS;AAAA,IAAA;AAAA,EAE/B;AACJ;AC7CO,MAAM,aAAuC;AAAA,EAChD,YACY,OACA,WACV;AAFU,SAAA,QAAA;AACA,SAAA,YAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,OAAe,QAA2C;AACrE,UAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AACvD,WAAA;AAAA,MACH,SAAS,eAAe,QAAQ,KAAK,KAAK,SAAS;AAAA,IAAA;AAAA,EAE3D;AACJ;ACXO,SAAS,8BACZ,SACA,cACA,OACA,QACF;AACE,QAAM,YAAY,IAAI,sCAAsC,SAAS,cAAc,CAAC;AACpF,QAAM,WAAW,IAAI,aAAa,WAAW,CAAChB,IAAGiB,OAAM;AACnD,QAAIjB,GAAE,SAAS,YAAYiB,GAAE,SAAS,SAAS;AACnC,cAAAjB,GAAE,SAAS,WAAW,IAAI,cAAciB,GAAE,SAAS,WAAW,EAAE;AAAA,IAC5E;AACA,WAAOjB,GAAE,SAAS,WAAWiB,GAAE,SAAS;AAAA,EAAA,CAC3C;AACM,SAAA,SAAS,SAAS,OAAO,MAAM;AAC1C;ACPsB,eAAA,kBAClB,UACA,cACA,OACF;AACQ,QAAA,eAAe,MAAM,QAAQ;AAAA,IAC/B,SAAS,IAAI,OAAO,YAAY;AACrB,aAAA;AAAA,QACH,aAAa,QAAQ;AAAA,QACrB,OAAO,MAAM,8BAA8B,QAAQ,aAAa,cAAc,KAAK,GAAG;AAAA,MAAA;AAAA,IAC1F,CACH;AAAA,EAAA;AAEL,SAAO,EAAE,aAAa;AAC1B;AAEgB,SAAA,mBACZ,MACA,mBACA,wBACF;AACQ,QAAA,sBAAsB,CAAC,kBAA+C;AACpE,QAAA,cAAc,SAAS,YAAY,QAAW;AACvC,aAAA;AAAA,IACX;AACA,WAAO,kBAAkB;AAAA,MACrB,CAAC,qBACG,iBAAiB,YAAY,cAAc,SAAS,WAAW,iBAAiB;AAAA,IAAA;AAAA,EACxF;AAEE,QAAA,2BAA2B,CAAC,kBAA+C;AAC7E,WAAO,uBAAuB;AAAA,MAC1B,CAAC,0BACG,sBAAsB,WAAW,sBAAsB,SAAS,cAAc;AAAA,IAAA;AAAA,EACtF;AAGG,SAAA,KAAK,IAAI,CAAC,mBAAmB;AAAA,IAChC,aAAa,cAAc;AAAA,IAC3B,MAAM,cAAc,KAAK,OAAO,mBAAmB,EAAE,OAAO,wBAAwB;AAAA,EACtF,EAAA;AACN;AClDa,MAAA,kBAAkBK,gBAAc,EAAE;ACUxC,MAAM,mBAAmB,CAA4B;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAmC;AAC/B,SACKD,oBAAA,OAAA,EAAI,OAAO,YAAY,SAAS,IAC7B,UAAA;AAAA,IAAAL,oBAAC,SAAI,UAAU,GAAG,MAAK,UAAS,OAAM,0BACjC,UACL,MAAA,CAAA;AAAA,wBACC,MAAG,EAAA,UAAU,GAAG,OAAM,kEAClB,UAAM,MAAA,IAAI,CAAC,MAAM,UACbA,oBAAA,MAAA,EAAG,OAAM,8BACN,8BAAC,SACG,EAAA,UAAA;AAAA,MAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,MAAK;AAAA,UACL,IAAI,QAAQ,KAAK;AAAA,UACjB,SAAS,KAAK;AAAA,UACd,UAAU,MAAM;AACZ,kBAAM,WAAW,MAAM;AAAA,cAAI,CAACO,OAAMzB,OAC9BA,OAAM,QAAQ,EAAE,GAAGyB,OAAM,SAAS,CAACA,MAAK,QAAYA,IAAAA;AAAAA,YAAA;AAExD,qBAAS,QAAQ;AAAA,UACrB;AAAA,QAAA;AAAA,MACJ;AAAA,MACC,KAAK;AAAA,IAAA,EAAA,CACV,EAdwC,GAAA,KAAK,KAejD,CACH,EACL,CAAA;AAAA,EACJ,EAAA,CAAA;AAER;ACzCa,MAAA,yBAAyBD,gBAA+B,EAAE,qBAAqB,CAAA,GAAI,OAAO,CAAA,GAAI;ACc3G,MAAM,0BAA0B,CAAC,mBAAuC,WAAmB;AACvF,QAAM,sBAAsB,kBACvB,OAAO,CAAC,YAAY,QAAQ,OAAO,EACnC,IAAI,CAAC,YAAY,QAAQ,OAAO;AAEjC,MAAA,oBAAoB,WAAW,GAAG;AAClC,WAAO,GAAG,MAAM;AAAA,EACpB;AACI,MAAA,kBAAkB,WAAW,oBAAoB,QAAQ;AACzD,WAAO,GAAG,MAAM;AAAA,EACpB;AACO,SAAA,SAAS,oBAAoB,KAAK,IAAI;AACjD;AAEO,MAAM,kBAA2D,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACE,MAAA,kBAAkB,UAAU,GAAG;AACxB,WAAA;AAAA,EACX;AAGI,SAAAN;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO,wBAAwB,mBAAmB,UAAU,YAAY;AAAA,MACxE,UAAU,CAAC,UAAU,qBAAqB,KAAK;AAAA,IAAA;AAAA,EAAA;AAG3D;AAEO,SAAS,qBAAqB,cAA4B;AACvD,QAAA,kBAAkBQ,EAAW,sBAAsB;AAEzD,QAAM,oBAAoB,gBAAgB,iBAAiB,YAAY,EAAE,IAAI,CAAC,aAAa;AAAA,IACvF;AAAA,IACA,OAAO;AAAA,IACP,SAAS;AAAA,EACX,EAAA;AAEF,SAAON,EAA6B,iBAAiB;AACzD;ACpDO,MAAM,oBAA+D,CAAC;AAAA,EACzE,QAAQ;AAAA,EACR,WAAW;AAAA,EACX;AAAA,EACA;AACJ,MAAM;AACF,QAAM,WAAW,MAAM;AACnB,UAAM,UAAU;AACV,UAAA,OAAO,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,WAAA,CAAY;AAC/C,UAAA,MAAM,IAAI,gBAAgB,IAAI;AAC9B,UAAAlB,KAAI,SAAS,cAAc,GAAG;AACpC,IAAAA,GAAE,OAAO;AACT,IAAAA,GAAE,WAAW;AACb,IAAAA,GAAE,MAAM;AACR,QAAI,gBAAgB,GAAG;AAAA,EAAA;AAG3B,QAAM,qBAAqB,MAAM;AAC7B,UAAM,OAAO;AACP,UAAA,OAAO,YAAY,IAAI;AAC7B,UAAM,SAAS,GAAG,KAAK,KAAK,GAAG,CAAC;AAAA;AAChC,UAAM,OAAO,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI;AAC/E,WAAO,SAAS;AAAA,EAAA;AAGd,QAAA,cAAc,CAAC,SAA6D;AAC9E,UAAM,UAAU,KACX,IAAI,CAAC,QAAQ,OAAO,KAAK,GAAG,CAAC,EAC7B,OAAO,CAAC,iBAAiB,SAAS;AAC/B,WAAK,QAAQ,CAAC,QAAQ,gBAAgB,IAAI,GAAG,CAAC;AACvC,aAAA;AAAA,IAAA,GACJ,oBAAA,IAAA,CAAa;AAEjB,WAAA,CAAC,GAAG,OAAO;AAAA,EAAA;AAGtB,SACKgB,oBAAA,UAAA,EAAO,WAAsB,SAAS,UAClC,UACL,MAAA,CAAA;AAER;AChDO,MAAM,eAAoD,CAAC,EAAE,YAAY;AAC5E,6BAAQ,OAAI,EAAA,UAAA;AAAA,IAAA;AAAA,IAAQ,MAAM;AAAA,EAAQ,EAAA,CAAA;AACtC;ACEA,MAAM,WAA6C,CAAC,EAAE,SAAS,eAAe;AAC1E,SAEQK,oBAAA,UAAA,EAAA,UAAA;AAAA,IAAAL,oBAAC,QAAI,UAAQ,QAAA,CAAA;AAAA,IACZ;AAAA,EACL,EAAA,CAAA;AAER;ACNA,MAAM,OAAqC,CAAC,EAAE,SAAS,gBAAgB;AACnE,SACKA,oBAAA,OAAA,EAAI,OAAO,GAAG,SAAS,YAAY,YAAU,SAC1C,UAACA,oBAAA,UAAA,EAAO,OAAM,cAAa,eAAC,EAChC,CAAA;AAER;ACXO,MAAM,iBAAoC,MAAM;AAC5C,SAAAA,oBAAC,SAAI,UAAU,aAAA,CAAA;AAC1B;ACUO,MAAM,uBAAqE,CAAC;AAAA,EAC/E;AAAA,EACA;AACJ,MAAM;AACF,QAAM,gBAAgB,uBAAuB,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK;AAC9F,QAAA,6BAA6B,UAAU,cAAc,SAAS,IAAI,cAAc,KAAK,IAAI,IAAI,MAAM;AAGrG,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU,CAAC,UAAU,0BAA0B,KAAK;AAAA,IAAA;AAAA,EAAA;AAGhE;AC3BO,MAAM,gBAAmC,MAAM;AAC3C,SAAAA,oBAAC,SAAI,UAAkB,qBAAA,CAAA;AAClC;ACWO,MAAM,oBAAiE,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACX,MAAM;AACF,QAAM,cAAc;AACpB,QAAM,aAAa;AAEnB,QAAM,CAAC,UAAU,WAAW,IAAIE,EAAS,CAAC;AAEpC,QAAA,cAAc,CAAC,UAAyC;AAC1D,UAAM,QAAQ,MAAM;AACd,UAAA,WAAW,OAAO,MAAM,KAAK;AAEnC,QAAI,WAAW,KAAK;AAChB,aAAO,QAAQ;AACf,aAAO,QAAQ;AAAA,IAAA,OACZ;AACH,aAAO,QAAQ;AAAA,IACnB;AAAA,EAAA;AAGE,QAAA,cAAc,CAAC,UAAyC;AAC1D,UAAM,QAAQ,MAAM;AACd,UAAA,WAAW,OAAO,MAAM,KAAK;AAEnC,QAAI,YAAY,GAAG;AACf,kBAAY,CAAC;AAAA,IAAA,OACV;AACH,kBAAY,CAAC;AAAA,IACjB;AAEA,QAAI,WAAW,KAAK;AAChB,aAAO,QAAQ;AACf,aAAO,QAAQ;AAAA,IAAA,OACZ;AACH,aAAO,QAAQ;AAAA,IACnB;AAAA,EAAA;AAGJ,QAAM,aAAa;AAAA;AAAA;AAAA,cAGT,WAAW;AAAA,cACX,WAAW,IAAI,GAAG;AAAA,cAClB,UAAU,IAAI,GAAG;AAAA,cACjB,UAAU,IAAI,GAAG;AAAA,cACjB,WAAW,IAAI,GAAG;AAAA,cAClB,WAAW;AAAA;AAIjB,SAAAG,oBAAC,OAAI,EAAA,OAAM,iBACP,UAAA;AAAA,IAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,MAAK;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,OAAO,EAAE,YAAY,QAAQ,GAAG,QAAQ,EAAE;AAAA,MAAA;AAAA,IAC9C;AAAA,IACAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,IAAG;AAAA,QACH,MAAK;AAAA,QACL,OAAO;AAAA,QACP,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA,SAAS;AAAA,QACT,OAAO,EAAE,YAAY,QAAQ,SAAS;AAAA,MAAA;AAAA,IAC1C;AAAA,EACJ,EAAA,CAAA;AAER;ACrFA,MAAM,oBAAoB,CAAC,eAAuB;AACvC,SAAA,cAAc,OAAO,cAAc;AAC9C;AAEO,MAAM,eAAqD,CAAC,EAAE,YAAY,oBAAoB;AACjG,QAAM,CAAC,oBAAoB,qBAAqB,IAAIE,EAAS,UAAU;AAEvEH,IAAU,MAAM;AACZ,0BAAsB,UAAU;AAAA,EAAA,GACjC,CAAC,UAAU,CAAC;AAET,QAAA,oBAAoB,CAAC,UAAyC;AAChE,UAAM,QAAQ,MAAM;AACd,UAAA,QAAQ,OAAO,MAAM,KAAK;AAE1B,UAAA,UAAU,kBAAkB,KAAK;AAEvC,QAAI,SAAS;AACT,oBAAc,KAAK;AAAA,IACvB;AACA,0BAAsB,KAAK;AAAA,EAAA;AAGzB,QAAA,UAAU,CAAC,kBAAkB,kBAAkB;AACrD,6BACK,SAAM,EAAA,WAAW,qDAAqD,UAAU,gBAAgB,EAAE,IAC/F,UAAA;AAAA,IAAAC;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,MAAM;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAK;AAAA,QACL,WAAW;AAAA,MAAA;AAAA,IACf;AAAA,IAAE;AAAA,EAEN,EAAA,CAAA;AAER;ACnCO,MAAM,qBAAiE,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,QAAM,EAAE,KAAK,eAAe,KAAK,kBAAkB;AAE/C,SAAAK,oBAAC,OAAI,EAAA,OAAM,2BACP,UAAA;AAAA,IAACA,oBAAA,OAAA,EAAI,OAAM,sBACP,UAAA;AAAA,MAAAL;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,YAAY,gBAAgB;AAAA,UAC5B,eAAe,CAAC,eAAe,iBAAiB,aAAa,GAAG;AAAA,QAAA;AAAA,MACpE;AAAA,MACCA,oBAAA,OAAA,EAAI,OAAM,OAAM,UAAC,KAAA;AAAA,MAClBA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,YAAY,gBAAgB;AAAA,UAC5B,eAAe,CAAC,eAAe,iBAAiB,aAAa,GAAG;AAAA,QAAA;AAAA,MACpE;AAAA,IAAA,GACJ;AAAA,IACAA,oBAAC,OAAI,EAAA,OAAM,QACP,UAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAK,gBAAgB;AAAA,QACrB,KAAK,gBAAgB;AAAA,QACrB,QAAQ,CAAC,eAAe,iBAAiB,aAAa,GAAG;AAAA,QACzD,QAAQ,CAAC,eAAe,iBAAiB,aAAa,GAAG;AAAA,MAAA;AAAA,IAAA,GAEjE;AAAA,EACJ,EAAA,CAAA;AAER;AClCO,MAAM,6BAAiF,CAAC;AAAA,EAC3F;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AACpB,MAAM;AACF,QAAM,QAAQ,IAAI,mBAAmB,MAAM,KAAK,QAAQ,CAAC,CAAC,QAAQ,mBAAmB,MAAM,KAAK,QAAQ,CAAC,CAAC;AAGtG,SAAAK,oBAAC,SAAI,OAAO,YAAY,kBAAkB,SAAS,iBAAiB,EAAE,IAClE,UAAA;AAAA,IAAAA,oBAAC,SAAI,UAAU,GAAG,MAAK,UAAS,OAAM,gCAA+B,UAAA;AAAA,MAAA;AAAA,MACrD;AAAA,IAAA,GAChB;AAAA,IACAL,oBAAC,QAAG,UAAU,GAAG,OAAM,uEACnB,UAAAA,oBAAC,OAAI,EAAA,OAAM,aACP,UAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,OAER,EACJ,CAAA;AAAA,EACJ,EAAA,CAAA;AAER;AClBA,MAAM,OAA8C,CAAC,EAAE,MAAM,cAAc;AACjE,QAAA,CAAC,WAAW,YAAY,IAAIE,EAAS,KAAK,CAAC,EAAE,KAAK;AAElD,QAAA,WAAW,KAAK,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,KAAK,IAAI;AAEvD,QAAM,cAAc,KAAK,IAAI,CAAC,QAAQ;AAClC,+BACK,UACG,EAAA,UAAA;AAAA,MAAAF;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,MAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAK;AAAA,UACL,WAAU;AAAA,UACV,cAAY,IAAI;AAAA,UAChB,SAAS,cAAc,IAAI;AAAA,UAC3B,UAAU,MAAM,aAAa,IAAI,KAAK;AAAA,QAAA;AAAA,MAC1C;AAAA,0BACC,OAAI,EAAA,MAAK,YAAW,WAAU,2DAC1B,cAAI,SACT;AAAA,IAAA,KAZW,IAAI,KAanB;AAAA,EAAA,CAEP;AAED,QAAM,iBAAiB,OAAO,YAAY,aAAa,QAAQ,SAAS,IAAI;AAE5E,SACKK,oBAAA,OAAA,EAAI,MAAK,WAAU,WAAU,oBACzB,UAAA;AAAA,IAAA;AAAA,IACA,WAAWL,oBAAC,OAAI,EAAA,WAAU,kBAAkB,UAAe,gBAAA;AAAA,EAChE,EAAA,CAAA;AAER;AC5CO,SAAS,SAAe,mBAAwC,eAA0B,IAAI;AACjG,QAAM,CAAC,MAAM,OAAO,IAAIE,EAAsB,IAAI;AAClD,QAAM,CAAC,OAAO,QAAQ,IAAIA,EAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAIA,EAAS,IAAI;AAE/CH,IAAU,MAAM;AACZ,UAAM,YAAY,YAAY;AAC1B,mBAAa,IAAI;AACb,UAAA;AACM,cAAA,SAAS,MAAM;AACrB,gBAAQ,MAAM;AACd,iBAAS,IAAI;AAAA,eACRU,QAAO;AACZ,iBAASA,MAAc;AAAA,MAAA,UACzB;AACE,qBAAa,KAAK;AAAA,MACtB;AAAA,IAAA;AAGM;KAEX,CAAC,KAAK,UAAU,YAAY,CAAC,CAAC;AAE1B,SAAA,EAAE,MAAM,OAAO;AAC1B;ACSO,MAAM,qBAAiE,CAAC,EAAE,UAAU,cAAc,YAAY;AAC3G,QAAA,QAAQD,EAAW,eAAe;AAExC,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,SAAS,YAAY;AAC7C,WAAA,kBAAkB,UAAU,cAAc,KAAK;AAAA,EACvD,GAAA,CAAC,UAAU,cAAc,KAAK,CAAC;AAElC,QAAM,WAAW;AAEjB,MAAI,WAAW;AACX,+BACK,UAAS,EAAA,SAAS,UACf,UAAAR,oBAAC,kBAAe,EACpB,CAAA;AAAA,EAER;AAEA,MAAI,UAAU,MAAM;AAChB,+BACK,UAAS,EAAA,SAAS,UACf,UAACA,oBAAA,cAAA,EAAa,MAAc,CAAA,EAChC,CAAA;AAAA,EAER;AAEA,MAAI,SAAS,MAAM;AACf,+BACK,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,EACnB,CAAA;AAAA,EAER;AAGI,SAAAA,oBAAC,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,wBAAuB,EAAA,MAAM,KAAK,cAAc,cAA4B,MAAA,CAAc,EAC/F,CAAA;AAER;AAQA,MAAM,yBAAyE,CAAC,EAAE,MAAM,OAAO,mBAAmB;AACxG,QAAA,CAAC,oBAAoB,qBAAqB,IAAIE,EAAS,EAAE,KAAK,KAAK,KAAK,EAAA,CAAG;AACjF,QAAM,CAAC,wBAAwB,yBAAyB,IAAIA,EAAkC;AAAA,IAC1F,EAAE,OAAO,iBAAiB,SAAS,MAAM,MAAM,eAAe;AAAA,IAC9D,EAAE,OAAO,aAAa,SAAS,MAAM,MAAM,WAAW;AAAA,EAAA,CACzD;AACD,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,qBAAqB,YAAY;AAEnF,QAAM,eAAeC;AAAAA,IACjB,MAAM,mBAAmB,MAAM,mBAAmB,sBAAsB;AAAA,IACxE,CAAC,MAAM,mBAAmB,sBAAsB;AAAA,EAAA;AAG9C,QAAA,SAAS,CAAC,SAAe;AAC3B,YAAQ,MAAM;AAAA,MACV,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIH;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,MAAM,EAAE,SAAS,aAAa;AAAA,cAC9B;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAGZ,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,MAAM,EAAE,SAAS,aAAa;AAAA,cAC9B;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,IAGhB;AAAA,EAAA;AAGJ,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAGzC,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,SACIA;AAAAA,QAACU;AAAAA,QAAA;AAAA,UACG;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACJ;AAAA,IAAA;AAAA,EAAA;AAIhB;AAYA,MAAMA,YAA2C,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AAEE,SAAAL,oBAAC,OAAI,EAAA,OAAM,iBACP,UAAA;AAAA,IAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,kBAAkB,CAAC,QAAQ,sBAAsB,CAAC,UAAU,EAAE,GAAG,MAAM,IAAA,EAAM;AAAA,QAC7E,kBAAkB,CAAC,QAAQ,sBAAsB,CAAC,UAAU,EAAE,GAAG,MAAM,IAAA,EAAM;AAAA,MAAA;AAAA,IACjF;AAAA,IACAA,oBAAC,iBAAgB,EAAA,mBAAsC,qBAA4C,CAAA;AAAA,IACnGA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,MAAA;AAAA,IACJ;AAAA,IACAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS,MAAM,+BAA+B,EAAE,SAAS,aAAA,GAAgB,kBAAkB;AAAA,QAC3F,UAAS;AAAA,MAAA;AAAA,IACb;AAAA,IACCA,oBAAA,MAAA,EAAK,WAAU,QAAO,SAAQ,gCAA+B;AAAA,EAClE,EAAA,CAAA;AAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[0,1,2,3,10,11,64,65,66,67,68,69]}
|
|
1
|
+
{"version":3,"file":"dashboard-components.js","sources":["../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../src/web-components/lapis-context.ts","../src/web-components/reference-genome-context.ts","../src/lapisApi/ReferenceGenome.ts","../src/lapisApi/lapisTypes.ts","../src/lapisApi/lapisApi.ts","../src/web-components/app.ts","../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../node_modules/preact/hooks/dist/hooks.module.js","../src/preact/mutationComparison/getMutationComparisonTableData.ts","../src/preact/components/table.tsx","../src/preact/shared/sort/sortSubstitutionsAndDeletions.ts","../src/preact/shared/table/formatProportion.ts","../src/preact/mutationComparison/mutation-comparison-table.tsx","../src/preact/components/chart.tsx","../src/preact/mutationComparison/mutation-comparison-venn.tsx","../src/utils/mutations.ts","../src/operator/FetchSubstitutionsOrDeletionsOperator.ts","../src/operator/SortOperator.ts","../src/query/querySubstitutionsOrDeletions.ts","../src/preact/mutationComparison/queryMutationData.ts","../src/preact/LapisUrlContext.ts","../src/preact/components/checkbox-selector.tsx","../src/preact/ReferenceGenomeContext.ts","../src/preact/components/SegmentSelector.tsx","../src/preact/components/csv-download-button.tsx","../src/preact/components/error-display.tsx","../src/preact/components/headline.tsx","../src/preact/components/info.tsx","../src/preact/components/loading-display.tsx","../src/preact/components/mutation-type-selector.tsx","../src/preact/components/no-data-display.tsx","../src/preact/components/min-max-range-slider.tsx","../src/preact/components/percent-intput.tsx","../src/preact/components/proportion-selector.tsx","../src/preact/components/proportion-selector-dropdown.tsx","../src/preact/components/tabs.tsx","../src/preact/useQuery.ts","../src/preact/mutationComparison/mutation-comparison.tsx","../src/web-components/PreactLitAdapter.tsx","../src/web-components/PreactLitAdapterWithGridJsStyles.tsx","../src/web-components/display/mutation-comparison-component.tsx","../src/preact/mutations/getInsertionsTableData.ts","../src/preact/mutations/getMutationsTableData.ts","../src/preact/shared/sort/sortMutationPositions.ts","../src/preact/mutations/getMutationsGridData.ts","../src/preact/mutations/mutations-grid.tsx","../src/preact/shared/sort/sortInsertions.ts","../src/preact/mutations/mutations-insertions-table.tsx","../src/preact/mutations/mutations-table.tsx","../src/operator/FetchInsertionsOperator.ts","../src/query/queryInsertions.ts","../src/preact/mutations/queryMutations.ts","../src/preact/mutations/mutations.tsx","../src/web-components/display/mutations-component.tsx","../src/preact/prevalenceOverTime/getPrevalenceOverTimeTableData.ts","../src/preact/shared/charts/LogitScale.ts","../src/preact/shared/charts/colors.ts","../src/preact/shared/charts/confideceInterval.ts","../src/preact/shared/charts/getYAxisScale.ts","../src/preact/prevalenceOverTime/prevalence-over-time-bar-chart.tsx","../node_modules/dayjs/esm/constant.js","../node_modules/dayjs/esm/locale/en.js","../node_modules/dayjs/esm/utils.js","../node_modules/dayjs/esm/index.js","../node_modules/dayjs/esm/plugin/advancedFormat/index.js","../node_modules/dayjs/esm/plugin/isoWeek/index.js","../src/utils/temporal.ts","../src/utils/utils.ts","../src/preact/prevalenceOverTime/prevalence-over-time-bubble-chart.tsx","../src/preact/prevalenceOverTime/prevalence-over-time-line-chart.tsx","../src/preact/prevalenceOverTime/prevalence-over-time-table.tsx","../src/operator/DivisionOperator.ts","../src/operator/FetchAggregatedOperator.ts","../src/operator/FillMissingOperator.ts","../src/operator/GroupByOperator.ts","../src/operator/GroupByAndSumOperator.ts","../src/operator/MapOperator.ts","../src/operator/SlidingOperator.ts","../src/query/queryPrevalenceOverTime.ts","../src/preact/components/select.tsx","../src/preact/components/confidence-interval-selector.tsx","../src/preact/components/scaling-selector.tsx","../src/preact/prevalenceOverTime/prevalence-over-time.tsx","../src/web-components/display/prevalence-over-time-component.tsx","../src/preact/relativeGrowthAdvantage/relative-growth-advantage-chart.tsx","../src/query/queryRelativeGrowthAdvantage.ts","../src/preact/relativeGrowthAdvantage/relative-growth-advantage.tsx","../src/web-components/display/relative-growth-advantage-component.tsx","../src/preact/aggregatedData/aggregate-table.tsx","../src/query/queryAggregateData.ts","../src/preact/aggregatedData/aggregate.tsx","../src/web-components/display/aggregate-component.tsx","../src/preact/dateRangeSelector/dateConversion.ts","../src/preact/dateRangeSelector/date-range-selector.tsx","../src/web-components/input/date-range-selector-component.tsx","../src/preact/locationFilter/fetchAutocompletionList.ts","../src/preact/locationFilter/location-filter.tsx","../src/web-components/input/location-filter-component.tsx","../src/preact/textInput/fetchAutocompleteList.ts","../src/preact/textInput/text-input.tsx","../src/web-components/input/text-input-component.tsx","../src/preact/mutationFilter/sequenceTypeFromSegment.ts","../src/preact/mutationFilter/parseAndValidateMutation.ts","../src/preact/shared/icons/DeleteIcon.tsx","../src/preact/mutationFilter/mutation-filter.tsx","../src/web-components/input/mutation-filter-component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:r,getOwnPropertyNames:h,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),y={attribute:!0,type:String,converter:u,reflect:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e(this.prototype,t,r)}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...h(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$EC(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f)(this[t],s))return;this.P(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.P(s,this[s],i)}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EU()}catch(s){throw t=!1,this._$EU(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EC(t,this[t]))),this._$EU()}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:\"open\"},b[d(\"elementProperties\")]=new Map,b[d(\"finalized\")]=new Map,p?.({ReactiveElement:b}),(a.reactiveElementVersions??=[]).push(\"2.0.4\");export{b as ReactiveElement,u as defaultConverter,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.P(o,void 0,t),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,r?{...t,wrapped:!0}:t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import { createContext } from '@lit/context';\n\nexport const lapisContext = createContext<string>('lapis-context');\n","import { createContext } from '@lit/context';\n\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\n\nexport const referenceGenomeContext = createContext<ReferenceGenome>('reference-genome-context');\n","import z from 'zod';\n\nimport type { SequenceType } from '../types';\n\nexport const referenceGenomeResponse = z.object({\n nucleotideSequences: z.array(\n z.object({\n name: z.string(),\n sequence: z.string(),\n }),\n ),\n genes: z.array(\n z.object({\n name: z.string(),\n sequence: z.string(),\n }),\n ),\n});\nexport type ReferenceGenome = z.infer<typeof referenceGenomeResponse>;\n\nexport const getSegmentNames = (referenceGenome: ReferenceGenome, sequenceType: SequenceType) => {\n switch (sequenceType) {\n case 'nucleotide': {\n return referenceGenome.nucleotideSequences.map((sequence) => sequence.name);\n }\n case 'amino acid': {\n return referenceGenome.genes.map((gene) => gene.name);\n }\n }\n};\n","import z, { type ZodTypeAny } from 'zod';\n\nexport const orderByType = z.enum(['ascending', 'descending']);\n\nexport const orderBy = z.object({\n field: z.string(),\n type: orderByType,\n});\n\nexport const lapisBaseRequest = z\n .object({\n limit: z.number().optional(),\n offset: z.number().optional(),\n fields: z.array(z.string()).optional(),\n orderBy: z.array(orderBy).optional(),\n })\n .catchall(z.union([z.boolean(), z.undefined(), z.string(), z.number(), z.null(), z.array(z.string())]));\nexport type LapisBaseRequest = z.infer<typeof lapisBaseRequest>;\n\nexport const mutationsRequest = lapisBaseRequest.extend({ minProportion: z.number().optional() });\nexport type MutationsRequest = z.infer<typeof mutationsRequest>;\n\nconst mutationProportionCount = z.object({\n mutation: z.string(),\n proportion: z.number(),\n count: z.number(),\n sequenceName: z.union([z.string(), z.null()]),\n mutationFrom: z.string(),\n mutationTo: z.string(),\n position: z.number(),\n});\nexport const mutationsResponse = makeLapisResponse(z.array(mutationProportionCount));\n\nconst insertionCount = z.object({\n insertion: z.string(),\n count: z.number(),\n insertedSymbols: z.string(),\n position: z.number(),\n sequenceName: z.union([z.string(), z.null()]),\n});\nexport const insertionsResponse = makeLapisResponse(z.array(insertionCount));\n\nexport const aggregatedItem = z.object({ count: z.number() }).catchall(z.union([z.string(), z.number(), z.null()]));\nexport const aggregatedResponse = makeLapisResponse(z.array(aggregatedItem));\nexport type AggregatedItem = z.infer<typeof aggregatedItem>;\n\nfunction makeLapisResponse<T extends ZodTypeAny>(data: T) {\n return z.object({\n data,\n });\n}\n","import { referenceGenomeResponse } from './ReferenceGenome';\nimport {\n aggregatedResponse,\n insertionsResponse,\n type LapisBaseRequest,\n type MutationsRequest,\n mutationsResponse,\n} from './lapisTypes';\nimport { type SequenceType } from '../types';\n\nexport async function fetchAggregated(lapisUrl: string, body: LapisBaseRequest, signal?: AbortSignal) {\n const response = await fetch(aggregatedEndpoint(lapisUrl), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return aggregatedResponse.parse(await response.json());\n}\n\nexport async function fetchInsertions(\n lapisUrl: string,\n body: LapisBaseRequest,\n sequenceType: SequenceType,\n signal?: AbortSignal,\n) {\n const response = await fetch(insertionsEndpoint(lapisUrl, sequenceType), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return insertionsResponse.parse(await response.json());\n}\n\nexport async function fetchSubstitutionsOrDeletions(\n lapisUrl: string,\n body: MutationsRequest,\n sequenceType: SequenceType,\n signal?: AbortSignal,\n) {\n const response = await fetch(substitutionsOrDeletionsEndpoint(lapisUrl, sequenceType), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal,\n });\n\n await handleErrors(response);\n\n return mutationsResponse.parse(await response.json());\n}\n\nexport async function fetchReferenceGenome(lapisUrl: string, signal?: AbortSignal) {\n const response = await fetch(referenceGenomeEndpoint(lapisUrl), {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n signal,\n });\n\n await handleErrors(response);\n return referenceGenomeResponse.parse(await response.json());\n}\n\nconst handleErrors = async (response: Response) => {\n if (!response.ok) {\n if (response.status >= 400 && response.status < 500) {\n throw new Error(`${response.statusText}: ${JSON.stringify(await response.json())}`);\n }\n throw new Error(`${response.statusText}: ${response.status}`);\n }\n};\n\nexport const aggregatedEndpoint = (lapisUrl: string) => `${lapisUrl}/sample/aggregated`;\nexport const insertionsEndpoint = (lapisUrl: string, sequenceType: SequenceType) => {\n return sequenceType === 'amino acid'\n ? `${lapisUrl}/sample/aminoAcidInsertions`\n : `${lapisUrl}/sample/nucleotideInsertions`;\n};\nexport const substitutionsOrDeletionsEndpoint = (lapisUrl: string, sequenceType: SequenceType) => {\n return sequenceType === 'amino acid'\n ? `${lapisUrl}/sample/aminoAcidMutations`\n : `${lapisUrl}/sample/nucleotideMutations`;\n};\nexport const referenceGenomeEndpoint = (lapisUrl: string) => `${lapisUrl}/sample/referenceGenome`;\n","import { provide } from '@lit/context';\nimport { Task } from '@lit/task';\nimport { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { lapisContext } from './lapis-context';\nimport { referenceGenomeContext } from './reference-genome-context';\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\nimport { fetchReferenceGenome } from '../lapisApi/lapisApi';\n\n@customElement('gs-app')\nexport class App extends LitElement {\n @provide({ context: lapisContext })\n @property()\n lapis: string = '';\n\n @provide({ context: referenceGenomeContext })\n referenceGenome: ReferenceGenome = {\n nucleotideSequences: [],\n genes: [],\n };\n\n private updateReferenceGenome = new Task(this, {\n task: async () => {\n this.referenceGenome = await fetchReferenceGenome(this.lapis);\n },\n args: () => [this.lapis],\n });\n\n override render() {\n return this.updateReferenceGenome.render({\n complete: () => {\n return html` <slot></slot>`;\n },\n error: () => html`<p>Error</p>`, // TODO(#143): Add more advanced error handling\n pending: () => {\n return html`<p>Loading...</p>`;\n },\n });\n }\n\n override createRenderRoot() {\n return this;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-app': App;\n }\n}\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n<r.length;n++){switch(r.charCodeAt(n)){case 34:f=\""\";break;case 38:f=\"&\";break;case 60:f=\"<\";break;default:continue}n!==e&&(o+=r.slice(e,n)),o+=f,e=n+1}return n!==e&&(o+=r.slice(e,n)),o}var o=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,f=0,i=Array.isArray;function u(e,t,n,o,i,u){var a,c,p={};for(c in t)\"ref\"==c?a=t[c]:p[c]=t[c];var l={type:e,props:p,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:--f,__i:-1,__u:0,__source:i,__self:u};if(\"function\"==typeof e&&(a=e.defaultProps))for(c in a)void 0===p[c]&&(p[c]=a[c]);return r.vnode&&r.vnode(l),l}function a(r){var t=u(e,{tpl:r,exprs:[].slice.call(arguments,1)});return t.key=t.__v,t}var c={},p=/[A-Z]/g;function l(e,t){if(r.attr){var f=r.attr(e,t);if(\"string\"==typeof f)return f}if(\"ref\"===e||\"key\"===e)return\"\";if(\"style\"===e&&\"object\"==typeof t){var i=\"\";for(var u in t){var a=t[u];if(null!=a&&\"\"!==a){var l=\"-\"==u[0]?u:c[u]||(c[u]=u.replace(p,\"-$&\").toLowerCase()),_=\";\";\"number\"!=typeof a||l.startsWith(\"--\")||o.test(l)||(_=\"px;\"),i=i+l+\":\"+a+_}}return e+'=\"'+i+'\"'}return null==t||!1===t||\"function\"==typeof t||\"object\"==typeof t?\"\":!0===t?e:e+'=\"'+n(t)+'\"'}function _(r){if(null==r||\"boolean\"==typeof r||\"function\"==typeof r)return null;if(\"object\"==typeof r){if(void 0===r.constructor)return r;if(i(r)){for(var e=0;e<r.length;e++)r[e]=_(r[e]);return r}}return n(\"\"+r)}export{u as jsx,l as jsxAttr,u as jsxDEV,_ as jsxEscape,a as jsxTemplate,u as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n,a=e.__b,v=e.__r,l=e.diffed,m=e.__c,s=e.unmount,d=e.__;function h(n,t){e.__h&&e.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({__V:c}),u.__[n]}function p(n){return o=1,y(D,n)}function y(n,u,i){var o=h(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function _(n,u){var i=h(t++,3);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__H.__h.push(i))}function A(n,u){var i=h(t++,4);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__h.push(i))}function F(n){return o=5,q(function(){return{current:n}},[])}function T(n,t,r){o=6,A(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function q(n,r){var u=h(t++,7);return C(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function x(n,t){return o=8,q(function(){return n},t)}function P(n){var u=r.context[n.__c],i=h(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function V(n,t){e.useDebugValue&&e.useDebugValue(t?t(n):n)}function b(n){var u=h(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=h(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],e.__e(t,n.__v)}}e.__b=function(n){r=null,a&&a(n)},e.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),d&&d(n,t)},e.__r=function(n){v&&v(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},e.diffed=function(n){l&&l(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===e.requestAnimationFrame||((i=e.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},e.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],e.__e(r,n.__v)}}),m&&m(n,t)},e.unmount=function(n){s&&s(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&e.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{x as useCallback,P as useContext,V as useDebugValue,_ as useEffect,b as useErrorBoundary,g as useId,T as useImperativeHandle,A as useLayoutEffect,q as useMemo,y as useReducer,F as useRef,p as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\ntype Proportions = {\n [displayName: string]: number;\n};\n\nexport function getMutationComparisonTableData(data: Dataset<MutationData>, proportionInterval: ProportionInterval) {\n const mutationsToProportions = new Map<string, Proportions>();\n\n for (const mutationData of data.content) {\n for (const mutationEntry of mutationData.data) {\n const mutation = mutationEntry.mutation.toString();\n const proportions = mutationsToProportions.get(mutation) || {};\n proportions[mutationData.displayName] = mutationEntry.proportion;\n mutationsToProportions.set(mutation, proportions);\n }\n }\n\n return [...mutationsToProportions.entries()]\n .map(([mutation, proportions]) => {\n return {\n mutation,\n ...data.content\n .map((mutationData) => {\n return {\n [`${mutationData.displayName} prevalence`]: proportions[mutationData.displayName] || 0,\n };\n })\n .reduce((acc, val) => ({ ...acc, ...val }), {}),\n } as { mutation: string } & Proportions;\n })\n .filter((row) =>\n Object.values(row).some(\n (value) =>\n typeof value === 'number' && value >= proportionInterval.min && value <= proportionInterval.max,\n ),\n );\n}\n","import { Grid } from 'gridjs';\nimport { type OneDArray, type TColumn, type TData } from 'gridjs/dist/src/types';\nimport { type PaginationConfig } from 'gridjs/dist/src/view/plugin/pagination';\nimport { type ComponentChild } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\nimport 'gridjs/dist/theme/mermaid.css';\n\nexport const tableStyle = {\n table: {\n fontSize: '12px',\n },\n th: {\n padding: '4px',\n textAlign: 'center',\n },\n td: {\n textAlign: 'center',\n padding: '8px',\n },\n footer: {\n fontSize: '12px',\n },\n};\n\ninterface TableProps {\n data: TData;\n columns: OneDArray<TColumn | string | ComponentChild>;\n pagination: PaginationConfig | boolean;\n}\n\nexport const Table = ({ data, columns, pagination }: TableProps) => {\n const wrapper = useRef(null);\n\n useEffect(() => {\n if (wrapper.current === null) {\n return;\n }\n const grid = new Grid({\n columns,\n data,\n style: tableStyle,\n pagination,\n }).render(wrapper.current);\n\n return () => {\n grid.destroy();\n };\n });\n\n return <div ref={wrapper} />;\n};\n","export const substitutionAndDeletionRegex = /(?:([A-Za-z0-9]+):)?([A-Za-z])(\\d+)([A-Za-z]|-|\\*)/;\n\nexport const sortSubstitutionsAndDeletions = (a: string, b: string) => {\n const aMatch = a.match(substitutionAndDeletionRegex);\n const bMatch = b.match(substitutionAndDeletionRegex);\n\n if (aMatch && bMatch) {\n if (aMatch[1] !== bMatch[1]) {\n return aMatch[1].localeCompare(bMatch[1]);\n }\n if (aMatch[3] !== bMatch[3]) {\n return parseInt(aMatch[3], 10) - parseInt(bMatch[3], 10);\n }\n return aMatch[4].localeCompare(bMatch[4]);\n }\n throw new Error(`Invalid substitution or deletion: ${a} or ${b}`);\n};\n","export const formatProportion = (proportion: number) => {\n return `${(proportion * 100).toFixed(2)}%`;\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getMutationComparisonTableData } from './getMutationComparisonTableData';\nimport { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { Table } from '../components/table';\nimport { sortSubstitutionsAndDeletions } from '../shared/sort/sortSubstitutionsAndDeletions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\nexport interface MutationsTableProps {\n data: Dataset<MutationData>;\n proportionInterval: ProportionInterval;\n}\n\nexport const MutationComparisonTable: FunctionComponent<MutationsTableProps> = ({ data, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Mutation',\n sort: {\n compare: (a: string, b: string) => {\n return sortSubstitutionsAndDeletions(a, b);\n },\n },\n },\n {\n name: 'Prevalence',\n columns: data.content.map((mutationData) => {\n return {\n name: mutationData.displayName,\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n };\n }),\n },\n ];\n };\n\n const tableData = getMutationComparisonTableData(data, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { Chart, type ChartConfiguration } from 'chart.js';\nimport { useEffect, useRef } from 'preact/hooks';\n\nexport interface GsChartProps {\n configuration: ChartConfiguration;\n}\n\nconst GsChart = ({ configuration }: GsChartProps) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const chartRef = useRef<Chart | null>(null);\n\n useEffect(() => {\n if (canvasRef.current === null) {\n return;\n }\n\n const ctx = canvasRef.current.getContext('2d');\n if (ctx === null) {\n return;\n }\n\n chartRef.current = new Chart(ctx, configuration);\n\n return () => {\n chartRef.current?.destroy();\n };\n }, [canvasRef, configuration]);\n\n return <canvas ref={canvasRef} />;\n};\n\nexport default GsChart;\n","import { type ActiveElement, Chart, type ChartConfiguration, type ChartEvent, registerables } from 'chart.js';\nimport { ArcSlice, extractSets, VennDiagramController } from 'chartjs-chart-venn';\nimport { type FunctionComponent } from 'preact';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\n\nimport { type MutationData } from './queryMutationData';\nimport { type Dataset } from '../../operator/Dataset';\nimport GsChart from '../components/chart';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\nChart.register(...registerables, VennDiagramController, ArcSlice);\n\nexport interface MutationComparisonVennProps {\n data: Dataset<MutationData>;\n proportionInterval: ProportionInterval;\n}\n\nexport const MutationComparisonVenn: FunctionComponent<MutationComparisonVennProps> = ({\n data,\n proportionInterval,\n}) => {\n const divRef = useRef<HTMLDivElement>(null);\n const noElementSelectedMessage = 'You have no elements selected. Click in the venn diagram to select.';\n const [selectedDatasetIndex, setSelectedDatasetIndex] = useState<null | number>(null);\n\n const sets = useMemo(\n () =>\n extractSets(\n data.content\n .map((mutationData) => ({\n displayName: mutationData.displayName,\n data: mutationData.data.filter(\n (mutationEntry) =>\n mutationEntry.proportion >= proportionInterval.min &&\n mutationEntry.proportion <= proportionInterval.max,\n ),\n }))\n .map((mutationData) => {\n return {\n label: mutationData.displayName,\n values: mutationData.data.map((mutationEntry) => mutationEntry.mutation.toString()),\n };\n }),\n ),\n [data, proportionInterval],\n );\n\n useEffect(() => {\n if (divRef.current === null) {\n return;\n }\n if (selectedDatasetIndex === null) {\n divRef.current.innerText = noElementSelectedMessage;\n return;\n }\n\n const values = sets.datasets[0].data[selectedDatasetIndex].values;\n const label = sets.datasets[0].data[selectedDatasetIndex].label;\n divRef.current!.innerText = `${label}: ${values.join(', ')}` || '';\n }, [divRef, selectedDatasetIndex, sets]);\n\n const config: ChartConfiguration = useMemo(\n () => ({\n type: 'venn',\n data: sets,\n options: {\n scales: {\n x: {\n ticks: {\n color: 'black',\n font: {\n size: 20,\n },\n },\n },\n y: {\n ticks: {\n color: 'blue',\n font: {\n size: 20,\n },\n },\n },\n },\n events: ['click'],\n onClick(_: ChartEvent, elements: ActiveElement[]) {\n if (elements.length === 0) {\n setSelectedDatasetIndex(null);\n }\n },\n backgroundColor: '#f5f5f5',\n animation: false,\n layout: {\n padding: 30,\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n filter: ({ dataIndex }) => {\n setSelectedDatasetIndex(dataIndex);\n return false;\n },\n },\n },\n },\n }),\n [sets],\n );\n\n if (data.content.length > 5) {\n return <div>Too many variants to display. Maximum are five. </div>;\n }\n\n return (\n <>\n <GsChart configuration={config} />\n <div class='flex flex-wrap break-words m-2' ref={divRef} />\n </>\n );\n};\n","import { type SequenceType } from '../types';\n\nexport interface Mutation {\n readonly segment: string | undefined;\n readonly position: number;\n readonly code: string;\n\n equals(other: Mutation): boolean;\n\n toString(): string;\n}\n\nexport const substitutionRegex =\n /^((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<valueAtReference>[A-Za-z])?(?<position>\\d+)(?<substitutionValue>[A-Za-z.])?$/;\n\nexport class Substitution implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly valueAtReference: string | undefined,\n readonly substitutionValue: string | undefined,\n readonly position: number,\n ) {\n const segmentString = this.segment ? `${this.segment}:` : '';\n const valueAtReferenceString = this.valueAtReference ? `${this.valueAtReference}` : '';\n const substitutionValueString = this.substitutionValue ? `${this.substitutionValue}` : '';\n this.code = `${segmentString}${valueAtReferenceString}${this.position}${substitutionValueString}`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Substitution)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.valueAtReference === other.valueAtReference &&\n this.substitutionValue === other.substitutionValue &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Substitution | null {\n const match = mutationStr.match(substitutionRegex);\n if (match === null || match.groups === undefined) {\n return null;\n }\n return new Substitution(\n match.groups.segment,\n match.groups.valueAtReference,\n match.groups.substitutionValue,\n parseInt(match.groups.position, 10),\n );\n }\n}\n\nexport const deletionRegex = /^((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<valueAtReference>[A-Za-z])?(?<position>\\d+)(-)$/;\n\nexport class Deletion implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly valueAtReference: string | undefined,\n readonly position: number,\n ) {\n const segmentString = this.segment ? `${this.segment}:` : '';\n const valueAtReferenceString = this.valueAtReference ? `${this.valueAtReference}` : '';\n this.code = `${segmentString}${valueAtReferenceString}${this.position}-`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Deletion)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.valueAtReference === other.valueAtReference &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Deletion | null {\n const match = mutationStr.match(deletionRegex);\n if (match === null || match.groups === undefined) {\n return null;\n }\n\n return new Deletion(match.groups.segment, match.groups.valueAtReference, parseInt(match.groups.position, 10));\n }\n}\n\nexport const insertionRegexp =\n /^ins_((?<segment>[A-Za-z0-9_-]+)(?=:):)?(?<position>\\d+):(?<insertedSymbols>(([A-Za-z?]|(\\.\\*))+))$/i;\n\nexport class Insertion implements Mutation {\n readonly code;\n\n constructor(\n readonly segment: string | undefined,\n readonly position: number,\n readonly insertedSymbols: string,\n ) {\n this.code = `ins_${this.segment ? `${this.segment}:` : ''}${this.position}:${this.insertedSymbols}`;\n }\n\n equals(other: Mutation): boolean {\n if (!(other instanceof Insertion)) {\n return false;\n }\n return (\n this.segment === other.segment &&\n this.insertedSymbols === other.insertedSymbols &&\n this.position === other.position\n );\n }\n\n toString() {\n return this.code;\n }\n\n static parse(mutationStr: string): Insertion | null {\n const match = mutationStr.match(insertionRegexp);\n if (match === null || match.groups === undefined) {\n return null;\n }\n\n return new Insertion(match.groups.segment, parseInt(match.groups.position, 10), match.groups.insertedSymbols);\n }\n}\n\nexport const bases: { [P in SequenceType]: string[] } = {\n nucleotide: ['A', 'C', 'G', 'T', '-'],\n 'amino acid': [\n 'I',\n 'L',\n 'V',\n 'F',\n 'M',\n 'C',\n 'A',\n 'G',\n 'P',\n 'T',\n 'S',\n 'Y',\n 'W',\n 'Q',\n 'N',\n 'H',\n 'E',\n 'D',\n 'K',\n 'R',\n '-',\n ],\n};\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchSubstitutionsOrDeletions } from '../lapisApi/lapisApi';\nimport { type LapisFilter, type SequenceType, type SubstitutionOrDeletionEntry } from '../types';\nimport { Deletion, Substitution } from '../utils/mutations';\n\nexport class FetchSubstitutionsOrDeletionsOperator implements Operator<SubstitutionOrDeletionEntry> {\n constructor(\n private filter: LapisFilter,\n private sequenceType: SequenceType,\n private minProportion?: number,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<SubstitutionOrDeletionEntry>> {\n const mutations = await this.fetchMutations(lapis, signal);\n\n const content: SubstitutionOrDeletionEntry[] = mutations.map(\n ({ count, proportion, mutationFrom, mutationTo, position, sequenceName }) => {\n if (mutationTo === '-') {\n return {\n type: 'deletion',\n mutation: new Deletion(sequenceName ?? undefined, mutationFrom, position),\n count,\n proportion,\n };\n }\n return {\n type: 'substitution',\n mutation: new Substitution(sequenceName ?? undefined, mutationFrom, mutationTo, position),\n count,\n proportion,\n };\n },\n );\n\n return { content };\n }\n\n private async fetchMutations(lapis: string, signal?: AbortSignal) {\n const filter = {\n ...this.filter,\n minProportion: this.minProportion,\n };\n\n return fetchSubstitutionsOrDeletions(lapis, filter, this.sequenceType, signal).then(\n (response) => response.data,\n );\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class SortOperator<S> implements Operator<S> {\n constructor(\n private child: Operator<S>,\n private compareFn: (a: S, b: S) => number,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<S>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n return {\n content: childEvaluated.content.sort(this.compareFn),\n };\n }\n}\n","import { FetchSubstitutionsOrDeletionsOperator } from '../operator/FetchSubstitutionsOrDeletionsOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type SequenceType } from '../types';\n\nexport function querySubstitutionsOrDeletions(\n variant: LapisFilter,\n sequenceType: SequenceType,\n lapis: string,\n signal?: AbortSignal,\n) {\n const fetchData = new FetchSubstitutionsOrDeletionsOperator(variant, sequenceType, 0);\n const sortData = new SortOperator(fetchData, (a, b) => {\n if (a.mutation.segment !== b.mutation.segment) {\n return (a.mutation.segment ?? '').localeCompare(b.mutation.segment ?? '');\n }\n return a.mutation.position - b.mutation.position;\n });\n return sortData.evaluate(lapis, signal);\n}\n","import { type MutationComparisonVariant } from './mutation-comparison';\nimport { querySubstitutionsOrDeletions } from '../../query/querySubstitutionsOrDeletions';\nimport { type SubstitutionOrDeletionEntry } from '../../types';\nimport { type DisplayedSegment } from '../components/SegmentSelector';\nimport { type DisplayedMutationType } from '../components/mutation-type-selector';\n\nexport type MutationData = {\n displayName: string;\n data: SubstitutionOrDeletionEntry[];\n};\n\nexport async function queryMutationData(\n variants: MutationComparisonVariant[],\n sequenceType: 'nucleotide' | 'amino acid',\n lapis: string,\n) {\n const mutationData = await Promise.all(\n variants.map(async (variant) => {\n return {\n displayName: variant.displayName,\n data: (await querySubstitutionsOrDeletions(variant.lapisFilter, sequenceType, lapis)).content,\n };\n }),\n );\n return { mutationData };\n}\n\nexport function filterMutationData(\n data: MutationData[],\n displayedSegments: DisplayedSegment[],\n displayedMutationTypes: DisplayedMutationType[],\n) {\n const byDisplayedSegments = (mutationEntry: SubstitutionOrDeletionEntry) => {\n if (mutationEntry.mutation.segment === undefined) {\n return true;\n }\n return displayedSegments.some(\n (displayedSegment) =>\n displayedSegment.segment === mutationEntry.mutation.segment && displayedSegment.checked,\n );\n };\n const byDisplayedMutationTypes = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return displayedMutationTypes.some(\n (displayedMutationType) =>\n displayedMutationType.checked && displayedMutationType.type === mutationEntry.type,\n );\n };\n\n return data.map((mutationEntry) => ({\n displayName: mutationEntry.displayName,\n data: mutationEntry.data.filter(byDisplayedSegments).filter(byDisplayedMutationTypes),\n }));\n}\n","import { createContext } from 'preact';\n\nexport const LapisUrlContext = createContext('');\n","export type CheckboxItem = {\n label: string;\n checked: boolean;\n};\n\nexport interface CheckboxSelectorProps<Item extends CheckboxItem = CheckboxItem> {\n className?: string;\n items: Item[];\n label: string;\n setItems: (items: Item[]) => void;\n}\n\nexport const CheckboxSelector = <Item extends CheckboxItem>({\n className,\n items,\n label,\n setItems,\n}: CheckboxSelectorProps<Item>) => {\n return (\n <div class={`dropdown ${className}`}>\n <div tabIndex={0} role='button' class='btn btn-xs text-nowrap'>\n {label}\n </div>\n <ul tabIndex={0} class='p-2 shadow menu dropdown-content z-[1] bg-base-100 rounded-box'>\n {items.map((item, index) => (\n <li class='flex flex-row items-center' key={item.label}>\n <label>\n <input\n type='checkbox'\n id={`item-${index}`}\n checked={item.checked}\n onChange={() => {\n const newItems = items.map((item, i) =>\n i === index ? { ...item, checked: !item.checked } : item,\n );\n setItems(newItems);\n }}\n />\n {item.label}\n </label>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import { createContext } from 'preact';\n\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\n\nexport const ReferenceGenomeContext = createContext<ReferenceGenome>({ nucleotideSequences: [], genes: [] });\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport { type CheckboxItem, CheckboxSelector } from './checkbox-selector';\nimport { getSegmentNames } from '../../lapisApi/ReferenceGenome';\nimport { type SequenceType } from '../../types';\nimport { ReferenceGenomeContext } from '../ReferenceGenomeContext';\n\nexport type DisplayedSegment = CheckboxItem & {\n segment: string;\n};\n\nexport type SegmentSelectorProps = {\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (items: DisplayedSegment[]) => void;\n prefix?: string;\n};\n\nconst getSegmentSelectorLabel = (displayedSegments: DisplayedSegment[], prefix: string) => {\n const allSelectedSelected = displayedSegments\n .filter((segment) => segment.checked)\n .map((segment) => segment.segment);\n\n if (allSelectedSelected.length === 0) {\n return `${prefix}none`;\n }\n if (displayedSegments.length === allSelectedSelected.length) {\n return `${prefix}all`;\n }\n return prefix + allSelectedSelected.join(', ');\n};\n\nexport const SegmentSelector: FunctionComponent<SegmentSelectorProps> = ({\n displayedSegments,\n setDisplayedSegments,\n prefix,\n}) => {\n if (displayedSegments.length <= 1) {\n return null;\n }\n\n return (\n <CheckboxSelector\n className='mx-1'\n items={displayedSegments}\n label={getSegmentSelectorLabel(displayedSegments, prefix || 'Segments: ')}\n setItems={(items) => setDisplayedSegments(items)}\n />\n );\n};\n\nexport function useDisplayedSegments(sequenceType: SequenceType) {\n const referenceGenome = useContext(ReferenceGenomeContext);\n\n const displayedSegments = getSegmentNames(referenceGenome, sequenceType).map((segment) => ({\n segment,\n label: segment,\n checked: true,\n }));\n\n return useState<DisplayedSegment[]>(displayedSegments);\n}\n","import { type FunctionComponent } from 'preact';\n\nexport interface CsvDownloadButtonProps {\n label?: string;\n filename?: string;\n getData: () => Record<string, string | number | boolean | null>[];\n className?: string;\n}\n\nexport const CsvDownloadButton: FunctionComponent<CsvDownloadButtonProps> = ({\n label = 'Download',\n filename = 'data.csv',\n getData,\n className,\n}) => {\n const download = () => {\n const content = getDownloadContent();\n const blob = new Blob([content], { type: 'text/csv' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url);\n };\n\n const getDownloadContent = () => {\n const data = getData();\n const keys = getDataKeys(data);\n const header = `${keys.join(',')}\\n`;\n const rows = data.map((row) => keys.map((key) => row[key]).join(',')).join('\\n');\n return header + rows;\n };\n\n const getDataKeys = (data: Record<string, string | number | boolean | null>[]) => {\n const keysSet = data\n .map((row) => Object.keys(row))\n .reduce((accumulatedKeys, keys) => {\n keys.forEach((key) => accumulatedKeys.add(key));\n return accumulatedKeys;\n }, new Set<string>());\n\n return [...keysSet];\n };\n\n return (\n <button className={className} onClick={download}>\n {label}\n </button>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nexport const ErrorDisplay: FunctionComponent<{ error: Error }> = ({ error }) => {\n return <div>Error: {error.message}</div>;\n};\n","import { type FunctionComponent } from 'preact';\n\nexport interface HeadlineProps {\n heading: string;\n}\n\nconst Headline: FunctionComponent<HeadlineProps> = ({ heading, children }) => {\n return (\n <>\n <h1>{heading}</h1>\n {children}\n </>\n );\n};\n\nexport default Headline;\n","import { type FunctionComponent } from 'preact';\n\nexport interface InfoProps {\n content: string;\n className?: string;\n}\n\nconst Info: FunctionComponent<InfoProps> = ({ content, className }) => {\n return (\n <div class={`${className} tooltip`} data-tip={content}>\n <button class='btn btn-xs'>?</button>\n </div>\n );\n};\n\nexport default Info;\n","import { type FunctionComponent } from 'preact';\n\nexport const LoadingDisplay: FunctionComponent = () => {\n return <div>Loading...</div>;\n};\n","import { type FunctionComponent } from 'preact/compat';\n\nimport { type CheckboxItem, CheckboxSelector } from './checkbox-selector';\nimport type { SubstitutionOrDeletion } from '../../types';\n\nexport type DisplayedMutationType = CheckboxItem & {\n type: SubstitutionOrDeletion;\n};\n\nexport type MutationTypeSelectorProps = {\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (mutationTypes: DisplayedMutationType[]) => void;\n};\n\nexport const MutationTypeSelector: FunctionComponent<MutationTypeSelectorProps> = ({\n displayedMutationTypes,\n setDisplayedMutationTypes,\n}) => {\n const checkedLabels = displayedMutationTypes.filter((type) => type.checked).map((type) => type.label);\n const mutationTypesSelectorLabel = `Types: ${checkedLabels.length > 0 ? checkedLabels.join(', ') : 'None'}`;\n\n return (\n <CheckboxSelector\n className='mx-1'\n items={displayedMutationTypes}\n label={mutationTypesSelectorLabel}\n setItems={(items) => setDisplayedMutationTypes(items)}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nexport const NoDataDisplay: FunctionComponent = () => {\n return <div>No data available.</div>;\n};\n","import { type FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { type ChangeEvent } from 'react';\nimport './min-max-percent-slider.css';\n\nexport interface MinMaxPercentSliderProps {\n min: number;\n max: number;\n setMin: (min: number) => void;\n setMax: (max: number) => void;\n rangeMin?: number;\n rangeMax?: number;\n step?: number;\n}\n\nexport const MinMaxRangeSlider: FunctionComponent<MinMaxPercentSliderProps> = ({\n min,\n max,\n setMin,\n setMax,\n rangeMin = 0,\n rangeMax = 100,\n step = 0.1,\n}) => {\n const sliderColor = '#C6C6C6';\n const rangeColor = '#387bbe';\n\n const [zIndexTo, setZIndexTo] = useState(0);\n\n const onMinChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const minValue = Number(input.value);\n\n if (minValue > max) {\n setMax(minValue);\n setMin(minValue);\n } else {\n setMin(minValue);\n }\n };\n\n const onMaxChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const maxValue = Number(input.value);\n\n if (maxValue <= 0) {\n setZIndexTo(2);\n } else {\n setZIndexTo(0);\n }\n\n if (maxValue < min) {\n setMin(maxValue);\n setMax(maxValue);\n } else {\n setMax(maxValue);\n }\n };\n\n const background = `\n linear-gradient(\n to right,\n ${sliderColor} 0%,\n ${sliderColor} ${min}%,\n ${rangeColor} ${min}%,\n ${rangeColor} ${max}%,\n ${sliderColor} ${max}%,\n ${sliderColor} 100%)\n `;\n\n return (\n <div class='my-4 relative'>\n <input\n id='fromSlider'\n type='range'\n value={min}\n onInput={onMinChange}\n min={rangeMin}\n max={rangeMax}\n step={step}\n style={{ background, zIndex: 1, height: 0 }}\n />\n <input\n id='toSlider'\n type='range'\n value={max}\n min={rangeMin}\n max={rangeMax}\n step={step}\n onInput={onMaxChange}\n style={{ background, zIndex: zIndexTo }}\n />\n </div>\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport { type ChangeEvent } from 'react';\n\nexport type PercentInputProps = {\n percentage: number;\n setPercentage: (percentage: number) => void;\n};\n\nconst percentageInRange = (percentage: number) => {\n return percentage <= 100 && percentage >= 0;\n};\n\nexport const PercentInput: FunctionComponent<PercentInputProps> = ({ percentage, setPercentage }) => {\n const [internalPercentage, setInternalPercentage] = useState(percentage);\n\n useEffect(() => {\n setInternalPercentage(percentage);\n }, [percentage]);\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.target as HTMLInputElement;\n const value = Number(input.value);\n\n const inRange = percentageInRange(value);\n\n if (inRange) {\n setPercentage(value);\n }\n setInternalPercentage(value);\n };\n\n const isError = !percentageInRange(internalPercentage);\n return (\n <label className={`input input-bordered flex items-center gap-2 w-32 ${isError ? 'input-error' : ''}`}>\n <input\n type='number'\n step={0.1}\n min={0}\n max={100}\n value={internalPercentage}\n onInput={handleInputChange}\n lang='en'\n className={`grow w-16`}\n />\n %\n </label>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { MinMaxRangeSlider } from './min-max-range-slider';\nimport { PercentInput } from './percent-intput';\n\nexport type ProportionInterval = { min: number; max: number };\n\nexport interface ProportionSelectorProps {\n proportionInterval: ProportionInterval;\n setMinProportion: (minProportion: number) => void;\n setMaxProportion: (maxProportion: number) => void;\n}\n\nexport const ProportionSelector: FunctionComponent<ProportionSelectorProps> = ({\n proportionInterval,\n setMinProportion,\n setMaxProportion,\n}) => {\n const { min: minProportion, max: maxProportion } = proportionInterval;\n return (\n <div class='flex flex-col w-64 mb-2'>\n <div class='flex items-center '>\n <PercentInput\n percentage={minProportion * 100}\n setPercentage={(percentage) => setMinProportion(percentage / 100)}\n />\n <div class='m-2'>-</div>\n <PercentInput\n percentage={maxProportion * 100}\n setPercentage={(percentage) => setMaxProportion(percentage / 100)}\n />\n </div>\n <div class='my-1'>\n <MinMaxRangeSlider\n min={minProportion * 100}\n max={maxProportion * 100}\n setMin={(percentage) => setMinProportion(percentage / 100)}\n setMax={(percentage) => setMaxProportion(percentage / 100)}\n />\n </div>\n </div>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { ProportionSelector, type ProportionSelectorProps } from './proportion-selector';\n\nexport interface ProportionSelectorDropdownProps extends ProportionSelectorProps {\n openDirection?: 'left' | 'right';\n}\n\nexport const ProportionSelectorDropdown: FunctionComponent<ProportionSelectorDropdownProps> = ({\n proportionInterval,\n setMinProportion,\n setMaxProportion,\n openDirection = 'right',\n}) => {\n const label = `${(proportionInterval.min * 100).toFixed(1)}% - ${(proportionInterval.max * 100).toFixed(1)}%`;\n\n return (\n <div class={`dropdown ${openDirection === 'left' ? 'dropdown-end' : ''}`}>\n <div tabIndex={0} role='button' class='btn btn-xs whitespace-nowrap'>\n Proportion {label}\n </div>\n <ul tabIndex={0} class='p-2 shadow menu dropdown-content z-[1] bg-base-100 rounded-box w-72'>\n <div class='mb-2 ml-2'>\n <ProportionSelector\n proportionInterval={proportionInterval}\n setMinProportion={setMinProportion}\n setMaxProportion={setMaxProportion}\n />\n </div>\n </ul>\n </div>\n );\n};\n","import { Fragment, type FunctionComponent } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { type JSXInternal } from 'preact/src/jsx';\n\ntype Tab = {\n title: string;\n content: JSXInternal.Element;\n};\n\ninterface ComponentTabsProps {\n tabs: Tab[];\n toolbar?: JSXInternal.Element | ((activeTab: string) => JSXInternal.Element);\n}\n\nconst Tabs: FunctionComponent<ComponentTabsProps> = ({ tabs, toolbar }) => {\n const [activeTab, setActiveTab] = useState(tabs[0].title);\n\n const tabNames = tabs.map((tab) => tab.title).join(', ');\n\n const tabElements = tabs.map((tab) => {\n return (\n <Fragment key={tab.title}>\n <input\n type='radio'\n name={tabNames}\n role='tab'\n className='tab'\n aria-label={tab.title}\n checked={activeTab === tab.title}\n onChange={() => setActiveTab(tab.title)}\n />\n <div role='tabpanel' className='tab-content bg-base-100 border-base-300 rounded-box p-1'>\n {tab.content}\n </div>\n </Fragment>\n );\n });\n\n const toolbarElement = typeof toolbar === 'function' ? toolbar(activeTab) : toolbar;\n\n return (\n <div role='tablist' className='tabs tabs-lifted'>\n {tabElements}\n {toolbar && <div className='m-1 col-[9999]'>{toolbarElement}</div>}\n </div>\n );\n};\n\nexport default Tabs;\n","import { useEffect, useState } from 'preact/hooks';\n\nexport function useQuery<Data>(fetchDataCallback: () => Promise<Data>, dependencies: unknown[] = []) {\n const [data, setData] = useState<Data | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const fetchData = async () => {\n setIsLoading(true);\n try {\n const result = await fetchDataCallback();\n setData(result);\n setError(null);\n } catch (error) {\n setError(error as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(dependencies)]);\n\n return { data, error, isLoading };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type Dispatch, type StateUpdater, useContext, useMemo, useState } from 'preact/hooks';\n\nimport { getMutationComparisonTableData } from './getMutationComparisonTableData';\nimport { MutationComparisonTable } from './mutation-comparison-table';\nimport { MutationComparisonVenn } from './mutation-comparison-venn';\nimport { filterMutationData, type MutationData, queryMutationData } from './queryMutationData';\nimport { type LapisFilter, type SequenceType } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { type DisplayedSegment, SegmentSelector, useDisplayedSegments } from '../components/SegmentSelector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { type DisplayedMutationType, MutationTypeSelector } from '../components/mutation-type-selector';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { ProportionSelectorDropdown } from '../components/proportion-selector-dropdown';\nimport Tabs from '../components/tabs';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'table' | 'venn';\n\nexport interface MutationComparisonVariant {\n lapisFilter: LapisFilter;\n displayName: string;\n}\n\nexport interface MutationComparisonProps {\n variants: MutationComparisonVariant[];\n sequenceType: SequenceType;\n views: View[];\n}\n\nexport const MutationComparison: FunctionComponent<MutationComparisonProps> = ({ variants, sequenceType, views }) => {\n const lapis = useContext(LapisUrlContext);\n\n const { data, error, isLoading } = useQuery(async () => {\n return queryMutationData(variants, sequenceType, lapis);\n }, [variants, sequenceType, lapis]);\n\n const headline = 'Mutation comparison';\n\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <MutationComparisonTabs data={data.mutationData} sequenceType={sequenceType} views={views} />\n </Headline>\n );\n};\n\ntype MutationComparisonTabsProps = {\n data: MutationData[];\n views: View[];\n sequenceType: SequenceType;\n};\n\nconst MutationComparisonTabs: FunctionComponent<MutationComparisonTabsProps> = ({ data, views, sequenceType }) => {\n const [proportionInterval, setProportionInterval] = useState({ min: 0.5, max: 1 });\n const [displayedMutationTypes, setDisplayedMutationTypes] = useState<DisplayedMutationType[]>([\n { label: 'Substitutions', checked: true, type: 'substitution' },\n { label: 'Deletions', checked: true, type: 'deletion' },\n ]);\n const [displayedSegments, setDisplayedSegments] = useDisplayedSegments(sequenceType);\n\n const filteredData = useMemo(\n () => filterMutationData(data, displayedSegments, displayedMutationTypes),\n [data, displayedSegments, displayedMutationTypes],\n );\n\n const getTab = (view: View) => {\n switch (view) {\n case 'table':\n return {\n title: 'Table',\n content: (\n <MutationComparisonTable\n data={{ content: filteredData }}\n proportionInterval={proportionInterval}\n />\n ),\n };\n case 'venn':\n return {\n title: 'Venn',\n content: (\n <MutationComparisonVenn\n data={{ content: filteredData }}\n proportionInterval={proportionInterval}\n />\n ),\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n return (\n <Tabs\n tabs={tabs}\n toolbar={\n <Toolbar\n displayedSegments={displayedSegments}\n setDisplayedSegments={setDisplayedSegments}\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n filteredData={filteredData}\n proportionInterval={proportionInterval}\n setProportionInterval={setProportionInterval}\n />\n }\n />\n );\n};\n\ntype ToolbarProps = {\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (segments: DisplayedSegment[]) => void;\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (types: DisplayedMutationType[]) => void;\n filteredData: MutationData[];\n proportionInterval: ProportionInterval;\n setProportionInterval: Dispatch<StateUpdater<ProportionInterval>>;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n displayedSegments,\n setDisplayedSegments,\n displayedMutationTypes,\n setDisplayedMutationTypes,\n filteredData,\n proportionInterval,\n setProportionInterval,\n}) => {\n return (\n <div class='flex flex-row'>\n <ProportionSelectorDropdown\n proportionInterval={proportionInterval}\n setMinProportion={(min) => setProportionInterval((prev) => ({ ...prev, min }))}\n setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}\n />\n <SegmentSelector displayedSegments={displayedSegments} setDisplayedSegments={setDisplayedSegments} />\n <MutationTypeSelector\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n />\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getMutationComparisonTableData({ content: filteredData }, proportionInterval)}\n filename='mutation_comparison.csv'\n />\n <Info className='mx-1' content='Info for mutation comparison' />\n </div>\n );\n};\n","import { consume } from '@lit/context';\nimport { type PropertyValues, ReactiveElement } from '@lit/reactive-element';\nimport { unsafeCSS } from 'lit';\nimport { render } from 'preact';\nimport { type JSXInternal } from 'preact/src/jsx';\n\nimport { lapisContext } from './lapis-context';\nimport { referenceGenomeContext } from './reference-genome-context';\nimport { type ReferenceGenome } from '../lapisApi/ReferenceGenome';\nimport { LapisUrlContext } from '../preact/LapisUrlContext';\nimport { ReferenceGenomeContext } from '../preact/ReferenceGenomeContext';\nimport minMaxPercentSliderCss from '../preact/components/min-max-percent-slider.css?inline';\nimport tailwindStyle from '../styles/tailwind.css?inline';\n\nimport '../styles/tailwind.css';\nimport '../preact/components/min-max-percent-slider.css';\n\nconst tailwindElementCss = unsafeCSS(tailwindStyle);\nconst minMaxPercentSliderElementCss = unsafeCSS(minMaxPercentSliderCss);\n\nexport abstract class PreactLitAdapter extends ReactiveElement {\n static override styles = [tailwindElementCss, minMaxPercentSliderElementCss];\n\n /**\n * @internal\n * The URL of the Lapis instance.\n *\n * This component must be a child of a `gs-app` component.\n * This value will automatically be injected by the parent `gs-app` component.\n */\n @consume({ context: lapisContext })\n lapis: string = '';\n\n /**\n * @internal\n * The reference genomes of the underlying organism.\n * These will be fetched from the Lapis instance.\n *\n * This component must be a child of a `gs-app` component.\n * This value will automatically be injected by the parent `gs-app` component.\n */\n @consume({ context: referenceGenomeContext, subscribe: true })\n referenceGenome: ReferenceGenome = {\n nucleotideSequences: [],\n genes: [],\n };\n\n override update(changedProperties: PropertyValues) {\n console.log('this.lapis', this.lapis);\n const vdom = (\n <LapisUrlContext.Provider value={this.lapis}>\n <ReferenceGenomeContext.Provider value={this.referenceGenome}>\n {this.render()}\n </ReferenceGenomeContext.Provider>\n </LapisUrlContext.Provider>\n );\n super.update(changedProperties);\n render(vdom, this.renderRoot);\n }\n\n protected abstract render(): JSXInternal.Element;\n}\n","import gridJsStyle from 'gridjs/dist/theme/mermaid.css?inline';\nimport { unsafeCSS } from 'lit';\n\nimport { PreactLitAdapter } from './PreactLitAdapter';\n\nimport 'gridjs/dist/theme/mermaid.css';\n\nconst gridJsElementCss = unsafeCSS(gridJsStyle);\n\nexport abstract class PreactLitAdapterWithGridJsStyles extends PreactLitAdapter {\n static override styles = [...PreactLitAdapter.styles, gridJsElementCss];\n}\n","import { customElement, property } from 'lit/decorators.js';\n\nimport {\n MutationComparison,\n type MutationComparisonVariant,\n type View,\n} from '../../preact/mutationComparison/mutation-comparison';\nimport { type SequenceType } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-mutation-comparison-component')\nexport class MutationComparisonComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Array })\n variants: MutationComparisonVariant[] = [];\n\n @property({ type: String })\n sequenceType: SequenceType = 'nucleotide';\n\n @property({ type: Array })\n views: View[] = ['table'];\n\n override render() {\n return <MutationComparison variants={this.variants} sequenceType={this.sequenceType} views={this.views} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutation-comparison-component': MutationComparisonComponent;\n }\n}\n","import { type InsertionEntry } from '../../types';\n\nexport function getInsertionsTableData(data: InsertionEntry[]) {\n return data.map((mutationEntry) => {\n return {\n insertion: mutationEntry.mutation.toString(),\n count: mutationEntry.count,\n };\n });\n}\n","import { type SubstitutionOrDeletionEntry } from '../../types';\nimport { type ProportionInterval } from '../components/proportion-selector';\n\nexport function getMutationsTableData(data: SubstitutionOrDeletionEntry[], proportionInterval: ProportionInterval) {\n const byProportion = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return mutationEntry.proportion >= proportionInterval.min && mutationEntry.proportion <= proportionInterval.max;\n };\n\n return data.filter(byProportion).map((mutationEntry) => {\n return {\n mutation: mutationEntry.mutation.toString(),\n type: mutationEntry.type,\n count: mutationEntry.count,\n proportion: mutationEntry.proportion,\n };\n });\n}\n","const pattern = /(?:([A-Za-z0-9]+):)?(\\d+)$/;\n\nexport const sortMutationPositions = (a: string, b: string) => {\n const aMatch = a.match(pattern);\n const bMatch = b.match(pattern);\n\n if (aMatch && bMatch) {\n if (aMatch[1] !== bMatch[1]) {\n return aMatch[1].localeCompare(bMatch[1]);\n }\n return parseInt(aMatch[2], 10) - parseInt(bMatch[2], 10);\n }\n throw new Error(`Invalid mutation position: ${a} or ${b}`);\n};\n","import { type BaseCell } from './mutations-grid';\nimport type { SequenceType, SubstitutionOrDeletionEntry } from '../../types';\nimport { bases } from '../../utils/mutations';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { sortMutationPositions } from '../shared/sort/sortMutationPositions';\n\nexport const getMutationsGridData = (\n data: SubstitutionOrDeletionEntry[],\n sequenceType: SequenceType,\n proportionInterval: ProportionInterval,\n) => {\n return accumulateByPosition(data, sequenceType).filter((row) => byProportion(row, proportionInterval));\n};\n\nconst accumulateByPosition = (data: SubstitutionOrDeletionEntry[], sequenceType: SequenceType) => {\n const basesOfView = bases[sequenceType];\n const positionsToProportionAtBase = new Map<string, Map<string | undefined, number>>();\n const referenceBases = new Map<string, string | undefined>();\n\n for (const mutationEntry of data) {\n const position =\n (mutationEntry.mutation.segment ? `${mutationEntry.mutation.segment}:` : '') +\n mutationEntry.mutation.position;\n referenceBases.set(position, mutationEntry.mutation.valueAtReference);\n\n const initiallyFillPositionsToProportionAtBase = () => {\n if (!positionsToProportionAtBase.has(position)) {\n const empty = new Map();\n basesOfView.forEach((base) => empty.set(base, 0));\n empty.set(mutationEntry.mutation.valueAtReference, 1);\n positionsToProportionAtBase.set(position, empty);\n }\n };\n initiallyFillPositionsToProportionAtBase();\n\n const substitutionValue =\n mutationEntry.type === 'substitution' ? mutationEntry.mutation.substitutionValue : '-';\n\n const subtractSubstitutionValue = () => {\n const proportionAtBase = positionsToProportionAtBase.get(position)!;\n proportionAtBase.set(substitutionValue, mutationEntry.proportion);\n proportionAtBase.set(\n mutationEntry.mutation.valueAtReference,\n proportionAtBase.get(mutationEntry.mutation.valueAtReference)! - mutationEntry.proportion,\n );\n };\n subtractSubstitutionValue();\n }\n const orderedPositionsToProportionAtBase = [...positionsToProportionAtBase.entries()]\n .map(([position, proportionsAtBase]) => ({ position, proportions: proportionsAtBase }))\n .sort((a, b) => {\n return sortMutationPositions(a.position, b.position);\n });\n\n return orderedPositionsToProportionAtBase.map((proportionsForBaseAtPosition) => {\n const proportions = bases[sequenceType].map((base) => {\n return {\n [base]: {\n proportion: proportionsForBaseAtPosition.proportions.get(base)!,\n isReference: base === referenceBases.get(proportionsForBaseAtPosition.position),\n },\n };\n });\n\n return {\n position: proportionsForBaseAtPosition.position,\n ...proportions.reduce((acc, curr) => ({ ...acc, ...curr }), {}),\n } as MutationsGridDataRow;\n });\n};\n\nexport type BasesData = {\n [base: string]: BaseCell;\n};\nexport type MutationsGridDataRow = BasesData & { position: string };\n\nconst byProportion = (row: MutationsGridDataRow, proportionInterval: ProportionInterval) => {\n const numbersAndIsReference = Object.values(row).filter(\n (\n cell,\n ): cell is {\n proportion: number;\n isReference: boolean;\n } => typeof cell === 'object',\n );\n\n return numbersAndIsReference.some((cell) => {\n return (\n !cell.isReference && cell.proportion >= proportionInterval.min && cell.proportion <= proportionInterval.max\n );\n });\n};\n","import { type Row } from 'gridjs';\nimport { type FunctionComponent } from 'preact';\n\nimport { getMutationsGridData } from './getMutationsGridData';\nimport { type SequenceType, type SubstitutionOrDeletionEntry } from '../../types';\nimport { bases } from '../../utils/mutations';\nimport { type ProportionInterval } from '../components/proportion-selector';\nimport { Table, tableStyle } from '../components/table';\nimport { sortMutationPositions } from '../shared/sort/sortMutationPositions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\ninterface MutationsGridProps {\n data: SubstitutionOrDeletionEntry[];\n sequenceType: SequenceType;\n proportionInterval: ProportionInterval;\n}\n\nexport type BaseCell = {\n proportion: number;\n isReference: boolean;\n};\n\nexport const MutationsGrid: FunctionComponent<MutationsGridProps> = ({ data, sequenceType, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Position',\n sort: {\n compare: (a: string, b: string) => {\n return sortMutationPositions(a, b);\n },\n },\n },\n ...getBasesHeaders(),\n ];\n };\n\n const getBasesHeaders = () => {\n return bases[sequenceType].map((base) => {\n return {\n name: base,\n sort: {\n compare: (a: BaseCell, b: BaseCell) => {\n const aProportion = a.proportion;\n const bProportion = b.proportion;\n if (aProportion < bProportion) {\n return -1;\n }\n if (aProportion > bProportion) {\n return 1;\n }\n\n return 0;\n },\n },\n formatter: (cell: BaseCell) => formatProportion(cell.proportion),\n attributes: (cell: BaseCell, row: Row) => {\n // grid-js: the cell and row are null for header cells\n if (row === null) {\n return {};\n }\n\n return styleCells(cell);\n },\n };\n });\n };\n\n const styleCells = (cell: BaseCell) => {\n if (cell.isReference || cell.proportion < 0.0001) {\n return {\n style: {\n ...tableStyle.td,\n color: 'gray',\n },\n };\n }\n return {};\n };\n\n const tableData = getMutationsGridData(data, sequenceType, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { Insertion } from '../../../utils/mutations';\n\nexport const sortInsertions = (a: string, b: string) => {\n const insertionA = Insertion.parse(a);\n const insertionB = Insertion.parse(b);\n\n if (insertionA && insertionB) {\n const segmentA = insertionA.segment;\n const segmentB = insertionB.segment;\n if (segmentA !== undefined && segmentB !== undefined && segmentA !== segmentB) {\n return segmentA.localeCompare(segmentB);\n }\n const positionA = insertionA.position;\n const positionB = insertionB.position;\n if (positionA !== positionB) {\n return positionA - positionB;\n }\n return insertionA.insertedSymbols.localeCompare(insertionB.insertedSymbols);\n }\n throw new Error(`Invalid insertion: ${a} or ${b}`);\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getInsertionsTableData } from './getInsertionsTableData';\nimport { type InsertionEntry } from '../../types';\nimport { Table } from '../components/table';\nimport { sortInsertions } from '../shared/sort/sortInsertions';\n\nexport interface InsertionsTableProps {\n data: InsertionEntry[];\n}\n\nexport const InsertionsTable: FunctionComponent<InsertionsTableProps> = ({ data }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Insertion',\n sort: {\n compare: (a: string, b: string) => {\n return sortInsertions(a, b);\n },\n },\n },\n {\n name: 'Count',\n sort: true,\n },\n ];\n };\n\n const tableData = getInsertionsTableData(data).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { getMutationsTableData } from './getMutationsTableData';\nimport { type SubstitutionOrDeletionEntry } from '../../types';\nimport type { ProportionInterval } from '../components/proportion-selector';\nimport { Table } from '../components/table';\nimport { sortSubstitutionsAndDeletions } from '../shared/sort/sortSubstitutionsAndDeletions';\nimport { formatProportion } from '../shared/table/formatProportion';\n\nexport interface MutationsTableProps {\n data: SubstitutionOrDeletionEntry[];\n proportionInterval: ProportionInterval;\n}\n\nconst MutationsTable: FunctionComponent<MutationsTableProps> = ({ data, proportionInterval }) => {\n const getHeaders = () => {\n return [\n {\n name: 'Mutation',\n sort: {\n compare: (a: string, b: string) => {\n return sortSubstitutionsAndDeletions(a, b);\n },\n },\n },\n {\n name: 'Type',\n sort: true,\n },\n {\n name: 'Count',\n sort: true,\n },\n {\n name: 'Proportion',\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n },\n ];\n };\n\n const tableData = getMutationsTableData(data, proportionInterval).map((row) => Object.values(row));\n\n return <Table data={tableData} columns={getHeaders()} pagination={true} />;\n};\n\nexport default MutationsTable;\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchInsertions } from '../lapisApi/lapisApi';\nimport { type InsertionEntry, type LapisFilter, type SequenceType } from '../types';\nimport { Insertion } from '../utils/mutations';\n\nexport class FetchInsertionsOperator implements Operator<InsertionEntry> {\n constructor(\n private filter: LapisFilter,\n private sequenceType: SequenceType,\n ) {}\n\n async evaluate(lapisUrl: string, signal?: AbortSignal): Promise<Dataset<InsertionEntry>> {\n const insertions = (await fetchInsertions(lapisUrl, this.filter, this.sequenceType, signal)).data;\n\n const content: InsertionEntry[] = insertions.map(({ count, insertedSymbols, sequenceName, position }) => ({\n type: 'insertion',\n mutation: new Insertion(sequenceName ?? undefined, position, insertedSymbols),\n count,\n }));\n\n return { content };\n }\n}\n","import { FetchInsertionsOperator } from '../operator/FetchInsertionsOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type SequenceType } from '../types';\n\nexport function queryInsertions(variant: LapisFilter, sequenceType: SequenceType, lapis: string, signal?: AbortSignal) {\n const fetchData = new FetchInsertionsOperator(variant, sequenceType);\n const sortData = new SortOperator(fetchData, (a, b) => {\n if (a.mutation.segment !== b.mutation.segment) {\n return (a.mutation.segment ?? '').localeCompare(b.mutation.segment ?? '');\n }\n return a.mutation.position - b.mutation.position;\n });\n return sortData.evaluate(lapis, signal);\n}\n","import { queryInsertions } from '../../query/queryInsertions';\nimport { querySubstitutionsOrDeletions } from '../../query/querySubstitutionsOrDeletions';\nimport {\n type InsertionEntry,\n type LapisFilter,\n type MutationEntry,\n type SubstitutionOrDeletionEntry,\n} from '../../types';\nimport { type DisplayedSegment } from '../components/SegmentSelector';\nimport { type DisplayedMutationType } from '../components/mutation-type-selector';\n\nexport async function queryMutationsData(\n variant: LapisFilter,\n sequenceType: 'nucleotide' | 'amino acid',\n lapis: string,\n) {\n const substitutionsOrDeletions = (await querySubstitutionsOrDeletions(variant, sequenceType, lapis)).content;\n const insertions = (await queryInsertions(variant, sequenceType, lapis)).content;\n\n return {\n substitutionsOrDeletions,\n insertions,\n };\n}\n\nexport function filterMutationsData(\n data: { insertions: InsertionEntry[]; substitutionsOrDeletions: SubstitutionOrDeletionEntry[] },\n displayedSegments: DisplayedSegment[],\n displayedMutationTypes: DisplayedMutationType[],\n) {\n function bySelectedSegments(mutationEntry: MutationEntry) {\n if (mutationEntry.mutation.segment === undefined) {\n return true;\n }\n return displayedSegments.some(\n (displayedSegment) =>\n displayedSegment.segment === mutationEntry.mutation.segment && displayedSegment.checked,\n );\n }\n\n const byDisplayedMutationTypes = (mutationEntry: SubstitutionOrDeletionEntry) => {\n return displayedMutationTypes.some(\n (displayedMutationType) =>\n displayedMutationType.checked && displayedMutationType.type === mutationEntry.type,\n );\n };\n\n const filteredSubstitutionsOrDeletions = data.substitutionsOrDeletions.filter(bySelectedSegments);\n\n return {\n insertions: data.insertions.filter(bySelectedSegments),\n tableData: filteredSubstitutionsOrDeletions.filter(byDisplayedMutationTypes),\n gridData: filteredSubstitutionsOrDeletions,\n };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type Dispatch, type StateUpdater, useContext, useState } from 'preact/hooks';\n\nimport { getInsertionsTableData } from './getInsertionsTableData';\nimport { getMutationsTableData } from './getMutationsTableData';\nimport { MutationsGrid } from './mutations-grid';\nimport { InsertionsTable } from './mutations-insertions-table';\nimport MutationsTable from './mutations-table';\nimport { filterMutationsData, queryMutationsData } from './queryMutations';\nimport {\n type InsertionEntry,\n type LapisFilter,\n type SequenceType,\n type SubstitutionOrDeletionEntry,\n} from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { type DisplayedSegment, SegmentSelector, useDisplayedSegments } from '../components/SegmentSelector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { type DisplayedMutationType, MutationTypeSelector } from '../components/mutation-type-selector';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport type { ProportionInterval } from '../components/proportion-selector';\nimport { ProportionSelectorDropdown } from '../components/proportion-selector-dropdown';\nimport Tabs from '../components/tabs';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'table' | 'grid' | 'insertions';\n\nexport interface MutationsProps {\n variant: LapisFilter;\n sequenceType: SequenceType;\n views: View[];\n}\n\nexport const Mutations: FunctionComponent<MutationsProps> = ({ variant, sequenceType, views }) => {\n const lapis = useContext(LapisUrlContext);\n const { data, error, isLoading } = useQuery(async () => {\n return queryMutationsData(variant, sequenceType, lapis);\n }, [variant, sequenceType, lapis]);\n\n const headline = 'Mutations';\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <MutationsTabs mutationsData={data} sequenceType={sequenceType} views={views} />\n </Headline>\n );\n};\n\ntype MutationTabsProps = {\n mutationsData: { insertions: InsertionEntry[]; substitutionsOrDeletions: SubstitutionOrDeletionEntry[] };\n sequenceType: SequenceType;\n views: View[];\n};\n\nconst MutationsTabs: FunctionComponent<MutationTabsProps> = ({ mutationsData, sequenceType, views }) => {\n const [proportionInterval, setProportionInterval] = useState({ min: 0.05, max: 1 });\n\n const [displayedSegments, setDisplayedSegments] = useDisplayedSegments(sequenceType);\n const [displayedMutationTypes, setDisplayedMutationTypes] = useState<DisplayedMutationType[]>([\n { label: 'Substitutions', checked: true, type: 'substitution' },\n { label: 'Deletions', checked: true, type: 'deletion' },\n ]);\n\n const filteredData = filterMutationsData(mutationsData, displayedSegments, displayedMutationTypes);\n\n const getTab = (view: View) => {\n switch (view) {\n case 'table':\n return {\n title: 'Table',\n content: <MutationsTable data={filteredData.tableData} proportionInterval={proportionInterval} />,\n };\n case 'grid':\n return {\n title: 'Grid',\n content: (\n <MutationsGrid\n data={filteredData.gridData}\n sequenceType={sequenceType}\n proportionInterval={proportionInterval}\n />\n ),\n };\n case 'insertions':\n return {\n title: 'Insertions',\n content: <InsertionsTable data={filteredData.insertions} />,\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n const toolbar = (activeTab: string) => (\n <Toolbar\n activeTab={activeTab}\n displayedSegments={displayedSegments}\n setDisplayedSegments={setDisplayedSegments}\n displayedMutationTypes={displayedMutationTypes}\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n filteredData={filteredData}\n proportionInterval={proportionInterval}\n setProportionInterval={setProportionInterval}\n />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype ToolbarProps = {\n activeTab: string;\n displayedSegments: DisplayedSegment[];\n setDisplayedSegments: (segments: DisplayedSegment[]) => void;\n displayedMutationTypes: DisplayedMutationType[];\n setDisplayedMutationTypes: (types: DisplayedMutationType[]) => void;\n filteredData: { tableData: SubstitutionOrDeletionEntry[]; insertions: InsertionEntry[] };\n proportionInterval: ProportionInterval;\n setProportionInterval: Dispatch<StateUpdater<ProportionInterval>>;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n activeTab,\n displayedSegments,\n setDisplayedSegments,\n displayedMutationTypes,\n setDisplayedMutationTypes,\n filteredData,\n proportionInterval,\n setProportionInterval,\n}) => {\n return (\n <div class='flex flex-row'>\n <SegmentSelector displayedSegments={displayedSegments} setDisplayedSegments={setDisplayedSegments} />\n {activeTab === 'Table' && (\n <MutationTypeSelector\n setDisplayedMutationTypes={setDisplayedMutationTypes}\n displayedMutationTypes={displayedMutationTypes}\n />\n )}\n {(activeTab === 'Table' || activeTab === 'Grid') && (\n <>\n <ProportionSelectorDropdown\n proportionInterval={proportionInterval}\n setMinProportion={(min) => setProportionInterval((prev) => ({ ...prev, min }))}\n setMaxProportion={(max) => setProportionInterval((prev) => ({ ...prev, max }))}\n openDirection={'left'}\n />\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getMutationsTableData(filteredData.tableData, proportionInterval)}\n filename='substitutionsAndDeletions.csv'\n />\n </>\n )}\n {activeTab === 'Insertions' && (\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getInsertionsTableData(filteredData.insertions)}\n filename='insertions.csv'\n />\n )}\n <Info className='mx-1' content='Info for mutations' />\n </div>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { Mutations, type View } from '../../preact/mutations/mutations';\nimport { type LapisFilter, type SequenceType } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-mutations-component')\nexport class MutationsComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Object })\n variant: LapisFilter = { displayName: '' };\n\n @property({ type: String })\n sequenceType: SequenceType = 'nucleotide';\n\n @property({ type: Array })\n views: View[] = ['table', 'grid'];\n\n override render() {\n return <Mutations variant={this.variant} sequenceType={this.sequenceType} views={this.views} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutations-component': MutationsComponent;\n }\n}\n","import { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { type TemporalGranularity } from '../../types';\n\nexport function getPrevalenceOverTimeTableData(data: PrevalenceOverTimeData, granularity: TemporalGranularity) {\n return data[0].content.map((row, rowNumber) => {\n const otherColumns = data\n .map((dataset) => ({\n [`${dataset.displayName} prevalence`]: dataset.content[rowNumber].prevalence.toFixed(4),\n [`${dataset.displayName} count`]: dataset.content[rowNumber].count,\n }))\n .reduce((acc, val) => ({ ...acc, ...val }), {});\n\n return {\n [granularity]: row.dateRange?.toString() ?? 'Unknown',\n ...otherColumns,\n };\n });\n}\n","import { type Chart, type CoreScaleOptions, Scale } from 'chart.js';\n\nexport class LogitScale extends Scale {\n static id = 'logit';\n\n constructor(cfg: { id: string; type: string; ctx: CanvasRenderingContext2D; chart: Chart }) {\n super(cfg);\n this.min = 0.001;\n this.max = 0.999;\n }\n\n override buildTicks() {\n const tickValues = [this.min, 0.01, 0.1, 0.5, 0.9, 0.99, this.max];\n\n this.ticks = tickValues.map((value) => ({ value }));\n return this.ticks;\n }\n\n getLogit(value: number): number {\n if (value <= 0) {\n return -Infinity;\n }\n if (value >= 1) {\n return Infinity;\n }\n\n return Math.log(value / (1 - value));\n }\n\n override getPixelForValue(value: number): number {\n const logitMin = this.getLogit(this.min);\n const logitMax = this.getLogit(this.max);\n\n const logitValue = this.getLogit(value);\n\n const decimal = (logitValue - logitMin) / (logitMax - logitMin);\n\n return this.getPixelForDecimal(decimal);\n }\n}\n\ndeclare module 'chart.js' {\n export interface CartesianScaleTypeRegistry {\n logit: {\n options: CoreScaleOptions;\n };\n }\n}\n","// colorblind friendly colors taken from https://personal.sron.nl/~pault/\n\nconst ColorsRGB = {\n indigo: [51, 34, 136],\n green: [17, 119, 51],\n cyan: [136, 204, 238],\n teal: [68, 170, 153],\n olive: [153, 153, 51],\n sand: [221, 204, 119],\n rose: [204, 102, 119],\n wine: [136, 34, 85],\n purple: [170, 68, 153],\n};\n\ntype GraphColor = keyof typeof ColorsRGB;\n\nexport const singleGraphColorRGBAById = (id: number, alpha = 1) => {\n const keys = Object.keys(ColorsRGB) as GraphColor[];\n const key = keys[id % keys.length];\n\n return `rgba(${ColorsRGB[key].join(',')},${alpha})`;\n};\n\nexport const singleGraphColorRGBByName = (name: GraphColor, alpha = 1) => {\n return `rgba(${ColorsRGB[name].join(',')},${alpha})`;\n};\n","// calculateWilsonInterval calculates the Wilson score interval for 95% confidence.\n//\n// This function is based on https://github.com/erikfox/wilson-interval, but without\n// high precision math.\n//\n// observed - number of observed positive outcomes\n// sample - number of experiments or size of the sample\nexport function wilson95PercentConfidenceInterval(observed: number, sample: number) {\n const p = observed / sample;\n const n = sample;\n const z = 1.9599639715843482;\n\n const numerator = p + (z * z) / (2 * n);\n const w_plus_minus = z * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * (n * n)));\n const denominator = 1 + (z * z) / n;\n\n return {\n lowerLimit: (numerator - w_plus_minus) / denominator,\n upperLimit: (numerator + w_plus_minus) / denominator,\n };\n}\n\nexport const confidenceIntervalDataLabel = (value: number, lowerLimit: number, upperLimit: number, prefix?: string) => {\n const label = prefix ? `${prefix}: ` : '';\n\n return `${label}${value.toFixed(3)} (${lowerLimit.toFixed(3)} - ${upperLimit.toFixed(3)})`;\n};\n\nexport type ConfidenceIntervalMethod = 'wilson' | 'none';\n","export type ScaleType = 'linear' | 'logarithmic' | 'logit';\n\nexport function getYAxisScale(scaleType: ScaleType) {\n switch (scaleType) {\n case 'linear': {\n return { beginAtZero: true, type: 'linear' as const, min: 0, max: 1 };\n }\n case 'logarithmic': {\n return { type: 'logarithmic' as const };\n }\n case 'logit':\n return { type: 'logit' as const };\n default:\n return { beginAtZero: true, type: 'linear' as const };\n }\n}\n","import { Chart, type ChartConfiguration, registerables, type TooltipItem } from 'chart.js';\nimport { BarWithErrorBar, BarWithErrorBarsController } from 'chartjs-chart-error-bars';\n\nimport { type PrevalenceOverTimeData, type PrevalenceOverTimeVariantData } from '../../query/queryPrevalenceOverTime';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport { type ConfidenceIntervalMethod, wilson95PercentConfidenceInterval } from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeBarChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n}\n\nChart.register(...registerables, LogitScale, BarWithErrorBarsController, BarWithErrorBar);\n\nconst PrevalenceOverTimeBarChart = ({\n data,\n yAxisScaleType,\n confidenceIntervalMethod,\n}: PrevalenceOverTimeBarChartProps) => {\n const config: ChartConfiguration = {\n type: BarWithErrorBarsController.id,\n data: {\n labels: data[0]?.content.map((dateRange) => dateRange.dateRange?.toString() ?? 'Unknown') || [],\n datasets: data.map((graphData, index) => datasets(graphData, index, confidenceIntervalMethod)),\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(confidenceIntervalMethod),\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nconst datasets = (\n prevalenceOverTimeVariant: PrevalenceOverTimeVariantData,\n index: number,\n confidenceIntervalMethod: ConfidenceIntervalMethod,\n) => {\n const generalConfig = {\n borderWidth: 1,\n pointRadius: 0,\n label: prevalenceOverTimeVariant.displayName,\n backgroundColor: singleGraphColorRGBAById(index, 0.3),\n borderColor: singleGraphColorRGBAById(index),\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => ({\n y: dataPoint.prevalence,\n yMin: wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).lowerLimit,\n yMax: wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).upperLimit,\n })),\n };\n default:\n return {\n ...generalConfig,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => dataPoint.prevalence),\n };\n }\n};\n\nconst tooltip = (confidenceIntervalMethod: ConfidenceIntervalMethod) => {\n const generalConfig = {\n mode: 'index' as const,\n intersect: false,\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n callbacks: {\n label: (context: TooltipItem<'barWithErrorBars'>) => {\n const value = context.dataset.data[context.dataIndex] as {\n y: number;\n yMin: number;\n yMax: number;\n };\n\n return `${context.dataset.label}: ${value.y.toFixed(3)} (${value.yMin.toFixed(3)} - ${value.yMax.toFixed(3)})`;\n },\n },\n };\n default:\n return generalConfig;\n }\n};\n\nexport default PrevalenceOverTimeBarChart;\n","export var SECONDS_A_MINUTE = 60;\nexport var SECONDS_A_HOUR = SECONDS_A_MINUTE * 60;\nexport var SECONDS_A_DAY = SECONDS_A_HOUR * 24;\nexport var SECONDS_A_WEEK = SECONDS_A_DAY * 7;\nexport var MILLISECONDS_A_SECOND = 1e3;\nexport var MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND; // English locales\n\nexport var MS = 'millisecond';\nexport var S = 'second';\nexport var MIN = 'minute';\nexport var H = 'hour';\nexport var D = 'day';\nexport var W = 'week';\nexport var M = 'month';\nexport var Q = 'quarter';\nexport var Y = 'year';\nexport var DATE = 'date';\nexport var FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ';\nexport var INVALID_DATE_STRING = 'Invalid Date'; // regex\n\nexport var REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nexport var REGEX_FORMAT = /\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;","// English [en]\n// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale\nexport default {\n name: 'en',\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n ordinal: function ordinal(n) {\n var s = ['th', 'st', 'nd', 'rd'];\n var v = n % 100;\n return \"[\" + n + (s[(v - 20) % 10] || s[v] || s[0]) + \"]\";\n }\n};","import * as C from './constant';\n\nvar padStart = function padStart(string, length, pad) {\n var s = String(string);\n if (!s || s.length >= length) return string;\n return \"\" + Array(length + 1 - s.length).join(pad) + string;\n};\n\nvar padZoneStr = function padZoneStr(instance) {\n var negMinutes = -instance.utcOffset();\n var minutes = Math.abs(negMinutes);\n var hourOffset = Math.floor(minutes / 60);\n var minuteOffset = minutes % 60;\n return \"\" + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + \":\" + padStart(minuteOffset, 2, '0');\n};\n\nvar monthDiff = function monthDiff(a, b) {\n // function from moment.js in order to keep the same result\n if (a.date() < b.date()) return -monthDiff(b, a);\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month());\n var anchor = a.clone().add(wholeMonthDiff, C.M);\n var c = b - anchor < 0;\n var anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M);\n return +(-(wholeMonthDiff + (b - anchor) / (c ? anchor - anchor2 : anchor2 - anchor)) || 0);\n};\n\nvar absFloor = function absFloor(n) {\n return n < 0 ? Math.ceil(n) || 0 : Math.floor(n);\n};\n\nvar prettyUnit = function prettyUnit(u) {\n var special = {\n M: C.M,\n y: C.Y,\n w: C.W,\n d: C.D,\n D: C.DATE,\n h: C.H,\n m: C.MIN,\n s: C.S,\n ms: C.MS,\n Q: C.Q\n };\n return special[u] || String(u || '').toLowerCase().replace(/s$/, '');\n};\n\nvar isUndefined = function isUndefined(s) {\n return s === undefined;\n};\n\nexport default {\n s: padStart,\n z: padZoneStr,\n m: monthDiff,\n a: absFloor,\n p: prettyUnit,\n u: isUndefined\n};","import * as C from './constant';\nimport en from './locale/en';\nimport U from './utils';\nvar L = 'en'; // global locale\n\nvar Ls = {}; // global loaded locale\n\nLs[L] = en;\nvar IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define\n\nvar isDayjs = function isDayjs(d) {\n return d instanceof Dayjs || !!(d && d[IS_DAYJS]);\n};\n\nvar parseLocale = function parseLocale(preset, object, isLocal) {\n var l;\n if (!preset) return L;\n\n if (typeof preset === 'string') {\n var presetLower = preset.toLowerCase();\n\n if (Ls[presetLower]) {\n l = presetLower;\n }\n\n if (object) {\n Ls[presetLower] = object;\n l = presetLower;\n }\n\n var presetSplit = preset.split('-');\n\n if (!l && presetSplit.length > 1) {\n return parseLocale(presetSplit[0]);\n }\n } else {\n var name = preset.name;\n Ls[name] = preset;\n l = name;\n }\n\n if (!isLocal && l) L = l;\n return l || !isLocal && L;\n};\n\nvar dayjs = function dayjs(date, c) {\n if (isDayjs(date)) {\n return date.clone();\n } // eslint-disable-next-line no-nested-ternary\n\n\n var cfg = typeof c === 'object' ? c : {};\n cfg.date = date;\n cfg.args = arguments; // eslint-disable-line prefer-rest-params\n\n return new Dayjs(cfg); // eslint-disable-line no-use-before-define\n};\n\nvar wrapper = function wrapper(date, instance) {\n return dayjs(date, {\n locale: instance.$L,\n utc: instance.$u,\n x: instance.$x,\n $offset: instance.$offset // todo: refactor; do not use this.$offset in you code\n\n });\n};\n\nvar Utils = U; // for plugin use\n\nUtils.l = parseLocale;\nUtils.i = isDayjs;\nUtils.w = wrapper;\n\nvar parseDate = function parseDate(cfg) {\n var date = cfg.date,\n utc = cfg.utc;\n if (date === null) return new Date(NaN); // null is invalid\n\n if (Utils.u(date)) return new Date(); // today\n\n if (date instanceof Date) return new Date(date);\n\n if (typeof date === 'string' && !/Z$/i.test(date)) {\n var d = date.match(C.REGEX_PARSE);\n\n if (d) {\n var m = d[2] - 1 || 0;\n var ms = (d[7] || '0').substring(0, 3);\n\n if (utc) {\n return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms));\n }\n\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n\n return new Date(date); // everything else\n};\n\nvar Dayjs = /*#__PURE__*/function () {\n function Dayjs(cfg) {\n this.$L = parseLocale(cfg.locale, null, true);\n this.parse(cfg); // for plugin\n\n this.$x = this.$x || cfg.x || {};\n this[IS_DAYJS] = true;\n }\n\n var _proto = Dayjs.prototype;\n\n _proto.parse = function parse(cfg) {\n this.$d = parseDate(cfg);\n this.init();\n };\n\n _proto.init = function init() {\n var $d = this.$d;\n this.$y = $d.getFullYear();\n this.$M = $d.getMonth();\n this.$D = $d.getDate();\n this.$W = $d.getDay();\n this.$H = $d.getHours();\n this.$m = $d.getMinutes();\n this.$s = $d.getSeconds();\n this.$ms = $d.getMilliseconds();\n } // eslint-disable-next-line class-methods-use-this\n ;\n\n _proto.$utils = function $utils() {\n return Utils;\n };\n\n _proto.isValid = function isValid() {\n return !(this.$d.toString() === C.INVALID_DATE_STRING);\n };\n\n _proto.isSame = function isSame(that, units) {\n var other = dayjs(that);\n return this.startOf(units) <= other && other <= this.endOf(units);\n };\n\n _proto.isAfter = function isAfter(that, units) {\n return dayjs(that) < this.startOf(units);\n };\n\n _proto.isBefore = function isBefore(that, units) {\n return this.endOf(units) < dayjs(that);\n };\n\n _proto.$g = function $g(input, get, set) {\n if (Utils.u(input)) return this[get];\n return this.set(set, input);\n };\n\n _proto.unix = function unix() {\n return Math.floor(this.valueOf() / 1000);\n };\n\n _proto.valueOf = function valueOf() {\n // timezone(hour) * 60 * 60 * 1000 => ms\n return this.$d.getTime();\n };\n\n _proto.startOf = function startOf(units, _startOf) {\n var _this = this;\n\n // startOf -> endOf\n var isStartOf = !Utils.u(_startOf) ? _startOf : true;\n var unit = Utils.p(units);\n\n var instanceFactory = function instanceFactory(d, m) {\n var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this);\n return isStartOf ? ins : ins.endOf(C.D);\n };\n\n var instanceFactorySet = function instanceFactorySet(method, slice) {\n var argumentStart = [0, 0, 0, 0];\n var argumentEnd = [23, 59, 59, 999];\n return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread\n _this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this);\n };\n\n var $W = this.$W,\n $M = this.$M,\n $D = this.$D;\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n\n switch (unit) {\n case C.Y:\n return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11);\n\n case C.M:\n return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1);\n\n case C.W:\n {\n var weekStart = this.$locale().weekStart || 0;\n var gap = ($W < weekStart ? $W + 7 : $W) - weekStart;\n return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M);\n }\n\n case C.D:\n case C.DATE:\n return instanceFactorySet(utcPad + \"Hours\", 0);\n\n case C.H:\n return instanceFactorySet(utcPad + \"Minutes\", 1);\n\n case C.MIN:\n return instanceFactorySet(utcPad + \"Seconds\", 2);\n\n case C.S:\n return instanceFactorySet(utcPad + \"Milliseconds\", 3);\n\n default:\n return this.clone();\n }\n };\n\n _proto.endOf = function endOf(arg) {\n return this.startOf(arg, false);\n };\n\n _proto.$set = function $set(units, _int) {\n var _C$D$C$DATE$C$M$C$Y$C;\n\n // private set\n var unit = Utils.p(units);\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + \"Month\", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + \"FullYear\", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + \"Hours\", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + \"Minutes\", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + \"Seconds\", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + \"Milliseconds\", _C$D$C$DATE$C$M$C$Y$C)[unit];\n var arg = unit === C.D ? this.$D + (_int - this.$W) : _int;\n\n if (unit === C.M || unit === C.Y) {\n // clone is for badMutable plugin\n var date = this.clone().set(C.DATE, 1);\n date.$d[name](arg);\n date.init();\n this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d;\n } else if (name) this.$d[name](arg);\n\n this.init();\n return this;\n };\n\n _proto.set = function set(string, _int2) {\n return this.clone().$set(string, _int2);\n };\n\n _proto.get = function get(unit) {\n return this[Utils.p(unit)]();\n };\n\n _proto.add = function add(number, units) {\n var _this2 = this,\n _C$MIN$C$H$C$S$unit;\n\n number = Number(number); // eslint-disable-line no-param-reassign\n\n var unit = Utils.p(units);\n\n var instanceFactorySet = function instanceFactorySet(n) {\n var d = dayjs(_this2);\n return Utils.w(d.date(d.date() + Math.round(n * number)), _this2);\n };\n\n if (unit === C.M) {\n return this.set(C.M, this.$M + number);\n }\n\n if (unit === C.Y) {\n return this.set(C.Y, this.$y + number);\n }\n\n if (unit === C.D) {\n return instanceFactorySet(1);\n }\n\n if (unit === C.W) {\n return instanceFactorySet(7);\n }\n\n var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms\n\n var nextTimeStamp = this.$d.getTime() + number * step;\n return Utils.w(nextTimeStamp, this);\n };\n\n _proto.subtract = function subtract(number, string) {\n return this.add(number * -1, string);\n };\n\n _proto.format = function format(formatStr) {\n var _this3 = this;\n\n var locale = this.$locale();\n if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING;\n var str = formatStr || C.FORMAT_DEFAULT;\n var zoneStr = Utils.z(this);\n var $H = this.$H,\n $m = this.$m,\n $M = this.$M;\n var weekdays = locale.weekdays,\n months = locale.months,\n meridiem = locale.meridiem;\n\n var getShort = function getShort(arr, index, full, length) {\n return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length);\n };\n\n var get$H = function get$H(num) {\n return Utils.s($H % 12 || 12, num, '0');\n };\n\n var meridiemFunc = meridiem || function (hour, minute, isLowercase) {\n var m = hour < 12 ? 'AM' : 'PM';\n return isLowercase ? m.toLowerCase() : m;\n };\n\n var matches = function matches(match) {\n switch (match) {\n case 'YY':\n return String(_this3.$y).slice(-2);\n\n case 'YYYY':\n return Utils.s(_this3.$y, 4, '0');\n\n case 'M':\n return $M + 1;\n\n case 'MM':\n return Utils.s($M + 1, 2, '0');\n\n case 'MMM':\n return getShort(locale.monthsShort, $M, months, 3);\n\n case 'MMMM':\n return getShort(months, $M);\n\n case 'D':\n return _this3.$D;\n\n case 'DD':\n return Utils.s(_this3.$D, 2, '0');\n\n case 'd':\n return String(_this3.$W);\n\n case 'dd':\n return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2);\n\n case 'ddd':\n return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3);\n\n case 'dddd':\n return weekdays[_this3.$W];\n\n case 'H':\n return String($H);\n\n case 'HH':\n return Utils.s($H, 2, '0');\n\n case 'h':\n return get$H(1);\n\n case 'hh':\n return get$H(2);\n\n case 'a':\n return meridiemFunc($H, $m, true);\n\n case 'A':\n return meridiemFunc($H, $m, false);\n\n case 'm':\n return String($m);\n\n case 'mm':\n return Utils.s($m, 2, '0');\n\n case 's':\n return String(_this3.$s);\n\n case 'ss':\n return Utils.s(_this3.$s, 2, '0');\n\n case 'SSS':\n return Utils.s(_this3.$ms, 3, '0');\n\n case 'Z':\n return zoneStr;\n // 'ZZ' logic below\n\n default:\n break;\n }\n\n return null;\n };\n\n return str.replace(C.REGEX_FORMAT, function (match, $1) {\n return $1 || matches(match) || zoneStr.replace(':', '');\n }); // 'ZZ'\n };\n\n _proto.utcOffset = function utcOffset() {\n // Because a bug at FF24, we're rounding the timezone offset around 15 minutes\n // https://github.com/moment/moment/pull/1871\n return -Math.round(this.$d.getTimezoneOffset() / 15) * 15;\n };\n\n _proto.diff = function diff(input, units, _float) {\n var _this4 = this;\n\n var unit = Utils.p(units);\n var that = dayjs(input);\n var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE;\n var diff = this - that;\n\n var getMonth = function getMonth() {\n return Utils.m(_this4, that);\n };\n\n var result;\n\n switch (unit) {\n case C.Y:\n result = getMonth() / 12;\n break;\n\n case C.M:\n result = getMonth();\n break;\n\n case C.Q:\n result = getMonth() / 3;\n break;\n\n case C.W:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK;\n break;\n\n case C.D:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY;\n break;\n\n case C.H:\n result = diff / C.MILLISECONDS_A_HOUR;\n break;\n\n case C.MIN:\n result = diff / C.MILLISECONDS_A_MINUTE;\n break;\n\n case C.S:\n result = diff / C.MILLISECONDS_A_SECOND;\n break;\n\n default:\n result = diff; // milliseconds\n\n break;\n }\n\n return _float ? result : Utils.a(result);\n };\n\n _proto.daysInMonth = function daysInMonth() {\n return this.endOf(C.M).$D;\n };\n\n _proto.$locale = function $locale() {\n // get locale object\n return Ls[this.$L];\n };\n\n _proto.locale = function locale(preset, object) {\n if (!preset) return this.$L;\n var that = this.clone();\n var nextLocaleName = parseLocale(preset, object, true);\n if (nextLocaleName) that.$L = nextLocaleName;\n return that;\n };\n\n _proto.clone = function clone() {\n return Utils.w(this.$d, this);\n };\n\n _proto.toDate = function toDate() {\n return new Date(this.valueOf());\n };\n\n _proto.toJSON = function toJSON() {\n return this.isValid() ? this.toISOString() : null;\n };\n\n _proto.toISOString = function toISOString() {\n // ie 8 return\n // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)\n // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')\n return this.$d.toISOString();\n };\n\n _proto.toString = function toString() {\n return this.$d.toUTCString();\n };\n\n return Dayjs;\n}();\n\nvar proto = Dayjs.prototype;\ndayjs.prototype = proto;\n[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) {\n proto[g[1]] = function (input) {\n return this.$g(input, g[0], g[1]);\n };\n});\n\ndayjs.extend = function (plugin, option) {\n if (!plugin.$i) {\n // install plugin only once\n plugin(option, Dayjs, dayjs);\n plugin.$i = true;\n }\n\n return dayjs;\n};\n\ndayjs.locale = parseLocale;\ndayjs.isDayjs = isDayjs;\n\ndayjs.unix = function (timestamp) {\n return dayjs(timestamp * 1e3);\n};\n\ndayjs.en = Ls[L];\ndayjs.Ls = Ls;\ndayjs.p = {};\nexport default dayjs;","import { FORMAT_DEFAULT } from '../../constant';\nexport default (function (o, c) {\n // locale needed later\n var proto = c.prototype;\n var oldFormat = proto.format;\n\n proto.format = function (formatStr) {\n var _this = this;\n\n var locale = this.$locale();\n\n if (!this.isValid()) {\n return oldFormat.bind(this)(formatStr);\n }\n\n var utils = this.$utils();\n var str = formatStr || FORMAT_DEFAULT;\n var result = str.replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function (match) {\n switch (match) {\n case 'Q':\n return Math.ceil((_this.$M + 1) / 3);\n\n case 'Do':\n return locale.ordinal(_this.$D);\n\n case 'gggg':\n return _this.weekYear();\n\n case 'GGGG':\n return _this.isoWeekYear();\n\n case 'wo':\n return locale.ordinal(_this.week(), 'W');\n // W for week\n\n case 'w':\n case 'ww':\n return utils.s(_this.week(), match === 'w' ? 1 : 2, '0');\n\n case 'W':\n case 'WW':\n return utils.s(_this.isoWeek(), match === 'W' ? 1 : 2, '0');\n\n case 'k':\n case 'kk':\n return utils.s(String(_this.$H === 0 ? 24 : _this.$H), match === 'k' ? 1 : 2, '0');\n\n case 'X':\n return Math.floor(_this.$d.getTime() / 1000);\n\n case 'x':\n return _this.$d.getTime();\n\n case 'z':\n return \"[\" + _this.offsetName() + \"]\";\n\n case 'zzz':\n return \"[\" + _this.offsetName('long') + \"]\";\n\n default:\n return match;\n }\n });\n return oldFormat.bind(this)(result);\n };\n});","import { D, W, Y } from '../../constant';\nvar isoWeekPrettyUnit = 'isoweek';\nexport default (function (o, c, d) {\n var getYearFirstThursday = function getYearFirstThursday(year, isUtc) {\n var yearFirstDay = (isUtc ? d.utc : d)().year(year).startOf(Y);\n var addDiffDays = 4 - yearFirstDay.isoWeekday();\n\n if (yearFirstDay.isoWeekday() > 4) {\n addDiffDays += 7;\n }\n\n return yearFirstDay.add(addDiffDays, D);\n };\n\n var getCurrentWeekThursday = function getCurrentWeekThursday(ins) {\n return ins.add(4 - ins.isoWeekday(), D);\n };\n\n var proto = c.prototype;\n\n proto.isoWeekYear = function () {\n var nowWeekThursday = getCurrentWeekThursday(this);\n return nowWeekThursday.year();\n };\n\n proto.isoWeek = function (week) {\n if (!this.$utils().u(week)) {\n return this.add((week - this.isoWeek()) * 7, D);\n }\n\n var nowWeekThursday = getCurrentWeekThursday(this);\n var diffWeekThursday = getYearFirstThursday(this.isoWeekYear(), this.$u);\n return nowWeekThursday.diff(diffWeekThursday, W) + 1;\n };\n\n proto.isoWeekday = function (week) {\n if (!this.$utils().u(week)) {\n return this.day(this.day() % 7 ? week : week - 7);\n }\n\n return this.day() || 7;\n };\n\n var oldStartOf = proto.startOf;\n\n proto.startOf = function (units, startOf) {\n var utils = this.$utils();\n var isStartOf = !utils.u(startOf) ? startOf : true;\n var unit = utils.p(units);\n\n if (unit === isoWeekPrettyUnit) {\n return isStartOf ? this.date(this.date() - (this.isoWeekday() - 1)).startOf('day') : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf('day');\n }\n\n return oldStartOf.bind(this)(units, startOf);\n };\n});","import dayjs from 'dayjs/esm';\nimport advancedFormat from 'dayjs/esm/plugin/advancedFormat';\nimport isoWeek from 'dayjs/esm/plugin/isoWeek';\n\ndayjs.extend(isoWeek);\ndayjs.extend(advancedFormat);\n\nexport class TemporalCache {\n private yearMonthDayCache = new Map<string, YearMonthDay>();\n private yearWeekCache = new Map<string, YearWeek>();\n private yearMonthCache = new Map<string, YearMonth>();\n private yearCache = new Map<string, Year>();\n\n private constructor() {}\n\n getYearMonthDay(s: string): YearMonthDay {\n if (!this.yearMonthDayCache.has(s)) {\n this.yearMonthDayCache.set(s, YearMonthDay.parse(s, this));\n }\n return this.yearMonthDayCache.get(s)!;\n }\n\n getYearMonth(s: string): YearMonth {\n if (!this.yearMonthCache.has(s)) {\n this.yearMonthCache.set(s, YearMonth.parse(s, this));\n }\n return this.yearMonthCache.get(s)!;\n }\n\n getYearWeek(s: string): YearWeek {\n if (!this.yearWeekCache.has(s)) {\n this.yearWeekCache.set(s, YearWeek.parse(s, this));\n }\n return this.yearWeekCache.get(s)!;\n }\n\n getYear(s: string): Year {\n if (!this.yearCache.has(s)) {\n this.yearCache.set(s, Year.parse(s, this));\n }\n return this.yearCache.get(s)!;\n }\n\n private static instance = new TemporalCache();\n\n static getInstance(): TemporalCache {\n return this.instance;\n }\n}\n\nexport class YearMonthDay {\n readonly date;\n readonly dayjs;\n\n constructor(\n readonly yearNumber: number,\n readonly monthNumber: number,\n readonly dayNumber: number,\n readonly cache: TemporalCache,\n ) {\n this.date = new Date(this.yearNumber, this.monthNumber - 1, this.dayNumber);\n this.dayjs = dayjs(this.date);\n }\n\n get text(): string {\n return this.dayjs.format('YYYY-MM-DD');\n }\n\n toString(): string {\n return this.text;\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.yearNumber}`);\n }\n\n get month(): YearMonth {\n return this.cache.getYearMonth(this.dayjs.format('YYYY-MM'));\n }\n\n get week(): YearWeek {\n return this.cache.getYearWeek(this.dayjs.format('GGGG-WW'));\n }\n\n addDays(days: number): YearMonthDay {\n const date = this.dayjs.add(days, 'day');\n const s = date.format('YYYY-MM-DD');\n return this.cache.getYearMonthDay(s);\n }\n\n minus(other: YearMonthDay): number {\n return this.dayjs.diff(other.dayjs, 'day');\n }\n\n static parse(s: string, cache: TemporalCache): YearMonthDay {\n const [year, month, day] = s.split('-').map((s) => parseInt(s, 10));\n return new YearMonthDay(year, month, day, cache);\n }\n}\n\nexport class YearWeek {\n constructor(\n readonly isoYearNumber: number,\n readonly isoWeekNumber: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY-WW');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstDay(): YearMonthDay {\n // \"The first week of the year, hence, always contains 4 January.\" https://en.wikipedia.org/wiki/ISO_week_date\n const firstDay = dayjs()\n .year(this.isoYearNumber)\n .month(1)\n .date(4)\n .isoWeek(this.isoWeekNumber)\n .startOf('isoWeek');\n return this.cache.getYearMonthDay(firstDay.format('YYYY-MM-DD'));\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.isoYearNumber}`);\n }\n\n addWeeks(weeks: number): YearWeek {\n const date = this.firstDay.dayjs.add(weeks, 'week');\n const s = date.format('YYYY-WW');\n return this.cache.getYearWeek(s);\n }\n\n minus(other: YearWeek): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'week');\n }\n\n static parse(s: string, cache: TemporalCache): YearWeek {\n const [year, week] = s.split('-').map((s) => parseInt(s, 10));\n return new YearWeek(year, week, cache);\n }\n}\n\nexport class YearMonth {\n constructor(\n readonly yearNumber: number,\n readonly monthNumber: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY-MM');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstDay(): YearMonthDay {\n return this.cache.getYearMonthDay(dayjs(`${this.yearNumber}-${this.monthNumber}-01`).format('YYYY-MM-DD'));\n }\n\n get year(): Year {\n return this.cache.getYear(`${this.yearNumber}`);\n }\n\n addMonths(months: number): YearMonth {\n const date = this.firstDay.dayjs.add(months, 'month');\n const s = date.format('YYYY-MM');\n return this.cache.getYearMonth(s);\n }\n\n minus(other: YearMonth): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'month');\n }\n\n static parse(s: string, cache: TemporalCache): YearMonth {\n const [year, month] = s.split('-').map((s) => parseInt(s, 10));\n return new YearMonth(year, month, cache);\n }\n}\n\nexport class Year {\n constructor(\n readonly year: number,\n readonly cache: TemporalCache,\n ) {}\n\n get text(): string {\n return this.firstDay.dayjs.format('YYYY');\n }\n\n toString(): string {\n return this.text;\n }\n\n get firstMonth(): YearMonth {\n return this.cache.getYearMonth(`${this.year}-01`);\n }\n\n get firstDay(): YearMonthDay {\n return this.firstMonth.firstDay;\n }\n\n addYears(years: number): Year {\n const date = this.firstDay.dayjs.add(years, 'year');\n const s = date.format('YYYY');\n return this.cache.getYear(s);\n }\n\n minus(other: Year): number {\n return this.firstDay.dayjs.diff(other.firstDay.dayjs, 'year');\n }\n\n static parse(s: string, cache: TemporalCache): Year {\n const year = parseInt(s, 10);\n return new Year(year, cache);\n }\n}\n\nexport type Temporal = YearMonthDay | YearWeek | YearMonth | Year;\n\nexport function generateAllDaysInRange(start: YearMonthDay, end: YearMonthDay): YearMonthDay[] {\n const days = [];\n const daysInBetween = end.minus(start);\n for (let i = 0; i <= daysInBetween; i++) {\n days.push(start.addDays(i));\n }\n return days;\n}\n\nexport function generateAllWeeksInRange(start: YearWeek, end: YearWeek): YearWeek[] {\n const weeks = [];\n const weeksInBetween = end.minus(start);\n for (let i = 0; i <= weeksInBetween; i++) {\n weeks.push(start.addWeeks(i));\n }\n return weeks;\n}\n\nexport function generateAllMonthsInRange(start: YearMonth, end: YearMonth): YearMonth[] {\n const months = [];\n const monthsInBetween = end.minus(start);\n for (let i = 0; i <= monthsInBetween; i++) {\n months.push(start.addMonths(i));\n }\n return months;\n}\n\nexport function generateAllYearsInRange(start: Year, end: Year): Year[] {\n const years = [];\n const yearsInBetween = end.minus(start);\n for (let i = 0; i <= yearsInBetween; i++) {\n years.push(start.addYears(i));\n }\n return years;\n}\n\nexport function generateAllInRange(start: Temporal | null, end: Temporal | null): Temporal[] {\n if (start === null || end === null) {\n return [];\n }\n if (start instanceof YearMonthDay && end instanceof YearMonthDay) {\n return generateAllDaysInRange(start, end);\n }\n if (start instanceof YearWeek && end instanceof YearWeek) {\n return generateAllWeeksInRange(start, end);\n }\n if (start instanceof YearMonth && end instanceof YearMonth) {\n return generateAllMonthsInRange(start, end);\n }\n if (start instanceof Year && end instanceof Year) {\n return generateAllYearsInRange(start, end);\n }\n throw new Error(`Invalid arguments: start and end must be of the same type: ${start}, ${end}`);\n}\n\nexport function minusTemporal(a: Temporal, b: Temporal): number {\n if (a instanceof YearMonthDay && b instanceof YearMonthDay) {\n return a.minus(b);\n }\n if (a instanceof YearWeek && b instanceof YearWeek) {\n return a.minus(b);\n }\n if (a instanceof YearMonth && b instanceof YearMonth) {\n return a.minus(b);\n }\n if (a instanceof Year && b instanceof Year) {\n return a.minus(b);\n }\n throw new Error(`Cannot compare ${a} and ${b}`);\n}\n\nexport function compareTemporal(a: Temporal | null, b: Temporal | null): number {\n if (a === null) {\n return 1;\n }\n if (b === null) {\n return -1;\n }\n const diff = minusTemporal(a, b);\n if (diff < 0) {\n return -1;\n }\n if (diff > 0) {\n return 1;\n }\n return 0;\n}\n\nexport function getMinMaxTemporal(values: Iterable<Temporal | null>): [Temporal, Temporal] | null {\n let min = null;\n let max = null;\n for (const value of values) {\n if (value === null) {\n continue;\n }\n if (min === null || compareTemporal(value, min) < 0) {\n min = value;\n }\n if (max === null || compareTemporal(value, max) > 0) {\n max = value;\n }\n }\n if (min === null || max === null) {\n return null;\n }\n return [min, max];\n}\n\nexport function addUnit(temporal: Temporal, amount: number): Temporal {\n if (temporal instanceof YearMonthDay) {\n return temporal.addDays(amount);\n }\n if (temporal instanceof YearWeek) {\n return temporal.addWeeks(amount);\n }\n if (temporal instanceof YearMonth) {\n return temporal.addMonths(amount);\n }\n if (temporal instanceof Year) {\n return temporal.addYears(amount);\n }\n throw new Error(`Invalid argument: ${temporal}`);\n}\n","import { type LapisFilter } from '../types';\n\nexport function getMinMaxNumber(values: Iterable<number>): [number, number] | null {\n let min = null;\n let max = null;\n for (const value of values) {\n if (min === null || value < min) {\n min = value;\n }\n if (max === null || value > max) {\n max = value;\n }\n }\n if (min === null || max === null) {\n return null;\n }\n return [min, max];\n}\n\nexport function mapLapisFilterToUrlParams(filter: LapisFilter): URLSearchParams {\n const params = Object.entries(filter).map(([key, value]) => [key, stringifyLapisFilterValue(value)]);\n\n return new URLSearchParams(params);\n}\n\nfunction stringifyLapisFilterValue(value: LapisFilter[string]) {\n if (value === null) {\n return 'null';\n }\n switch (typeof value) {\n case 'boolean':\n return value ? 'true' : 'false';\n case 'number':\n return value.toString();\n case 'string':\n return value;\n }\n}\n","import { Chart, type ChartConfiguration, registerables } from 'chart.js';\n\nimport { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { addUnit, minusTemporal } from '../../utils/temporal';\nimport { getMinMaxNumber } from '../../utils/utils';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeBubbleChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst PrevalenceOverTimeBubbleChart = ({ data, yAxisScaleType }: PrevalenceOverTimeBubbleChartProps) => {\n const firstDate = data[0].content[0].dateRange!;\n const total = data.map((graphData) => graphData.content.map((dataPoint) => dataPoint.total)).flat();\n const [minTotal, maxTotal] = getMinMaxNumber(total)!;\n const scaleBubble = (value: number) => {\n return ((value - minTotal) / (maxTotal - minTotal)) * 4.5 + 0.5;\n };\n\n const config: ChartConfiguration = {\n type: 'bubble',\n data: {\n datasets: data.map((graphData, index) => ({\n label: graphData.displayName,\n data: graphData.content\n .filter((dataPoint) => dataPoint.dateRange !== null)\n .map((dataPoint) => ({\n x: minusTemporal(dataPoint.dateRange!, firstDate),\n y: dataPoint.prevalence,\n r: scaleBubble(dataPoint.total),\n })),\n borderWidth: 1,\n pointRadius: 0,\n backgroundColor: singleGraphColorRGBAById(index, 0.3),\n borderColor: singleGraphColorRGBAById(index),\n })),\n },\n options: {\n animation: false,\n scales: {\n x: {\n ticks: {\n callback: (value) => addUnit(firstDate, value as number).toString(),\n },\n },\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: {\n mode: 'index',\n intersect: false,\n callbacks: {\n title: (context) => {\n const dataset = data[context[0].datasetIndex!];\n const dataPoint = dataset.content[context[0].dataIndex!];\n return dataPoint.dateRange?.toString();\n },\n label: (context) => {\n const dataset = data[context.datasetIndex!];\n const dataPoint = dataset.content[context.dataIndex!];\n\n const percentage = (dataPoint.prevalence * 100).toFixed(2);\n const count = dataPoint.count.toFixed(0);\n const total = dataPoint.total.toFixed(0);\n\n return `${dataset.displayName}: ${percentage}%, ${count}/${total} samples`;\n },\n },\n },\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nexport default PrevalenceOverTimeBubbleChart;\n","import { Chart, type ChartConfiguration, registerables } from 'chart.js';\nimport { type TooltipItem } from 'chart.js/dist/types';\n\nimport { type PrevalenceOverTimeData, type PrevalenceOverTimeVariantData } from '../../query/queryPrevalenceOverTime';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBAById } from '../shared/charts/colors';\nimport {\n confidenceIntervalDataLabel,\n type ConfidenceIntervalMethod,\n wilson95PercentConfidenceInterval,\n} from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface PrevalenceOverTimeLineChartProps {\n data: PrevalenceOverTimeData;\n yAxisScaleType: ScaleType;\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst PrevalenceOverTimeLineChart = ({\n data,\n yAxisScaleType,\n confidenceIntervalMethod,\n}: PrevalenceOverTimeLineChartProps) => {\n const datasets = data.map((graphData, index) => getDataset(graphData, index, confidenceIntervalMethod)).flat();\n const labels = data[0]?.content.map((dateRange) => dateRange.dateRange?.toString() ?? 'Unknown') || [];\n\n const config: ChartConfiguration = {\n type: 'line',\n data: {\n labels,\n datasets,\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(confidenceIntervalMethod),\n },\n },\n };\n\n return <GsChart configuration={config} />;\n};\n\nconst getDataset = (\n prevalenceOverTimeVariant: PrevalenceOverTimeVariantData,\n dataIndex: number,\n confidenceIntervalMethod: ConfidenceIntervalMethod,\n) => {\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return [\n getDatasetCIUpper(prevalenceOverTimeVariant, dataIndex),\n getDatasetLine(prevalenceOverTimeVariant, dataIndex),\n getDatasetCILower(prevalenceOverTimeVariant, dataIndex),\n ].flat();\n default:\n return getDatasetLine(prevalenceOverTimeVariant, dataIndex);\n }\n};\n\nconst getDatasetCIUpper = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: `${prevalenceOverTimeVariant.displayName} CI upper`,\n data: prevalenceOverTimeVariant.content.map(\n (dataPoint) => wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).upperLimit,\n ),\n borderWidth: 0,\n pointRadius: 0,\n fill: '+1',\n backgroundColor: singleGraphColorRGBAById(dataIndex, 0.3),\n});\n\nconst getDatasetCILower = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: `${prevalenceOverTimeVariant.displayName} CI lower`,\n data: prevalenceOverTimeVariant.content.map(\n (dataPoint) => wilson95PercentConfidenceInterval(dataPoint.count, dataPoint.total).lowerLimit,\n ),\n borderWidth: 0,\n pointRadius: 0,\n fill: '-1',\n backgroundColor: singleGraphColorRGBAById(dataIndex, 0.3),\n});\n\nconst getDatasetLine = (prevalenceOverTimeVariant: PrevalenceOverTimeVariantData, dataIndex: number) => ({\n label: prevalenceOverTimeVariant.displayName,\n data: prevalenceOverTimeVariant.content.map((dataPoint) => dataPoint.prevalence),\n borderWidth: 1,\n pointRadius: 0,\n borderColor: singleGraphColorRGBAById(dataIndex),\n backgroundColor: singleGraphColorRGBAById(dataIndex),\n});\n\nconst tooltip = (confidenceIntervalMethod?: ConfidenceIntervalMethod) => {\n const generalConfig = {\n mode: 'index' as const,\n intersect: false,\n };\n\n switch (confidenceIntervalMethod) {\n case 'wilson':\n return {\n ...generalConfig,\n filter: ({ datasetIndex }: TooltipItem<'line'>) => {\n return datasetIndex % 3 === 1;\n },\n callbacks: {\n label: (context: TooltipItem<'line'>) => {\n if (context.datasetIndex % 3 === 1) {\n const value = context.dataset.data[context.dataIndex];\n const ciLower = context.dataset.data[context.dataIndex - 1];\n const ciUpper = context.dataset.data[context.dataIndex + 1];\n\n if (\n typeof value !== 'number' ||\n typeof ciLower !== 'number' ||\n typeof ciUpper !== 'number'\n ) {\n return '';\n }\n\n return confidenceIntervalDataLabel(value, ciLower, ciUpper, context.dataset.label);\n }\n return context.dataset.label;\n },\n },\n };\n default:\n return generalConfig;\n }\n};\n\nexport default PrevalenceOverTimeLineChart;\n","import { getPrevalenceOverTimeTableData } from './getPrevalenceOverTimeTableData';\nimport { type PrevalenceOverTimeData } from '../../query/queryPrevalenceOverTime';\nimport { type TemporalGranularity } from '../../types';\nimport { Table } from '../components/table';\nimport { formatProportion } from '../shared/table/formatProportion';\n\ninterface PrevalenceOverTimeTableProps {\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n}\n\nconst PrevalenceOverTimeTable = ({ data, granularity }: PrevalenceOverTimeTableProps) => {\n const getSplitColumns = (data: PrevalenceOverTimeData) => {\n return data.map((dataset) => ({\n name: dataset.displayName,\n columns: [\n {\n name: 'prevalence',\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n },\n {\n name: 'count',\n sort: true,\n },\n ],\n }));\n };\n\n const getColumns = (data: PrevalenceOverTimeData) => [\n {\n name: granularity,\n sort: true,\n },\n ...getSplitColumns(data),\n ];\n\n const getData = (data: PrevalenceOverTimeData, granularity: TemporalGranularity) => {\n const dataByHeader = getPrevalenceOverTimeTableData(data, granularity);\n return Object.values(dataByHeader).map((row) => Object.values(row));\n };\n\n return <Table data={getData(data, granularity)} columns={getColumns(data)} pagination={false} />;\n};\n\nexport default PrevalenceOverTimeTable;\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { type MappedNumber, type NumberFields } from '../utils/type-utils';\n\nexport type DivisionOperatorResult<\n KeyField extends keyof ValueObject,\n ValueObject,\n ResultField extends string,\n NumeratorField extends string,\n DenominatorField extends string,\n> = { [P in KeyField]: ValueObject[KeyField] } & MappedNumber<ResultField> &\n MappedNumber<NumeratorField> &\n MappedNumber<DenominatorField>;\n\nexport class DivisionOperator<\n ValueObject,\n KeyField extends keyof ValueObject,\n ValueField extends NumberFields<ValueObject>,\n ResultField extends string,\n NumeratorField extends string,\n DenominatorField extends string,\n> implements Operator<DivisionOperatorResult<KeyField, ValueObject, ResultField, NumeratorField, DenominatorField>>\n{\n constructor(\n private numerator: Operator<ValueObject>,\n private denominator: Operator<ValueObject>,\n private keyField: KeyField,\n private valueField: ValueField,\n private resultField: ResultField,\n private numeratorField: NumeratorField,\n private denominatorField: DenominatorField,\n ) {}\n\n async evaluate(\n lapis: string,\n signal?: AbortSignal,\n ): Promise<Dataset<DivisionOperatorResult<KeyField, ValueObject, ResultField, NumeratorField, DenominatorField>>> {\n const numeratorEvaluated = await this.numerator.evaluate(lapis, signal);\n const denominatorEvaluated = await this.denominator.evaluate(lapis, signal);\n\n const numeratorMap = new Map<ValueObject[KeyField], ValueObject[ValueField]>();\n numeratorEvaluated.content.forEach((row) => {\n numeratorMap.set(row[this.keyField], row[this.valueField]);\n });\n\n const content = denominatorEvaluated.content.map((row) => {\n const numeratorValue = numeratorMap.get(row[this.keyField]) ?? 0;\n return {\n [this.keyField]: row[this.keyField],\n [this.numeratorField]: numeratorValue as number,\n [this.denominatorField]: row[this.valueField] as number,\n [this.resultField]: (numeratorValue as number) / (row[this.valueField] as number),\n } as { [P in KeyField]: ValueObject[KeyField] } & MappedNumber<ResultField> &\n MappedNumber<NumeratorField> &\n MappedNumber<DenominatorField>;\n });\n\n return { content };\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\nimport { fetchAggregated } from '../lapisApi/lapisApi';\nimport { type AggregatedItem } from '../lapisApi/lapisTypes';\nimport { type LapisFilter } from '../types';\n\nexport class FetchAggregatedOperator<Fields extends Record<string, unknown>>\n implements\n Operator<\n Fields & {\n count: number;\n }\n >\n{\n constructor(\n private filter: LapisFilter,\n private fields: string[],\n ) {}\n\n async evaluate(lapisUrl: string, signal?: AbortSignal): Promise<Dataset<Fields & { count: number }>> {\n const aggregatedResponse = (\n await fetchAggregated(\n lapisUrl,\n {\n ...this.filter,\n fields: this.fields,\n },\n signal,\n )\n ).data;\n\n if (isFieldsArrayWithCount<Fields & { count: number }>(aggregatedResponse)) {\n return {\n content: aggregatedResponse,\n };\n }\n\n throw new Error('Aggregated response does not have count');\n }\n}\n\nfunction isFieldsArrayWithCount<T>(data: AggregatedItem[]): data is (T & { count: number })[] {\n return data.every((item) => typeof item === 'object' && 'count' in item && typeof item.count === 'number');\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class FillMissingOperator<Data, KeyToFill extends keyof Data> implements Operator<Data> {\n constructor(\n private child: Operator<Data>,\n private keyField: KeyToFill,\n private getMinMaxFn: (values: Iterable<Data[KeyToFill]>) => [Data[KeyToFill], Data[KeyToFill]] | null,\n private getAllRequiredKeysFn: (min: Data[KeyToFill], max: Data[KeyToFill]) => Data[KeyToFill][],\n private defaultValueFn: (key: Data[KeyToFill]) => Data,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<Data>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const existingKeys = new Set(childEvaluated.content.map((row) => row[this.keyField]));\n const minMax = this.getMinMaxFn(existingKeys);\n if (minMax === null) {\n return childEvaluated;\n }\n const [min, max] = minMax;\n const requiredKeys = this.getAllRequiredKeysFn(min, max);\n const content = childEvaluated.content;\n for (const key of requiredKeys) {\n if (!existingKeys.has(key)) {\n content.push(this.defaultValueFn(key));\n }\n }\n return { content };\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class GroupByOperator<Data, AggregationResult, KeyToGroupBy extends keyof Data>\n implements Operator<AggregationResult>\n{\n constructor(\n private child: Operator<Data>,\n private field: KeyToGroupBy,\n private aggregate: (values: Data[]) => AggregationResult,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<AggregationResult>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const grouped = new Map<Data[KeyToGroupBy], Data[]>();\n for (const row of childEvaluated.content) {\n const key = row[this.field];\n if (!grouped.has(key)) {\n grouped.set(key, []);\n }\n grouped.get(key)!.push(row);\n }\n const result = new Array<AggregationResult>();\n for (const [, values] of grouped) {\n result.push(this.aggregate(values));\n }\n\n return {\n content: result,\n };\n }\n}\n","import { GroupByOperator } from './GroupByOperator';\nimport { type Operator } from './Operator';\nimport { type NumberFields } from '../utils/type-utils';\n\ntype Result<Data, KeyToGroupBy extends keyof Data, KeyToSumBy extends keyof Data> = {\n [P in KeyToGroupBy | KeyToSumBy]: P extends KeyToGroupBy ? Data[KeyToGroupBy] : number;\n};\n\nexport class GroupByAndSumOperator<\n Data,\n KeyToGroupBy extends keyof Data,\n KeySoSumBy extends NumberFields<Data>,\n> extends GroupByOperator<Data, Result<Data, KeyToGroupBy, KeySoSumBy>, KeyToGroupBy> {\n constructor(child: Operator<Data>, groupByField: KeyToGroupBy, sumField: KeySoSumBy) {\n super(child, groupByField, (values: Data[]) => {\n let n = 0;\n for (const value of values) {\n n += value[sumField] as number;\n }\n return {\n [groupByField]: values[0][groupByField],\n [sumField]: n,\n } as Result<Data, KeyToGroupBy, KeySoSumBy>;\n });\n }\n}\n","import { type Dataset } from './Dataset';\nimport { type Operator } from './Operator';\n\nexport class MapOperator<S, T> implements Operator<T> {\n constructor(\n private child: Operator<S>,\n private func: (value: S) => T,\n ) {}\n\n async evaluate(lapis: string, signal?: AbortSignal): Promise<Dataset<T>> {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n return {\n content: childEvaluated.content.map(this.func),\n };\n }\n}\n","import { type Operator } from './Operator';\n\nexport class SlidingOperator<Data, AggregationResult> implements Operator<AggregationResult> {\n constructor(\n private child: Operator<Data>,\n private windowSize: number,\n private aggregate: (values: Data[]) => AggregationResult,\n ) {\n if (windowSize < 1) {\n throw new Error('Window size must be at least 1');\n }\n }\n\n async evaluate(lapis: string, signal?: AbortSignal) {\n const childEvaluated = await this.child.evaluate(lapis, signal);\n const content = new Array<AggregationResult>();\n const numberOfWindows = Math.max(childEvaluated.content.length - this.windowSize, 0) + 1;\n for (let i = 0; i < numberOfWindows; i++) {\n content.push(this.aggregate(childEvaluated.content.slice(i, i + this.windowSize)));\n }\n return { content };\n }\n}\n","import { DivisionOperator } from '../operator/DivisionOperator';\nimport { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';\nimport { FillMissingOperator } from '../operator/FillMissingOperator';\nimport { GroupByAndSumOperator } from '../operator/GroupByAndSumOperator';\nimport { MapOperator } from '../operator/MapOperator';\nimport { SlidingOperator } from '../operator/SlidingOperator';\nimport { SortOperator } from '../operator/SortOperator';\nimport { type LapisFilter, type NamedLapisFilter, type TemporalGranularity } from '../types';\nimport {\n compareTemporal,\n generateAllInRange,\n getMinMaxTemporal,\n type Temporal,\n TemporalCache,\n} from '../utils/temporal';\n\nexport type PrevalenceOverTimeData = PrevalenceOverTimeVariantData[];\n\nexport type PrevalenceOverTimeVariantData = {\n displayName: string;\n content: { count: number; prevalence: number; total: number; dateRange: Temporal | null }[];\n};\n\nexport function queryPrevalenceOverTime(\n numeratorFilter: NamedLapisFilter | NamedLapisFilter[],\n denominatorFilter: NamedLapisFilter,\n granularity: TemporalGranularity,\n smoothingWindow: number,\n lapis: string,\n signal?: AbortSignal,\n): Promise<PrevalenceOverTimeData> {\n const numeratorFilters = makeArray(numeratorFilter);\n\n const denominatorData = fetchAndPrepare(getFilter(denominatorFilter), granularity, smoothingWindow);\n const subQueries = numeratorFilters.map(async (namedLapisFilter) => {\n const { displayName, ...filter } = namedLapisFilter;\n const numeratorData = fetchAndPrepare(filter, granularity, smoothingWindow);\n const divide = new DivisionOperator(\n numeratorData,\n denominatorData,\n 'dateRange',\n 'count',\n 'prevalence',\n 'count',\n 'total',\n );\n const dataset = await divide.evaluate(lapis, signal);\n return {\n displayName,\n content: dataset.content,\n };\n });\n return Promise.all(subQueries);\n}\n\nfunction getFilter(filter: NamedLapisFilter) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { displayName, ...filterWithoutDisplayName } = filter;\n return filterWithoutDisplayName;\n}\n\nfunction makeArray<T>(arrayOrSingleItem: T | T[]) {\n if (Array.isArray(arrayOrSingleItem)) {\n return arrayOrSingleItem;\n }\n return [arrayOrSingleItem];\n}\n\nfunction fetchAndPrepare(filter: LapisFilter, granularity: TemporalGranularity, smoothingWindow: number) {\n const fetchData = new FetchAggregatedOperator<{\n date: string | null;\n }>(filter, ['date']);\n const mapData = new MapOperator(fetchData, (d) => mapDateToGranularityRange(d, granularity));\n const groupByData = new GroupByAndSumOperator(mapData, 'dateRange', 'count');\n const fillData = new FillMissingOperator(\n groupByData,\n 'dateRange',\n getMinMaxTemporal,\n generateAllInRange,\n (key) => ({ dateRange: key, count: 0 }),\n );\n const sortData = new SortOperator(fillData, dateRangeCompare);\n\n return smoothingWindow >= 1 ? new SlidingOperator(sortData, smoothingWindow, averageSmoothing) : sortData;\n}\n\nfunction mapDateToGranularityRange(d: { date: string | null; count: number }, granularity: TemporalGranularity) {\n let dateRange: Temporal | null = null;\n if (d.date !== null) {\n const date = TemporalCache.getInstance().getYearMonthDay(d.date);\n switch (granularity) {\n case 'day':\n dateRange = date;\n break;\n case 'week':\n dateRange = date.week;\n break;\n case 'month':\n dateRange = date.month;\n break;\n case 'year':\n dateRange = date.year;\n break;\n }\n }\n return {\n dateRange,\n count: d.count,\n };\n}\n\nfunction dateRangeCompare(a: { dateRange: Temporal | null }, b: { dateRange: Temporal | null }) {\n if (a.dateRange === null) {\n return 1;\n }\n if (b.dateRange === null) {\n return -1;\n }\n return compareTemporal(a.dateRange, b.dateRange);\n}\n\nfunction averageSmoothing(slidingWindow: { dateRange: Temporal | null; count: number }[]) {\n const average = slidingWindow.reduce((acc, curr) => acc + curr.count, 0) / slidingWindow.length;\n const centerIndex = Math.floor(slidingWindow.length / 2);\n return { dateRange: slidingWindow[centerIndex].dateRange, count: average };\n}\n","import { type FunctionComponent } from 'preact';\nimport { type JSXInternal } from 'preact/src/jsx';\n\nexport interface SelectProps {\n items: { label: string; value: string; disabled?: boolean }[];\n selected: string;\n onChange: JSXInternal.GenericEventHandler<HTMLSelectElement>;\n selectStyle?: string;\n}\n\nexport const Select: FunctionComponent<SelectProps> = ({ items, selected, onChange, selectStyle }) => {\n return (\n <select class={`select select-bordered ${selectStyle}`} value={selected} onChange={onChange}>\n {items.map((item) => (\n <option key={item.value} value={item.value} disabled={item.disabled}>\n {item.label}\n </option>\n ))}\n </select>\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { Select } from './select';\nimport type { ConfidenceIntervalMethod } from '../shared/charts/confideceInterval';\n\ntype ConfidenceIntervalSelectorProps = {\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n setConfidenceIntervalMethod: (method: ConfidenceIntervalMethod) => void;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n};\n\nexport const ConfidenceIntervalSelector: FunctionComponent<ConfidenceIntervalSelectorProps> = ({\n confidenceIntervalMethod,\n setConfidenceIntervalMethod,\n confidenceIntervalMethods,\n}) => {\n if (confidenceIntervalMethods.length === 0) {\n return null;\n }\n\n const items = [\n { label: 'Confidence interval method', value: 'none', disabled: true },\n ...confidenceIntervalMethods.concat('none').map((method) => {\n switch (method) {\n case 'wilson':\n return { label: 'Wilson, 95% CI', value: 'wilson' };\n case 'none':\n return { label: 'None', value: 'none' };\n }\n }),\n ];\n\n return (\n <Select\n items={items}\n selected={confidenceIntervalMethod === undefined ? 'none' : confidenceIntervalMethod}\n onChange={(event: Event) => {\n const select = event.target as HTMLSelectElement;\n const value = select.value as ConfidenceIntervalMethod;\n setConfidenceIntervalMethod(value);\n }}\n selectStyle={'select-xs select-bordered'}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\n\nimport { Select } from './select';\nimport type { ScaleType } from '../shared/charts/getYAxisScale';\n\nexport type ScalingSelectorProps = {\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n className?: string;\n};\n\nexport const ScalingSelector: FunctionComponent<ScalingSelectorProps> = ({\n yAxisScaleType,\n setYAxisScaleType,\n className,\n}) => {\n const items = [\n { label: 'y axis scaling type', value: 'none', disabled: true },\n { label: 'Linear', value: 'linear' },\n { label: 'Logarithmic', value: 'logarithmic' },\n { label: 'Logit', value: 'logit' },\n ];\n\n return (\n <Select\n items={items}\n selected={yAxisScaleType}\n onChange={(event: Event) => {\n const select = event.target as HTMLSelectElement;\n const value = select.value as ScaleType;\n setYAxisScaleType(value);\n }}\n selectStyle={`${className} select-xs select-bordered`}\n />\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport { getPrevalenceOverTimeTableData } from './getPrevalenceOverTimeTableData';\nimport PrevalenceOverTimeBarChart from './prevalence-over-time-bar-chart';\nimport PrevalenceOverTimeBubbleChart from './prevalence-over-time-bubble-chart';\nimport PrevalenceOverTimeLineChart from './prevalence-over-time-line-chart';\nimport PrevalenceOverTimeTable from './prevalence-over-time-table';\nimport { type PrevalenceOverTimeData, queryPrevalenceOverTime } from '../../query/queryPrevalenceOverTime';\nimport { type NamedLapisFilter, type TemporalGranularity } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ConfidenceIntervalSelector } from '../components/confidence-interval-selector';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { ScalingSelector } from '../components/scaling-selector';\nimport Tabs from '../components/tabs';\nimport { type ConfidenceIntervalMethod } from '../shared/charts/confideceInterval';\nimport { type ScaleType } from '../shared/charts/getYAxisScale';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'bar' | 'line' | 'bubble' | 'table';\n\nexport interface PrevalenceOverTimeProps {\n numerator: NamedLapisFilter | NamedLapisFilter[];\n denominator: NamedLapisFilter;\n granularity: TemporalGranularity;\n smoothingWindow: number;\n views: View[];\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n}\n\nexport const PrevalenceOverTime: FunctionComponent<PrevalenceOverTimeProps> = ({\n numerator,\n denominator,\n granularity,\n smoothingWindow,\n views,\n confidenceIntervalMethods,\n}) => {\n const lapis = useContext(LapisUrlContext);\n\n const { data, error, isLoading } = useQuery(\n () => queryPrevalenceOverTime(numerator, denominator, granularity, smoothingWindow, lapis),\n [lapis, numerator, denominator, granularity, smoothingWindow],\n );\n\n const headline = 'Prevalence over time';\n\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <PrevalenceOverTimeTabs\n views={views}\n data={data}\n granularity={granularity}\n confidenceIntervalMethods={confidenceIntervalMethods}\n />\n </Headline>\n );\n};\n\ntype PrevalenceOverTimeTabsProps = {\n views: View[];\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n};\n\nconst PrevalenceOverTimeTabs: FunctionComponent<PrevalenceOverTimeTabsProps> = ({\n views,\n data,\n granularity,\n confidenceIntervalMethods,\n}) => {\n const [yAxisScaleType, setYAxisScaleType] = useState<ScaleType>('linear');\n const [confidenceIntervalMethod, setConfidenceIntervalMethod] = useState<ConfidenceIntervalMethod>(\n confidenceIntervalMethods.length > 0 ? confidenceIntervalMethods[0] : 'none',\n );\n\n const getTab = (view: View) => {\n switch (view) {\n case 'bar':\n return {\n title: 'Bar',\n content: (\n <PrevalenceOverTimeBarChart\n data={data}\n yAxisScaleType={yAxisScaleType}\n confidenceIntervalMethod={confidenceIntervalMethod}\n />\n ),\n };\n case 'line':\n return {\n title: 'Line',\n content: (\n <PrevalenceOverTimeLineChart\n data={data}\n yAxisScaleType={yAxisScaleType}\n confidenceIntervalMethod={confidenceIntervalMethod}\n />\n ),\n };\n case 'bubble':\n return {\n title: 'Bubble',\n content: <PrevalenceOverTimeBubbleChart data={data} yAxisScaleType={yAxisScaleType} />,\n };\n case 'table':\n return { title: 'Table', content: <PrevalenceOverTimeTable data={data} granularity={granularity} /> };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n const toolbar = (activeTab: string) => (\n <Toolbar\n activeTab={activeTab}\n yAxisScaleType={yAxisScaleType}\n setYAxisScaleType={setYAxisScaleType}\n data={data}\n granularity={granularity}\n confidenceIntervalMethods={confidenceIntervalMethods}\n confidenceIntervalMethod={confidenceIntervalMethod}\n setConfidenceIntervalMethod={setConfidenceIntervalMethod}\n />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype ToolbarProps = {\n activeTab: string;\n data: PrevalenceOverTimeData;\n granularity: TemporalGranularity;\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n confidenceIntervalMethods: ConfidenceIntervalMethod[];\n confidenceIntervalMethod: ConfidenceIntervalMethod;\n setConfidenceIntervalMethod: (confidenceIntervalMethod: ConfidenceIntervalMethod) => void;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({\n activeTab,\n yAxisScaleType,\n setYAxisScaleType,\n confidenceIntervalMethods,\n confidenceIntervalMethod,\n setConfidenceIntervalMethod,\n data,\n granularity,\n}) => {\n return (\n <div class='flex'>\n {activeTab !== 'Table' && (\n <ScalingSelector yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n )}\n {(activeTab === 'Bar' || activeTab === 'Line') && (\n <ConfidenceIntervalSelector\n confidenceIntervalMethods={confidenceIntervalMethods}\n confidenceIntervalMethod={confidenceIntervalMethod}\n setConfidenceIntervalMethod={setConfidenceIntervalMethod}\n />\n )}\n <CsvDownloadButton\n className='mx-1 btn btn-xs'\n getData={() => getPrevalenceOverTimeTableData(data, granularity)}\n filename='prevalence-over-time.csv'\n />\n <Info className='ml-1' content='Info for prevalence over time' />\n </div>\n );\n};\n\nexport default PrevalenceOverTime;\n","import { customElement, property } from 'lit/decorators.js';\n\nimport PrevalenceOverTime, { type View } from '../../preact/prevalenceOverTime/prevalence-over-time';\nimport { type ConfidenceIntervalMethod } from '../../preact/shared/charts/confideceInterval';\nimport { type NamedLapisFilter, type TemporalGranularity } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n@customElement('gs-prevalence-over-time')\nexport class PrevalenceOverTimeComponent extends PreactLitAdapterWithGridJsStyles {\n @property({ type: Object })\n numerator: NamedLapisFilter | NamedLapisFilter[] = { displayName: '' };\n\n @property({ type: Object })\n denominator: NamedLapisFilter = { displayName: '' };\n\n @property({ type: String })\n granularity: TemporalGranularity = 'day';\n\n @property({ type: Number })\n smoothingWindow: number = 0;\n\n @property({ type: Array })\n views: View[] = ['bar', 'line', 'bubble', 'table'];\n\n @property({ type: Array })\n confidenceIntervalMethods: ConfidenceIntervalMethod[] = ['wilson'];\n\n override render() {\n return (\n <PrevalenceOverTime\n numerator={this.numerator}\n denominator={this.denominator}\n granularity={this.granularity}\n smoothingWindow={this.smoothingWindow}\n views={this.views}\n confidenceIntervalMethods={this.confidenceIntervalMethods}\n />\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-prevalence-over-time': PrevalenceOverTimeComponent;\n }\n}\n","import { Chart, type ChartConfiguration, registerables, type TooltipItem } from 'chart.js';\n\nimport { type YearMonthDay } from '../../utils/temporal';\nimport GsChart from '../components/chart';\nimport { LogitScale } from '../shared/charts/LogitScale';\nimport { singleGraphColorRGBByName } from '../shared/charts/colors';\nimport { confidenceIntervalDataLabel } from '../shared/charts/confideceInterval';\nimport { getYAxisScale, type ScaleType } from '../shared/charts/getYAxisScale';\n\ninterface RelativeGrowthAdvantageChartData {\n t: YearMonthDay[];\n proportion: number[];\n ciLower: number[];\n ciUpper: number[];\n observed: number[];\n params: {\n fd: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n };\n}\n\ninterface RelativeGrowthAdvantageChartProps {\n data: RelativeGrowthAdvantageChartData;\n yAxisScaleType: ScaleType;\n}\n\nChart.register(...registerables, LogitScale);\n\nconst RelativeGrowthAdvantageChart = ({ data, yAxisScaleType }: RelativeGrowthAdvantageChartProps) => {\n const config: ChartConfiguration = {\n type: 'line',\n data: {\n labels: data.t,\n datasets: datasets(data),\n },\n options: {\n animation: false,\n scales: {\n y: getYAxisScale(yAxisScaleType),\n },\n plugins: {\n legend: {\n display: false,\n },\n tooltip: tooltip(),\n },\n },\n };\n\n return (\n <>\n <GsChart configuration={config} />\n <div>\n Advantage: {(data.params.fd.value * 100).toFixed(2)}% ({(data.params.fd.ciLower * 100).toFixed(2)}% -{' '}\n {(data.params.fd.ciUpper * 100).toFixed(2)}%)\n </div>\n </>\n );\n};\n\nconst datasets = (data: RelativeGrowthAdvantageChartData) => {\n return [\n {\n type: 'line' as const,\n label: 'Prevalence',\n data: data.proportion,\n borderWidth: 1,\n pointRadius: 0,\n borderColor: singleGraphColorRGBByName('indigo'),\n backgroundColor: singleGraphColorRGBByName('indigo'),\n },\n {\n type: 'line' as const,\n label: 'CI Lower',\n data: data.ciLower,\n borderWidth: 1,\n pointRadius: 0,\n fill: '+1',\n backgroundColor: singleGraphColorRGBByName('indigo', 0.3),\n },\n {\n type: 'line' as const,\n label: 'CI Upper',\n data: data.ciUpper,\n borderWidth: 1,\n pointRadius: 0,\n fill: '-1',\n backgroundColor: singleGraphColorRGBByName('indigo', 0.3),\n },\n {\n type: 'scatter' as const,\n label: 'Observed',\n data: data.observed,\n pointBackgroundColor: singleGraphColorRGBByName('green'),\n pointRadius: 2,\n },\n ];\n};\n\nconst tooltip = () => {\n return {\n mode: 'index' as const,\n intersect: false,\n filter: ({ datasetIndex }: TooltipItem<'line'>) => {\n return datasetIndex !== 1 && datasetIndex !== 2;\n },\n callbacks: {\n label: (context: TooltipItem<'line'>) => {\n switch (context.datasetIndex) {\n case 0: {\n const value = context.dataset.data[context.dataIndex];\n const ciLower = context.dataset.data[context.dataIndex + 1];\n const ciUpper = context.dataset.data[context.dataIndex + 2];\n if (typeof value !== 'number' || typeof ciLower !== 'number' || typeof ciUpper !== 'number') {\n return '';\n }\n return confidenceIntervalDataLabel(value, ciLower, ciUpper, context.dataset.label);\n }\n\n case 3: {\n const value = context.dataset.data[context.dataIndex];\n if (typeof value !== 'number') {\n return '';\n }\n return `Observed: ${value.toFixed(3)}`;\n }\n default:\n return '';\n }\n },\n },\n };\n};\n\nexport default RelativeGrowthAdvantageChart;\n","import { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';\nimport { MapOperator } from '../operator/MapOperator';\nimport { type LapisFilter } from '../types';\nimport { getMinMaxTemporal, TemporalCache, type YearMonthDay } from '../utils/temporal';\n\nexport type RelativeGrowthAdvantageData = Awaited<ReturnType<typeof queryRelativeGrowthAdvantage>>;\n\nexport async function queryRelativeGrowthAdvantage(\n numerator: LapisFilter,\n denominator: LapisFilter,\n generationTime: number,\n lapis: string,\n signal?: AbortSignal,\n) {\n const fetchNumerator = new FetchAggregatedOperator<{\n date: string | null;\n }>(numerator, ['date']);\n const fetchDenominator = new FetchAggregatedOperator<{\n date: string | null;\n }>(denominator, ['date']);\n const mapNumerator = new MapOperator(fetchNumerator, toYearMonthDay);\n const mapDenominator = new MapOperator(fetchDenominator, toYearMonthDay);\n const [numeratorData, denominatorData] = await Promise.all([\n mapNumerator.evaluate(lapis, signal),\n mapDenominator.evaluate(lapis, signal),\n ]);\n const minMaxDate = getMinMaxTemporal(denominatorData.content.map((d) => d.date));\n if (!minMaxDate) {\n return null;\n }\n const [minDate, maxDate] = minMaxDate as [YearMonthDay, YearMonthDay];\n const numeratorCounts = new Map<YearMonthDay, number>();\n numeratorData.content.forEach((d) => {\n if (d.date) {\n numeratorCounts.set(d.date, d.count);\n }\n });\n const denominatorCounts = new Map<YearMonthDay, number>();\n const requestData = {\n t: [] as number[],\n n: [] as number[],\n k: [] as number[],\n };\n denominatorData.content.forEach((d) => {\n if (d.date) {\n denominatorCounts.set(d.date, d.count);\n const t = d.date.minus(minDate);\n requestData.t.push(t);\n requestData.n.push(d.count);\n requestData.k.push(numeratorCounts.get(d.date) ?? 0);\n }\n });\n const requestPayload = {\n config: {\n alpha: 0.95,\n generationTime,\n initialCasesVariant: 1,\n initialCasesWildtype: 1,\n reproductionNumberWildtype: 1,\n tStart: 0,\n tEnd: maxDate.minus(minDate),\n },\n data: requestData,\n };\n const response = await fetch('https://cov-spectrum.org/api/v2/computed/model/chen2021Fitness', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestPayload),\n signal,\n });\n const responseData = (await response.json()) as {\n estimatedAbsoluteNumbers: {\n t: number[];\n variantCases: number[];\n wildtypeCases: number[];\n };\n estimatedProportions: {\n t: number[];\n proportion: number[];\n ciLower: number[];\n ciUpper: number[];\n };\n params: {\n a: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n fc: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n fd: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n t0: {\n value: number;\n ciLower: number;\n ciUpper: number;\n };\n };\n };\n const transformed = {\n ...responseData,\n estimatedProportions: {\n ...responseData.estimatedProportions,\n t: responseData.estimatedProportions.t.map((t) => minDate.addDays(t)),\n },\n };\n const observedProportions = transformed.estimatedProportions.t.map(\n (t) => (numeratorCounts.get(t) ?? 0) / (denominatorCounts.get(t) ?? 0),\n );\n\n return {\n ...transformed,\n observedProportions,\n };\n}\n\nfunction toYearMonthDay(d: { date: string | null; count: number }) {\n const temporalCache = TemporalCache.getInstance();\n return {\n date: d.date ? temporalCache.getYearMonthDay(d.date) : null,\n count: d.count,\n };\n}\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useState } from 'preact/hooks';\n\nimport RelativeGrowthAdvantageChart from './relative-growth-advantage-chart';\nimport {\n queryRelativeGrowthAdvantage,\n type RelativeGrowthAdvantageData,\n} from '../../query/queryRelativeGrowthAdvantage';\nimport { type LapisFilter } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { ScalingSelector } from '../components/scaling-selector';\nimport Tabs from '../components/tabs';\nimport { type ScaleType } from '../shared/charts/getYAxisScale';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'line';\n\nexport interface RelativeGrowthAdvantageProps {\n numerator: LapisFilter;\n denominator: LapisFilter;\n generationTime: number;\n views: View[];\n}\n\nexport const RelativeGrowthAdvantage: FunctionComponent<RelativeGrowthAdvantageProps> = ({\n numerator,\n denominator,\n generationTime,\n views,\n}) => {\n const lapis = useContext(LapisUrlContext);\n const [yAxisScaleType, setYAxisScaleType] = useState<ScaleType>('linear');\n\n const { data, error, isLoading } = useQuery(\n () => queryRelativeGrowthAdvantage(numerator, denominator, generationTime, lapis),\n [lapis, numerator, denominator, generationTime, views],\n );\n\n const headline = 'Relative growth advantage';\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <RelativeGrowthAdvantageTabs\n data={data}\n yAxisScaleType={yAxisScaleType}\n setYAxisScaleType={setYAxisScaleType}\n views={views}\n />\n </Headline>\n );\n};\n\ntype RelativeGrowthAdvantageTabsProps = {\n data: NonNullable<RelativeGrowthAdvantageData>;\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n views: View[];\n};\n\nconst RelativeGrowthAdvantageTabs: FunctionComponent<RelativeGrowthAdvantageTabsProps> = ({\n data,\n yAxisScaleType,\n setYAxisScaleType,\n views,\n}) => {\n const getTab = (view: View) => {\n switch (view) {\n case 'line':\n return {\n title: 'Line',\n content: (\n <RelativeGrowthAdvantageChart\n data={{\n ...data.estimatedProportions,\n observed: data.observedProportions,\n params: data.params,\n }}\n yAxisScaleType={yAxisScaleType}\n />\n ),\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n const toolbar = () => (\n <RelativeGrowthAdvantageToolbar yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n );\n\n return <Tabs tabs={tabs} toolbar={toolbar} />;\n};\n\ntype RelativeGrowthAdvantageToolbarProps = {\n yAxisScaleType: ScaleType;\n setYAxisScaleType: (scaleType: ScaleType) => void;\n};\n\nconst RelativeGrowthAdvantageToolbar: FunctionComponent<RelativeGrowthAdvantageToolbarProps> = ({\n yAxisScaleType,\n setYAxisScaleType,\n}) => {\n return (\n <div class='flex'>\n <ScalingSelector yAxisScaleType={yAxisScaleType} setYAxisScaleType={setYAxisScaleType} />\n <Info className='ml-1' content='Line chart' />\n </div>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { RelativeGrowthAdvantage, type View } from '../../preact/relativeGrowthAdvantage/relative-growth-advantage';\nimport type { LapisFilter } from '../../types';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n@customElement('gs-relative-growth-advantage')\nexport class RelativeGrowthAdvantageComponent extends PreactLitAdapter {\n @property({ type: Object })\n numerator: LapisFilter = {};\n\n @property({ type: Object })\n denominator: LapisFilter = {};\n\n @property({ type: Number })\n generationTime: number = 7;\n\n @property({ type: Array })\n views: View[] = ['line'];\n\n override render() {\n return (\n <RelativeGrowthAdvantage\n numerator={this.numerator}\n denominator={this.denominator}\n generationTime={this.generationTime}\n views={this.views}\n />\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-relative-growth-advantage': RelativeGrowthAdvantageComponent;\n }\n}\n","import { type FunctionComponent } from 'preact';\n\nimport { type AggregateData } from '../../query/queryAggregateData';\nimport { Table } from '../components/table';\nimport { formatProportion } from '../shared/table/formatProportion';\n\ntype AggregateTableProps = {\n fields: string[];\n data: AggregateData;\n};\n\nexport const AggregateTable: FunctionComponent<AggregateTableProps> = ({ data, fields }) => {\n const headers = [\n ...fields.map((field) => {\n return {\n name: field,\n sort: true,\n };\n }),\n {\n name: 'count',\n sort: true,\n },\n {\n name: 'proportion',\n sort: true,\n formatter: (cell: number) => formatProportion(cell),\n },\n ];\n\n return <Table data={data} columns={headers} pagination={true} />;\n};\n","import { FetchAggregatedOperator } from '../operator/FetchAggregatedOperator';\nimport { type LapisFilter } from '../types';\n\nexport type AggregateData = (Record<string, string | null | number | boolean> & {\n count: number;\n proportion: number;\n})[];\n\nexport async function queryAggregateData(variant: LapisFilter, fields: string[], lapis: string, signal?: AbortSignal) {\n const fetchData = new FetchAggregatedOperator<Record<string, string | null | number>>(variant, fields);\n const data = (await fetchData.evaluate(lapis, signal)).content;\n\n const total = data.reduce((acc, row) => acc + row.count, 0);\n\n return data.map(\n (row) =>\n ({\n ...row,\n proportion: row.count / total,\n }) as Record<string, string | null | number | boolean> & {\n count: number;\n proportion: number;\n },\n );\n}\n","import { type FunctionComponent } from 'preact';\nimport { useContext } from 'preact/hooks';\n\nimport { AggregateTable } from './aggregate-table';\nimport { type AggregateData, queryAggregateData } from '../../query/queryAggregateData';\nimport { type LapisFilter } from '../../types';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { CsvDownloadButton } from '../components/csv-download-button';\nimport { ErrorDisplay } from '../components/error-display';\nimport Headline from '../components/headline';\nimport Info from '../components/info';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport Tabs from '../components/tabs';\nimport { useQuery } from '../useQuery';\n\nexport type View = 'table';\n\nexport interface AggregateProps {\n filter: LapisFilter;\n fields: string[];\n views: View[];\n}\n\nexport const Aggregate: FunctionComponent<AggregateProps> = ({ fields, views, filter }) => {\n const lapis = useContext(LapisUrlContext);\n\n const { data, error, isLoading } = useQuery(async () => {\n return queryAggregateData(filter, fields, lapis);\n }, [filter, fields, lapis]);\n\n const headline = 'Aggregate';\n\n if (isLoading) {\n return (\n <Headline heading={headline}>\n <LoadingDisplay />\n </Headline>\n );\n }\n\n if (error !== null) {\n return (\n <Headline heading={headline}>\n <ErrorDisplay error={error} />\n </Headline>\n );\n }\n\n if (data === null) {\n return (\n <Headline heading={headline}>\n <NoDataDisplay />\n </Headline>\n );\n }\n\n return (\n <Headline heading={headline}>\n <AggregatedDataTabs data={data} views={views} fields={fields} />\n </Headline>\n );\n};\n\ntype AggregatedDataTabsProps = {\n data: AggregateData;\n fields: string[];\n views: View[];\n};\n\nconst AggregatedDataTabs: FunctionComponent<AggregatedDataTabsProps> = ({ data, views, fields }) => {\n const getTab = (view: View) => {\n switch (view) {\n case 'table':\n return {\n title: 'Table',\n content: <AggregateTable data={data} fields={fields} />,\n };\n }\n };\n\n const tabs = views.map((view) => getTab(view));\n\n return <Tabs tabs={tabs} toolbar={<Toolbar data={data} />} />;\n};\n\ntype ToolbarProps = {\n data: AggregateData;\n};\n\nconst Toolbar: FunctionComponent<ToolbarProps> = ({ data }) => {\n return (\n <div class='flex flex-row'>\n <CsvDownloadButton className='mx-1 btn btn-xs' getData={() => data} filename='aggregate.csv' />\n <Info className='mx-1' content='Info for aggregate' />\n </div>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { Aggregate, type View } from '../../preact/aggregatedData/aggregate';\nimport { type LapisFilter } from '../../types';\nimport { PreactLitAdapterWithGridJsStyles } from '../PreactLitAdapterWithGridJsStyles';\n\n/**\n * ## Tag\n *\n * `gs-aggregate-component`\n *\n * ## Context\n *\n * This component displays aggregated data, which can provide an overview of the underlying data.\n *\n * It expects a list of fields to aggregate by and a filter to apply to the data.\n */\n@customElement('gs-aggregate-component')\nexport class AggregateComponent extends PreactLitAdapterWithGridJsStyles {\n /**\n * The fields to aggregate by.\n */\n @property({ type: Array })\n fields: string[] = [];\n\n /**\n * The views are used to display the aggregated data.\n * In the table view, the data is presented in a table format where each field is a column,\n * along with the aggregated value and its proportion.\n * The proportion represents the ratio of the aggregated value to the total count of the data\n * (considering the applied filter).\n */\n @property({ type: Array })\n views: View[] = ['table'];\n\n /**\n * The filter to apply to the data.\n */\n @property({ type: Object })\n filter: LapisFilter = {};\n\n override render() {\n return <Aggregate fields={this.fields} views={this.views} filter={this.filter} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-aggregate-component': AggregateComponent;\n }\n}\n","export const toYYYYMMDD = (date?: Date) => {\n if (!date) {\n return undefined;\n }\n\n const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit' };\n return date.toLocaleDateString('en-CA', options);\n};\n","import flatpickr from 'flatpickr';\nimport { type FunctionComponent } from 'preact';\nimport 'flatpickr/dist/flatpickr.min.css';\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport { toYYYYMMDD } from './dateConversion';\nimport { Select } from '../components/select';\nimport type { ScaleType } from '../shared/charts/getYAxisScale';\n\nexport type CustomSelectOption = { label: string; dateFrom: string; dateTo: string };\n\nexport interface DateRangeSelectorProps {\n customSelectOptions: CustomSelectOption[];\n earliestDate?: string;\n}\n\nexport const DateRangeSelector: FunctionComponent<DateRangeSelectorProps> = ({\n customSelectOptions,\n earliestDate = '1900-01-01',\n}) => {\n const datePickerRef = useRef<HTMLInputElement>(null);\n const endDatePickerRef = useRef<HTMLInputElement>(null);\n const divRef = useRef<HTMLDivElement>(null);\n const [dateFromPicker, setDateFromPicker] = useState<flatpickr.Instance | null>(null);\n const [dateToPicker, setDateToPicker] = useState<flatpickr.Instance | null>(null);\n\n const [selectedDateRange, setSelectedDateRange] = useState('last6Months');\n const [selectedDates, setSelectedDates] = useState<{ dateFrom: Date; dateTo: Date }>({\n dateFrom: getDatesForSelectorValue('last6Months', customSelectOptions, earliestDate).dateFrom,\n dateTo: getDatesForSelectorValue('last6Months', customSelectOptions, earliestDate).dateTo,\n });\n\n useEffect(() => {\n const commonConfig = {\n allowInput: true,\n dateFormat: 'Y-m-d',\n };\n\n if (datePickerRef.current) {\n setDateFromPicker(\n flatpickr(datePickerRef.current, {\n ...commonConfig,\n defaultDate: selectedDates.dateFrom,\n }),\n );\n }\n\n if (endDatePickerRef.current) {\n setDateToPicker(\n flatpickr(endDatePickerRef.current, {\n ...commonConfig,\n defaultDate: selectedDates.dateTo,\n }),\n );\n }\n\n return () => {\n dateFromPicker?.destroy();\n dateToPicker?.destroy();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [datePickerRef, endDatePickerRef]);\n\n const selectableOptions = () => {\n const presetOptions = [\n { label: 'Custom', value: 'custom' },\n { label: 'All times', value: 'allTimes' },\n { label: 'Last 2 weeks', value: 'last2Weeks' },\n { label: 'Last month', value: 'lastMonth' },\n { label: 'Last 2 weeks', value: 'last2Weeks' },\n { label: 'Last month', value: 'lastMonth' },\n { label: 'Last 2 months', value: 'last2Months' },\n { label: 'Last 3 months', value: 'last3Months' },\n { label: 'Last 6 months', value: 'last6Months' },\n ];\n\n const customOptions = customSelectOptions.map((customSelectOption) => {\n return { label: customSelectOption.label, value: customLabelToOptionValue(customSelectOption.label) };\n });\n\n return [...presetOptions, ...customOptions];\n };\n\n const onSelectChange = (value: string) => {\n setSelectedDateRange(value);\n\n const dateRange = getDatesForSelectorValue(value, customSelectOptions, earliestDate);\n\n dateToPicker?.set('minDate', dateRange.dateFrom);\n dateFromPicker?.set('maxDate', dateRange.dateTo);\n\n dateFromPicker?.setDate(dateRange.dateFrom);\n dateToPicker?.setDate(dateRange.dateTo);\n\n setSelectedDates({\n dateFrom: dateRange.dateFrom,\n dateTo: dateRange.dateTo,\n });\n\n submit();\n };\n\n const onChangeDateFrom = () => {\n if (selectedDates.dateFrom.toDateString() === dateFromPicker?.selectedDates[0].toDateString()) {\n return;\n }\n\n selectedDates.dateFrom = dateFromPicker?.selectedDates[0] || new Date();\n dateToPicker?.set('minDate', dateFromPicker?.selectedDates[0]);\n setSelectedDateRange('custom');\n\n submit();\n };\n\n const onChangeDateTo = () => {\n if (selectedDates.dateTo.toDateString() === dateToPicker?.selectedDates[0].toDateString()) {\n return;\n }\n\n selectedDates.dateTo = dateToPicker?.selectedDates[0] || new Date();\n dateFromPicker?.set('maxDate', dateToPicker?.selectedDates[0]);\n setSelectedDateRange('custom');\n\n submit();\n };\n\n const submit = () => {\n const dateFrom = toYYYYMMDD(dateFromPicker?.selectedDates[0]);\n const dateTo = toYYYYMMDD(dateToPicker?.selectedDates[0]);\n\n const detail = {\n ...(dateFrom !== undefined && { dateFrom }),\n ...(dateTo !== undefined && { dateTo }),\n };\n\n divRef.current?.dispatchEvent(\n new CustomEvent('gs-date-range-changed', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n return (\n <div class='join' ref={divRef}>\n <Select\n items={selectableOptions()}\n selected={selectedDateRange}\n selectStyle='select-bordered rounded-none join-item'\n onChange={(event: Event) => {\n event.preventDefault();\n const select = event.target as HTMLSelectElement;\n const value = select.value as ScaleType;\n onSelectChange(value);\n }}\n />\n <input\n class='input input-bordered rounded-none join-item'\n type='text'\n placeholder='Date from'\n ref={datePickerRef}\n onChange={onChangeDateFrom}\n onBlur={onChangeDateFrom}\n />\n <input\n class='input input-bordered rounded-none join-item'\n type='text'\n placeholder='Date to'\n ref={endDatePickerRef}\n onChange={onChangeDateTo}\n onBlur={onChangeDateFrom}\n />\n </div>\n );\n};\n\nconst customLabelToOptionValue = (customLabel: string) => {\n return `${customLabel}customLabel`;\n};\n\nconst getDatesForSelectorValue = (\n selectorValue: string,\n customSelectOptions: CustomSelectOption[],\n earliestDate: string,\n) => {\n const today = new Date();\n\n const customSelectOption = customSelectOptions.find(\n (option) => customLabelToOptionValue(option.label) === selectorValue,\n );\n if (customSelectOption) {\n return { dateFrom: new Date(customSelectOption.dateFrom), dateTo: new Date(customSelectOption.dateTo) };\n }\n\n switch (selectorValue) {\n case 'last2Weeks': {\n const twoWeeksAgo = new Date(today);\n twoWeeksAgo.setDate(today.getDate() - 14);\n return { dateFrom: twoWeeksAgo, dateTo: today };\n }\n case 'lastMonth': {\n const lastMonth = new Date(today);\n lastMonth.setMonth(today.getMonth() - 1);\n return { dateFrom: lastMonth, dateTo: today };\n }\n case 'last2Months': {\n const twoMonthsAgo = new Date(today);\n twoMonthsAgo.setMonth(today.getMonth() - 2);\n return { dateFrom: twoMonthsAgo, dateTo: today };\n }\n case 'last3Months': {\n const threeMonthsAgo = new Date(today);\n threeMonthsAgo.setMonth(today.getMonth() - 3);\n return { dateFrom: threeMonthsAgo, dateTo: today };\n }\n case 'last6Months': {\n const sixMonthsAgo = new Date(today);\n sixMonthsAgo.setMonth(today.getMonth() - 6);\n return { dateFrom: sixMonthsAgo, dateTo: today };\n }\n case 'allTimes': {\n return { dateFrom: new Date(earliestDate), dateTo: today };\n }\n default:\n return { dateFrom: today, dateTo: today };\n }\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { type CustomSelectOption, DateRangeSelector } from '../../preact/dateRangeSelector/date-range-selector';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<{ dateFrom: string; dateTo: string; }>} gs-date-range-changed - When the date range has changed\n */\n@customElement('gs-date-range-selector')\nexport class DateRangeSelectorComponent extends PreactLitAdapter {\n @property({ type: Array })\n customSelectOptions: CustomSelectOption[] = [];\n\n @property({ type: String })\n earliestDate: string | undefined = '1900-01-01';\n\n override render() {\n return <DateRangeSelector customSelectOptions={this.customSelectOptions} earliestDate={this.earliestDate} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-date-range-selector': DateRangeSelectorComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-date-range-changed': CustomEvent<{\n dateFrom: string;\n dateTo: string;\n }>;\n }\n}\n","import { FetchAggregatedOperator } from '../../operator/FetchAggregatedOperator';\n\nexport async function fetchAutocompletionList(fields: string[], lapis: string, signal?: AbortSignal) {\n const toAncestorInHierarchyOverwriteValues = Array(fields.length - 1)\n .fill(0)\n .map((_, i) => i + 1)\n .map((i) => fields.slice(i).reduce((acc, field) => ({ ...acc, [field]: null }), {}));\n\n const fetchAggregatedOperator = new FetchAggregatedOperator<Record<string, string | null>>({}, fields);\n\n const data = (await fetchAggregatedOperator.evaluate(lapis, signal)).content;\n const locationValues = data\n .map((entry) => fields.reduce((acc, field) => ({ ...acc, [field]: entry[field] }), {}))\n .reduce<Set<string>>((setOfAllHierarchies, entry) => {\n setOfAllHierarchies.add(JSON.stringify(entry));\n toAncestorInHierarchyOverwriteValues.forEach((overwriteValues) => {\n setOfAllHierarchies.add(JSON.stringify({ ...entry, ...overwriteValues }));\n });\n return setOfAllHierarchies;\n }, new Set());\n\n return [...locationValues].map((json) => JSON.parse(json)).sort(compareLocationEntries(fields));\n}\n\nfunction compareLocationEntries(fields: string[]) {\n return (a: Record<string, string | null>, b: Record<string, string | null>) => {\n for (const field of fields) {\n const valueA = a[field];\n const valueB = b[field];\n if (valueA === valueB) {\n continue;\n }\n if (valueA === null) {\n return -1;\n }\n if (valueB === null) {\n return 1;\n }\n return valueA < valueB ? -1 : 1;\n }\n return 0;\n };\n}\n","import { useContext, useRef, useState } from 'preact/hooks';\n\nimport { fetchAutocompletionList } from './fetchAutocompletionList';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { useQuery } from '../useQuery';\n\nexport type LocationFilterProps = {\n value?: string;\n fields: string[];\n};\n\nexport const LocationFilter = ({ value: initialValue, fields }: LocationFilterProps) => {\n const lapis = useContext(LapisUrlContext);\n\n const [value, setValue] = useState(initialValue ?? '');\n const [unknownLocation, setUnknownLocation] = useState(false);\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const { data, error, isLoading } = useQuery(() => fetchAutocompletionList(fields, lapis), [fields, lapis]);\n\n if (isLoading)\n return (\n <form class='flex'>\n <input type='text' class='input input-bordered grow' value={value} disabled />\n <button class='btn ml-1' disabled type='submit'>\n Loading...\n </button>\n </form>\n );\n\n if (error) {\n return (\n <p>\n Error: {error.name} {error.message} {error.stack}\n </p>\n );\n }\n\n const onInput = (event: InputEvent) => {\n if (event.target instanceof HTMLInputElement) {\n const inputValue = event.target.value;\n setValue(inputValue);\n if (unknownLocation) {\n const eventDetail = parseLocation(inputValue, fields);\n if (hasMatchingEntry(data, eventDetail)) {\n setUnknownLocation(false);\n }\n }\n }\n };\n\n const submit = (event: SubmitEvent) => {\n event.preventDefault();\n const eventDetail = parseLocation(value, fields);\n\n if (hasMatchingEntry(data, eventDetail)) {\n setUnknownLocation(false);\n\n formRef.current?.dispatchEvent(\n new CustomEvent('gs-location-changed', {\n detail: eventDetail,\n bubbles: true,\n composed: true,\n }),\n );\n } else {\n setUnknownLocation(true);\n }\n };\n\n return (\n <form class='flex' onSubmit={submit} ref={formRef}>\n <input\n type='text'\n class={`input input-bordered grow ${unknownLocation ? 'border-2 border-error' : ''}`}\n value={value}\n onInput={onInput}\n list='countries'\n />\n <datalist id='countries'>\n {data?.map((v) => {\n const value = fields\n .map((field) => v[field])\n .filter((value) => value !== null)\n .join(' / ');\n return <option key={value} value={value} />;\n })}\n </datalist>\n <button class='btn btn-primary ml-1' type='submit'>\n Submit\n </button>\n </form>\n );\n};\n\nconst parseLocation = (location: string, fields: string[]) => {\n const fieldValues = location.split('/').map((part) => part.trim());\n return fieldValues.reduce((acc, fieldValue, i) => ({ ...acc, [fields[i]]: fieldValue }), {});\n};\n\nconst hasMatchingEntry = (data: Record<string, string>[] | null, eventDetail: Record<string, string>) => {\n if (data === null) {\n return false;\n }\n\n const matchingEntries = Object.entries(eventDetail)\n .filter(([, value]) => value !== undefined)\n .reduce((filteredData, [key, value]) => filteredData.filter((it) => it[key] === value), data);\n\n return matchingEntries.length > 0;\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { LocationFilter } from '../../preact/locationFilter/location-filter';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * ## Tag\n *\n * `gs-location-filter`\n *\n * ## Context\n *\n * This component provides an input field to specify filters for locations.\n *\n * It expects a list of fields that form a strict hierarchical order, such as continent, country, and city.\n * The component retrieves a list of all possible values for these fields from the Lapis instance.\n * This list is then utilized to display autocomplete suggestions and to validate the input.\n *\n * Given `fields` are `['field1', 'field2', ..., 'fieldN']`,\n * then valid values for the location filter must be in the form `valueForField1 / valueForField2 / ... / valueForFieldK`,\n * where `1 <= K <= N`.\n * Values for the fields `i > K` are considered `undefined`.\n *\n * @fires {CustomEvent<Record<string, string>>} gs-location-changed\n * Fired when the field is submitted with a valid location value.\n * The `details` of this event contain an object with all `fields` as keys\n * and the corresponding values as values, if they are not `undefined`.\n * Example:\n * ```\n * {\n * continent: \"Asia\",\n * country: \"China\",\n * city: \"Beijing\"\n * }\n * ```\n */\n@customElement('gs-location-filter')\nexport class LocationFilterComponent extends PreactLitAdapter {\n /**\n * The initial value to use for this location filter.\n * Must be of the form `valueForField1 / valueForField2 / ... / valueForFieldN`.\n */\n @property()\n value = '';\n\n /**\n * The fields to display in the location filter, in hierarchical order.\n * The top-level field should be the first entry in the array.\n * This component assumes that the values for each field form a strict hierarchy\n * (e.g., `fields = ['continent', 'country', 'city']`).\n */\n @property({ type: Array })\n fields: string[] = [];\n\n override render() {\n return <LocationFilter value={this.value} fields={this.fields} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-location-filter': LocationFilterComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-location-changed': CustomEvent<Record<string, string>>;\n }\n}\n","import { FetchAggregatedOperator } from '../../operator/FetchAggregatedOperator';\n\nexport async function fetchAutocompleteList(lapis: string, field: string, signal?: AbortSignal) {\n const fetchAggregatedOperator = new FetchAggregatedOperator<Record<string, string>>({}, [field]);\n\n const data = (await fetchAggregatedOperator.evaluate(lapis, signal)).content;\n\n return data.map((item) => item[field]);\n}\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useRef } from 'preact/hooks';\n\nimport { fetchAutocompleteList } from './fetchAutocompleteList';\nimport { LapisUrlContext } from '../LapisUrlContext';\nimport { ErrorDisplay } from '../components/error-display';\nimport { LoadingDisplay } from '../components/loading-display';\nimport { NoDataDisplay } from '../components/no-data-display';\nimport { useQuery } from '../useQuery';\n\nexport interface TextInputProps {\n lapisField: string;\n placeholderText?: string;\n}\n\nexport const TextInput: FunctionComponent<TextInputProps> = ({ lapisField, placeholderText }) => {\n const lapis = useContext(LapisUrlContext);\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { data, error, isLoading } = useQuery(() => fetchAutocompleteList(lapis, lapisField), [lapisField, lapis]);\n\n if (isLoading) {\n return <LoadingDisplay />;\n }\n\n if (error !== null) {\n return <ErrorDisplay error={error} />;\n }\n\n if (data === null) {\n return <NoDataDisplay />;\n }\n\n const onInput = () => {\n const value = inputRef.current?.value;\n\n if (isValidValue(value)) {\n inputRef.current?.dispatchEvent(\n new CustomEvent('gs-text-input-changed', {\n detail: { [lapisField]: value },\n bubbles: true,\n composed: true,\n }),\n );\n }\n };\n\n const isValidValue = (value: string | undefined) => {\n if (value === undefined) {\n return false;\n }\n return data.includes(value);\n };\n\n return (\n <>\n <input\n type='text'\n class='input input-bordered'\n placeholder={placeholderText !== undefined ? placeholderText : lapisField}\n onInput={onInput}\n ref={inputRef}\n list={lapisField}\n />\n <datalist id={lapisField}>\n {data.map((item) => (\n <option value={item} key={item} />\n ))}\n </datalist>\n </>\n );\n};\n","import { customElement, property } from 'lit/decorators.js';\n\nimport { TextInput } from '../../preact/textInput/text-input';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<Record<string, string>>} gs-text-input-changed - When the text input has changed\n */\n@customElement('gs-text-input')\nexport class TextInputComponent extends PreactLitAdapter {\n @property()\n lapisField = '';\n\n @property()\n placeholderText = '';\n\n override render() {\n return <TextInput lapisField={this.lapisField} placeholderText={this.placeholderText} />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-text-input': TextInputComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-text-input-changed': CustomEvent<Record<string, string>>;\n }\n}\n","import type { ReferenceGenome } from '../../lapisApi/ReferenceGenome';\nimport type { SequenceType } from '../../types';\n\nexport const sequenceTypeFromSegment = (\n possibleSegment: string | undefined,\n referenceGenome: ReferenceGenome,\n): SequenceType | undefined => {\n if (possibleSegment === undefined) {\n return referenceGenome.nucleotideSequences.length === 1 ? 'nucleotide' : undefined;\n }\n\n if (referenceGenome.nucleotideSequences.some((sequence) => sequence.name === possibleSegment)) {\n return 'nucleotide';\n }\n\n if (referenceGenome.genes.some((gene) => gene.name === possibleSegment)) {\n return 'amino acid';\n }\n return undefined;\n};\n","import { type SelectedFilters } from './mutation-filter';\nimport { sequenceTypeFromSegment } from './sequenceTypeFromSegment';\nimport type { ReferenceGenome } from '../../lapisApi/ReferenceGenome';\nimport { Deletion, Insertion, Substitution } from '../../utils/mutations';\n\ntype ParsedMutationFilter = {\n [MutationType in keyof SelectedFilters]: { type: MutationType; value: SelectedFilters[MutationType][number] };\n}[keyof SelectedFilters];\n\nexport const parseAndValidateMutation = (\n value: string,\n referenceGenome: ReferenceGenome,\n): ParsedMutationFilter | null => {\n const possibleInsertion = Insertion.parse(value);\n if (possibleInsertion !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleInsertion.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideInsertions', value: possibleInsertion };\n case 'amino acid':\n return { type: 'aminoAcidInsertions', value: possibleInsertion };\n case undefined:\n return null;\n }\n }\n\n const possibleDeletion = Deletion.parse(value);\n if (possibleDeletion !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleDeletion.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideMutations', value: possibleDeletion };\n case 'amino acid':\n return { type: 'aminoAcidMutations', value: possibleDeletion };\n case undefined:\n return null;\n }\n }\n\n const possibleSubstitution = Substitution.parse(value);\n if (possibleSubstitution !== null) {\n const sequenceType = sequenceTypeFromSegment(possibleSubstitution.segment, referenceGenome);\n switch (sequenceType) {\n case 'nucleotide':\n return { type: 'nucleotideMutations', value: possibleSubstitution };\n case 'amino acid':\n return { type: 'aminoAcidMutations', value: possibleSubstitution };\n case undefined:\n return null;\n }\n }\n\n return null;\n};\n","import type { FunctionComponent } from 'preact';\n\nexport const DeleteIcon: FunctionComponent = () => {\n return (\n <svg\n fill='currentColor'\n stroke-width='0'\n xmlns='http://www.w3.org/2000/svg'\n viewBox='0 0 16 16'\n style='overflow: visible; color: currentcolor;'\n height='1em'\n width='1em'\n >\n <path d='M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z' />\n </svg>\n );\n};\n","import { type FunctionComponent } from 'preact';\nimport { useContext, useRef, useState } from 'preact/hooks';\n\nimport { parseAndValidateMutation } from './parseAndValidateMutation';\nimport { type Deletion, type Insertion, type Mutation, type Substitution } from '../../utils/mutations';\nimport { ReferenceGenomeContext } from '../ReferenceGenomeContext';\nimport { singleGraphColorRGBByName } from '../shared/charts/colors';\nimport { DeleteIcon } from '../shared/icons/DeleteIcon';\n\nexport type MutationFilterProps = {};\n\nexport type SelectedFilters = {\n nucleotideMutations: (Substitution | Deletion)[];\n aminoAcidMutations: (Substitution | Deletion)[];\n nucleotideInsertions: Insertion[];\n aminoAcidInsertions: Insertion[];\n};\n\nexport type SelectedMutationFilterStrings = {\n [Key in keyof SelectedFilters]: string[];\n};\n\nexport const MutationFilter: FunctionComponent<MutationFilterProps> = () => {\n const referenceGenome = useContext(ReferenceGenomeContext);\n const [selectedFilters, setSelectedFilters] = useState<SelectedFilters>({\n nucleotideMutations: [],\n aminoAcidMutations: [],\n nucleotideInsertions: [],\n aminoAcidInsertions: [],\n });\n const [inputValue, setInputValue] = useState('');\n const [isError, setIsError] = useState(false);\n const formRef = useRef<HTMLFormElement>(null);\n\n const handleSubmit = (event: Event) => {\n event.preventDefault();\n\n const parsedMutation = parseAndValidateMutation(inputValue, referenceGenome);\n\n if (parsedMutation === null) {\n setIsError(true);\n return;\n }\n\n const newSelectedValues = {\n ...selectedFilters,\n [parsedMutation.type]: [...selectedFilters[parsedMutation.type], parsedMutation.value],\n };\n\n setSelectedFilters(newSelectedValues);\n fireChangeEvent(newSelectedValues);\n setInputValue('');\n };\n\n const fireChangeEvent = (selectedFilters: SelectedFilters) => {\n const detail = mapToMutationFilterStrings(selectedFilters);\n\n formRef.current?.dispatchEvent(\n new CustomEvent<SelectedMutationFilterStrings>('gs-mutation-filter-changed', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n const handleOnBlur = () => {\n const detail = mapToMutationFilterStrings(selectedFilters);\n\n formRef.current?.dispatchEvent(\n new CustomEvent<SelectedMutationFilterStrings>('gs-mutation-filter-on-blur', {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n const handleInputChange = (event: Event) => {\n setInputValue((event.target as HTMLInputElement).value);\n setIsError(false);\n };\n\n return (\n <div class={`rounded-lg border border-gray-300 bg-white p-2`}>\n <SelectedMutationDisplay\n selectedFilters={selectedFilters}\n setSelectedFilters={setSelectedFilters}\n fireChangeEvent={fireChangeEvent}\n />\n\n <form className='mt-2 w-full' onSubmit={handleSubmit} ref={formRef}>\n <label className={`input flex items-center gap-2 ${isError ? 'input-error' : 'input-bordered'}`}>\n <input\n className='grow min-w-0'\n type='text'\n value={inputValue}\n onInput={handleInputChange}\n placeholder={'Enter a mutation'}\n onBlur={handleOnBlur}\n />\n <button className='btn btn-sm'>+</button>\n </label>\n </form>\n </div>\n );\n};\n\nconst SelectedMutationDisplay: FunctionComponent<{\n selectedFilters: SelectedFilters;\n setSelectedFilters: (selectedFilters: SelectedFilters) => void;\n fireChangeEvent: (selectedFilters: SelectedFilters) => void;\n}> = ({ selectedFilters, setSelectedFilters, fireChangeEvent }) => {\n const onSelectedRemoved = <MutationType extends keyof SelectedFilters>(\n mutation: SelectedFilters[MutationType][number],\n key: MutationType,\n ) => {\n const newSelectedValues = {\n ...selectedFilters,\n [key]: selectedFilters[key].filter((i) => !mutation.equals(i)),\n };\n\n setSelectedFilters(newSelectedValues);\n\n fireChangeEvent(newSelectedValues);\n };\n\n return (\n <ul class='flex flex-wrap'>\n {selectedFilters.nucleotideMutations.map((mutation) => (\n <li key={mutation.toString()}>\n <SelectedNucleotideMutation\n mutation={mutation}\n onDelete={(mutation: Substitution | Deletion) =>\n onSelectedRemoved(mutation, 'nucleotideMutations')\n }\n />\n </li>\n ))}\n {selectedFilters.aminoAcidMutations.map((mutation) => (\n <li key={mutation.toString()}>\n <SelectedAminoAcidMutation\n mutation={mutation}\n onDelete={(mutation: Substitution | Deletion) =>\n onSelectedRemoved(mutation, 'aminoAcidMutations')\n }\n />\n </li>\n ))}\n {selectedFilters.nucleotideInsertions.map((insertion) => (\n <li key={insertion.toString()}>\n <SelectedNucleotideInsertion\n insertion={insertion}\n onDelete={(insertion) => onSelectedRemoved(insertion, 'nucleotideInsertions')}\n />\n </li>\n ))}\n {selectedFilters.aminoAcidInsertions.map((insertion) => (\n <li key={insertion.toString()}>\n <SelectedAminoAcidInsertion\n insertion={insertion}\n onDelete={(insertion: Insertion) => onSelectedRemoved(insertion, 'aminoAcidInsertions')}\n />\n </li>\n ))}\n </ul>\n );\n};\n\nconst SelectedAminoAcidInsertion: FunctionComponent<{\n insertion: Insertion;\n onDelete: (insertion: Insertion) => void;\n}> = ({ insertion, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('teal', 0.3);\n const textColor = singleGraphColorRGBByName('teal', 1);\n return (\n <SelectedFilter\n mutation={insertion}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedAminoAcidMutation: FunctionComponent<{\n mutation: Substitution | Deletion;\n onDelete: (mutation: Substitution | Deletion) => void;\n}> = ({ mutation, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('rose', 0.3);\n const textColor = singleGraphColorRGBByName('rose', 1);\n return (\n <SelectedFilter\n mutation={mutation}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedNucleotideMutation: FunctionComponent<{\n mutation: Substitution | Deletion;\n onDelete: (insertion: Substitution | Deletion) => void;\n}> = ({ mutation, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('indigo', 0.3);\n const textColor = singleGraphColorRGBByName('indigo', 1);\n return (\n <SelectedFilter\n mutation={mutation}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\nconst SelectedNucleotideInsertion: FunctionComponent<{\n insertion: Insertion;\n onDelete: (insertion: Insertion) => void;\n}> = ({ insertion, onDelete }) => {\n const backgroundColor = singleGraphColorRGBByName('green', 0.3);\n const textColor = singleGraphColorRGBByName('green', 1);\n\n return (\n <SelectedFilter\n mutation={insertion}\n onDelete={onDelete}\n backgroundColor={backgroundColor}\n textColor={textColor}\n />\n );\n};\n\ntype SelectedFilterProps<MutationType extends Mutation> = {\n mutation: MutationType;\n onDelete: (mutation: MutationType) => void;\n backgroundColor: string;\n textColor: string;\n};\n\nconst SelectedFilter = <MutationType extends Mutation>({\n mutation,\n onDelete,\n backgroundColor,\n textColor,\n}: SelectedFilterProps<MutationType>) => {\n return (\n <div\n class='flex items-center flex-nowrap gap-1 rounded me-1 px-2.5 py-0.5 font-medium text-xs mb-1'\n style={{ backgroundColor, color: textColor }}\n >\n <div>{mutation.toString()}</div>\n <button onClick={() => onDelete(mutation)}>\n <DeleteIcon />\n </button>\n </div>\n );\n};\n\nfunction mapToMutationFilterStrings(selectedFilters: SelectedFilters) {\n return {\n aminoAcidMutations: selectedFilters.aminoAcidMutations.map((mutation) => mutation.toString()),\n nucleotideMutations: selectedFilters.nucleotideMutations.map((mutation) => mutation.toString()),\n aminoAcidInsertions: selectedFilters.aminoAcidInsertions.map((insertion) => insertion.toString()),\n nucleotideInsertions: selectedFilters.nucleotideInsertions.map((insertion) => insertion.toString()),\n };\n}\n","import { customElement } from 'lit/decorators.js';\n\nimport { type TextInputComponent } from './text-input-component';\nimport { MutationFilter, type SelectedMutationFilterStrings } from '../../preact/mutationFilter/mutation-filter';\nimport { PreactLitAdapter } from '../PreactLitAdapter';\n\n/**\n * @fires {CustomEvent<SelectedMutationFilterStrings>} gs-mutation-filter-changed - When the mutation filter values have changed\n * @fires {CustomEvent<SelectedMutationFilterStrings>} gs-mutation-filter-on-blur - When the mutation filter has lost focus\n */\n@customElement('gs-mutation-filter')\nexport class MutationFilterComponent extends PreactLitAdapter {\n override render() {\n return <MutationFilter />;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'gs-mutation-filter': TextInputComponent;\n }\n\n interface HTMLElementEventMap {\n 'gs-mutation-filter-changed': CustomEvent<SelectedMutationFilterStrings>;\n 'gs-mutation-filter-on-blur': CustomEvent<SelectedMutationFilterStrings>;\n }\n}\n"],"names":["t","e","o","s","r","n","S","c","i","h","a","l","p","d","u","f","y","_a","z","__decorateClass","property","customElement","D","wrapper","useRef","useEffect","jsx","b","useState","useMemo","_","jsxs","createContext","item","useContext","error","Toolbar","ReactiveElement","byProportion","datasets","tooltip","v","padStart","padZoneStr","monthDiff","C.M","absFloor","prettyUnit","C.Y","C.W","C.D","C.DATE","C.H","C.MIN","C.S","C.MS","isUndefined","isDayjs","parseLocale","dayjs","parseDate","C.REGEX_PARSE","m","Dayjs","C.INVALID_DATE_STRING","instanceFactory","instanceFactorySet","C.MILLISECONDS_A_MINUTE","C.MILLISECONDS_A_HOUR","C.MILLISECONDS_A_SECOND","C.FORMAT_DEFAULT","getShort","get$H","matches","C.REGEX_FORMAT","diff","getMonth","C.Q","C.MILLISECONDS_A_WEEK","C.MILLISECONDS_A_DAY","proto","getYearFirstThursday","getCurrentWeekThursday","total","data","granularity","aggregatedResponse","options","value","selectedFilters","mutation","insertion"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjKA,MAAM,qBAAqB,UAAU,aAAa;AAClD,MAAM,gCAAgC,UAAU,sBAAsB;AAE/D,MAAe,oBAAf,MAAe,0BAAyBW,EAAgB;AAAA,EAAxD,cAAA;AAAA,UAAA,GAAA,SAAA;AAWa,SAAA,QAAA;AAWmB,SAAA,kBAAA;AAAA,MAC/B,qBAAqB,CAAC;AAAA,MACtB,OAAO,CAAC;AAAA,IAAA;AAAA,EACZ;AAAA,EAES,OAAO,mBAAmC;AACvC,YAAA,IAAI,cAAc,KAAK,KAAK;AACpC,UAAM,OACDX,oBAAA,gBAAgB,UAAhB,EAAyB,OAAO,KAAK,OAClC,UAAAA,oBAAC,uBAAuB,UAAvB,EAAgC,OAAO,KAAK,iBACxC,UAAK,KAAA,OAAA,GACV,EACJ,CAAA;AAEJ,UAAM,OAAO,iBAAiB;AACvB,WAAA,MAAM,KAAK,UAAU;AAAA,EAChC;AAGJ;AAxCoB,kBAAA,SAAS,CAAC,oBAAoB,6BAA6B;AADxE,IAAe,mBAAf;AAWHP,kBAAA;AAAA,EADC,QAAQ,EAAE,SAAS,cAAc;AAAA,GAVhB,iBAWlB,WAAA,SAAA,CAAA;AAWAA,kBAAA;AAAA,EADC,QAAQ,EAAE,SAAS,wBAAwB,WAAW,MAAM;AAAA,GArB3C,iBAsBlB,WAAA,mBAAA,CAAA;ACnCJ,MAAM,mBAAmB,UAAU,WAAW;AAEvC,MAAe,oCAAf,MAAe,0CAAyC,iBAAiB;AAEhF;AADI,kCAAgB,SAAS,CAAC,GAAG,iBAAiB,QAAQ,gBAAgB;AADnE,IAAe,mCAAf;;;;;;;;;;;;ACEM,IAAA,8BAAN,cAA0C,iCAAiC;AAAA,EAA3E,cAAA;AAAA,UAAA,GAAA,SAAA;AAEH,SAAA,WAAwC;AAGX,SAAA,eAAA;AAG7B,SAAA,QAAgB,CAAC,OAAO;AAAA,EAAA;AAAA,EAEf,SAAS;AACP,WAAAO,oBAAC,oBAAmB,EAAA,UAAU,KAAK,UAAU,cAAc,KAAK,cAAc,OAAO,KAAK,MAAO,CAAA;AAAA,EAC5G;AACJ;AAXIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GADhB,4BAET,WAAA,YAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJjB,4BAKT,WAAA,gBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAPhB,4BAQT,WAAA,SAAA,CAAA;AARS,8BAAND,kBAAA;AAAA,EADNE,IAAc,kCAAkC;AAAA,GACpC,2BAAA;ACTN,SAAS,uBAAuB,MAAwB;AACpD,SAAA,KAAK,IAAI,CAAC,kBAAkB;AACxB,WAAA;AAAA,MACH,WAAW,cAAc,SAAS,SAAS;AAAA,MAC3C,OAAO,cAAc;AAAA,IAAA;AAAA,EACzB,CACH;AACL;ACNgB,SAAA,sBAAsB,MAAqC,oBAAwC;AACzG,QAAAiB,gBAAe,CAAC,kBAA+C;AACjE,WAAO,cAAc,cAAc,mBAAmB,OAAO,cAAc,cAAc,mBAAmB;AAAA,EAAA;AAGhH,SAAO,KAAK,OAAOA,aAAY,EAAE,IAAI,CAAC,kBAAkB;AAC7C,WAAA;AAAA,MACH,UAAU,cAAc,SAAS,SAAS;AAAA,MAC1C,MAAM,cAAc;AAAA,MACpB,OAAO,cAAc;AAAA,MACrB,YAAY,cAAc;AAAA,IAAA;AAAA,EAC9B,CACH;AACL;AChBA,MAAM,UAAU;AAEH,MAAA,wBAAwB,CAAC5B,IAAWiB,OAAc;AACrD,QAAA,SAASjB,GAAE,MAAM,OAAO;AACxB,QAAA,SAASiB,GAAE,MAAM,OAAO;AAE9B,MAAI,UAAU,QAAQ;AAClB,QAAI,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG;AACzB,aAAO,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,CAAC;AAAA,IAC5C;AACO,WAAA,SAAS,OAAO,CAAC,GAAG,EAAE,IAAI,SAAS,OAAO,CAAC,GAAG,EAAE;AAAA,EAC3D;AACA,QAAM,IAAI,MAAM,8BAA8BjB,EAAC,OAAOiB,EAAC,EAAE;AAC7D;ACPO,MAAM,uBAAuB,CAChC,MACA,cACA,uBACC;AACM,SAAA,qBAAqB,MAAM,YAAY,EAAE,OAAO,CAAC,QAAQ,aAAa,KAAK,kBAAkB,CAAC;AACzG;AAEA,MAAM,uBAAuB,CAAC,MAAqC,iBAA+B;AACxF,QAAA,cAAc,MAAM,YAAY;AAChC,QAAA,kDAAkC;AAClC,QAAA,qCAAqB;AAE3B,aAAW,iBAAiB,MAAM;AACxB,UAAA,YACD,cAAc,SAAS,UAAU,GAAG,cAAc,SAAS,OAAO,MAAM,MACzE,cAAc,SAAS;AAC3B,mBAAe,IAAI,UAAU,cAAc,SAAS,gBAAgB;AAEpE,UAAM,2CAA2C,MAAM;AACnD,UAAI,CAAC,4BAA4B,IAAI,QAAQ,GAAG;AACtC,cAAA,4BAAY;AAClB,oBAAY,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC;AAChD,cAAM,IAAI,cAAc,SAAS,kBAAkB,CAAC;AACxB,oCAAA,IAAI,UAAU,KAAK;AAAA,MACnD;AAAA,IAAA;AAEqC;AAEzC,UAAM,oBACF,cAAc,SAAS,iBAAiB,cAAc,SAAS,oBAAoB;AAEvF,UAAM,4BAA4B,MAAM;AAC9B,YAAA,mBAAmB,4BAA4B,IAAI,QAAQ;AAChD,uBAAA,IAAI,mBAAmB,cAAc,UAAU;AAC/C,uBAAA;AAAA,QACb,cAAc,SAAS;AAAA,QACvB,iBAAiB,IAAI,cAAc,SAAS,gBAAgB,IAAK,cAAc;AAAA,MAAA;AAAA,IACnF;AAEsB;EAC9B;AACM,QAAA,qCAAqC,CAAC,GAAG,4BAA4B,QAAS,CAAA,EAC/E,IAAI,CAAC,CAAC,UAAU,iBAAiB,OAAO,EAAE,UAAU,aAAa,oBAAoB,EACrF,KAAK,CAACjB,IAAGiB,OAAM;AACZ,WAAO,sBAAsBjB,GAAE,UAAUiB,GAAE,QAAQ;AAAA,EAAA,CACtD;AAEE,SAAA,mCAAmC,IAAI,CAAC,iCAAiC;AAC5E,UAAM,cAAc,MAAM,YAAY,EAAE,IAAI,CAAC,SAAS;AAC3C,aAAA;AAAA,QACH,CAAC,IAAI,GAAG;AAAA,UACJ,YAAY,6BAA6B,YAAY,IAAI,IAAI;AAAA,UAC7D,aAAa,SAAS,eAAe,IAAI,6BAA6B,QAAQ;AAAA,QAClF;AAAA,MAAA;AAAA,IACJ,CACH;AAEM,WAAA;AAAA,MACH,UAAU,6BAA6B;AAAA,MACvC,GAAG,YAAY,OAAO,CAAC,KAAK,UAAU,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE;AAAA,IAAA;AAAA,EAClE,CACH;AACL;AAOA,MAAM,eAAe,CAAC,KAA2B,uBAA2C;AACxF,QAAM,wBAAwB,OAAO,OAAO,GAAG,EAAE;AAAA,IAC7C,CACI,SAIC,OAAO,SAAS;AAAA,EAAA;AAGlB,SAAA,sBAAsB,KAAK,CAAC,SAAS;AAEpC,WAAA,CAAC,KAAK,eAAe,KAAK,cAAc,mBAAmB,OAAO,KAAK,cAAc,mBAAmB;AAAA,EAAA,CAE/G;AACL;ACrEO,MAAM,gBAAuD,CAAC,EAAE,MAAM,cAAc,yBAAyB;AAChH,QAAM,aAAa,MAAM;AACd,WAAA;AAAA,MACH;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,UACF,SAAS,CAACjB,IAAWiB,OAAc;AACxB,mBAAA,sBAAsBjB,IAAGiB,EAAC;AAAA,UACrC;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,GAAG,gBAAgB;AAAA,IAAA;AAAA,EACvB;AAGJ,QAAM,kBAAkB,MAAM;AAC1B,WAAO,MAAM,YAAY,EAAE,IAAI,CAAC,SAAS;AAC9B,aAAA;AAAA,QACH,MAAM;AAAA,QACN,MAAM;AAAA,UACF,SAAS,CAACjB,IAAaiB,OAAgB;AACnC,kBAAM,cAAcjB,GAAE;AACtB,kBAAM,cAAciB,GAAE;AACtB,gBAAI,cAAc,aAAa;AACpB,qBAAA;AAAA,YACX;AACA,gBAAI,cAAc,aAAa;AACpB,qBAAA;AAAA,YACX;AAEO,mBAAA;AAAA,UACX;AAAA,QACJ;AAAA,QACA,WAAW,CAAC,SAAmB,iBAAiB,KAAK,UAAU;AAAA,QAC/D,YAAY,CAAC,MAAgB,QAAa;AAEtC,cAAI,QAAQ,MAAM;AACd,mBAAO;UACX;AAEA,iBAAO,WAAW,IAAI;AAAA,QAC1B;AAAA,MAAA;AAAA,IACJ,CACH;AAAA,EAAA;AAGC,QAAA,aAAa,CAAC,SAAmB;AACnC,QAAI,KAAK,eAAe,KAAK,aAAa,MAAQ;AACvC,aAAA;AAAA,QACH,OAAO;AAAA,UACH,GAAG,WAAW;AAAA,UACd,OAAO;AAAA,QACX;AAAA,MAAA;AAAA,IAER;AACA,WAAO;EAAC;AAGZ,QAAM,YAAY,qBAAqB,MAAM,cAAc,kBAAkB,EAAE,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC;AAEvG,SAAAD,oBAAC,SAAM,MAAM,WAAW,SAAS,cAAc,YAAY,KAAM,CAAA;AAC5E;ACjFa,MAAA,iBAAiB,CAAChB,IAAWiB,OAAc;AAC9C,QAAA,aAAa,UAAU,MAAMjB,EAAC;AAC9B,QAAA,aAAa,UAAU,MAAMiB,EAAC;AAEpC,MAAI,cAAc,YAAY;AAC1B,UAAM,WAAW,WAAW;AAC5B,UAAM,WAAW,WAAW;AAC5B,QAAI,aAAa,UAAa,aAAa,UAAa,aAAa,UAAU;AACpE,aAAA,SAAS,cAAc,QAAQ;AAAA,IAC1C;AACA,UAAM,YAAY,WAAW;AAC7B,UAAM,YAAY,WAAW;AAC7B,QAAI,cAAc,WAAW;AACzB,aAAO,YAAY;AAAA,IACvB;AACA,WAAO,WAAW,gBAAgB,cAAc,WAAW,eAAe;AAAA,EAC9E;AACA,QAAM,IAAI,MAAM,sBAAsBjB,EAAC,OAAOiB,EAAC,EAAE;AACrD;ACTO,MAAM,kBAA2D,CAAC,EAAE,WAAW;AAClF,QAAM,aAAa,MAAM;AACd,WAAA;AAAA,MACH;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,UACF,SAAS,CAACjB,IAAWiB,OAAc;AACxB,mBAAA,eAAejB,IAAGiB,EAAC;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,IAAA;AAAA,EACJ;AAGE,QAAA,YAAY,uBAAuB,IAAI,EAAE,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC;AAEvE,SAAAD,oBAAC,SAAM,MAAM,WAAW,SAAS,cAAc,YAAY,KAAM,CAAA;AAC5E;AClBA,MAAM,iBAAyD,CAAC,EAAE,MAAM,yBAAyB;AAC7F,QAAM,aAAa,MAAM;AACd,WAAA;AAAA,MACH;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,UACF,SAAS,CAAChB,IAAWiB,OAAc;AACxB,mBAAA,8BAA8BjB,IAAGiB,EAAC;AAAA,UAC7C;AAAA,QACJ;AAAA,MACJ;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN,MAAM;AAAA,QACN,WAAW,CAAC,SAAiB,iBAAiB,IAAI;AAAA,MACtD;AAAA,IAAA;AAAA,EACJ;AAGE,QAAA,YAAY,sBAAsB,MAAM,kBAAkB,EAAE,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC;AAE1F,SAAAD,oBAAC,SAAM,MAAM,WAAW,SAAS,cAAc,YAAY,KAAM,CAAA;AAC5E;ACtCO,MAAM,wBAA4D;AAAA,EACrE,YACY,QACA,cACV;AAFU,SAAA,SAAA;AACA,SAAA,eAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,UAAkB,QAAwD;AAC/E,UAAA,cAAc,MAAM,gBAAgB,UAAU,KAAK,QAAQ,KAAK,cAAc,MAAM,GAAG;AAEvF,UAAA,UAA4B,WAAW,IAAI,CAAC,EAAE,OAAO,iBAAiB,cAAc,gBAAgB;AAAA,MACtG,MAAM;AAAA,MACN,UAAU,IAAI,UAAU,gBAAgB,QAAW,UAAU,eAAe;AAAA,MAC5E;AAAA,IACF,EAAA;AAEF,WAAO,EAAE,QAAQ;AAAA,EACrB;AACJ;ACnBO,SAAS,gBAAgB,SAAsB,cAA4B,OAAe,QAAsB;AACnH,QAAM,YAAY,IAAI,wBAAwB,SAAS,YAAY;AACnE,QAAM,WAAW,IAAI,aAAa,WAAW,CAAChB,IAAGiB,OAAM;AACnD,QAAIjB,GAAE,SAAS,YAAYiB,GAAE,SAAS,SAAS;AACnC,cAAAjB,GAAE,SAAS,WAAW,IAAI,cAAciB,GAAE,SAAS,WAAW,EAAE;AAAA,IAC5E;AACA,WAAOjB,GAAE,SAAS,WAAWiB,GAAE,SAAS;AAAA,EAAA,CAC3C;AACM,SAAA,SAAS,SAAS,OAAO,MAAM;AAC1C;ACFsB,eAAA,mBAClB,SACA,cACA,OACF;AACE,QAAM,4BAA4B,MAAM,8BAA8B,SAAS,cAAc,KAAK,GAAG;AACrG,QAAM,cAAc,MAAM,gBAAgB,SAAS,cAAc,KAAK,GAAG;AAElE,SAAA;AAAA,IACH;AAAA,IACA;AAAA,EAAA;AAER;AAEgB,SAAA,oBACZ,MACA,mBACA,wBACF;AACE,WAAS,mBAAmB,eAA8B;AAClD,QAAA,cAAc,SAAS,YAAY,QAAW;AACvC,aAAA;AAAA,IACX;AACA,WAAO,kBAAkB;AAAA,MACrB,CAAC,qBACG,iBAAiB,YAAY,cAAc,SAAS,WAAW,iBAAiB;AAAA,IAAA;AAAA,EAE5F;AAEM,QAAA,2BAA2B,CAAC,kBAA+C;AAC7E,WAAO,uBAAuB;AAAA,MAC1B,CAAC,0BACG,sBAAsB,WAAW,sBAAsB,SAAS,cAAc;AAAA,IAAA;AAAA,EACtF;AAGJ,QAAM,mCAAmC,KAAK,yBAAyB,OAAO,kBAAkB;AAEzF,SAAA;AAAA,IACH,YAAY,KAAK,WAAW,OAAO,kBAAkB;AAAA,IACrD,WAAW,iCAAiC,OAAO,wBAAwB;AAAA,IAC3E,UAAU;AAAA,EAAA;AAElB;ACjBO,MAAM,YAA+C,CAAC,EAAE,SAAS,cAAc,YAAY;AACxF,QAAA,QAAQO,EAAW,eAAe;AACxC,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,SAAS,YAAY;AAC7C,WAAA,mBAAmB,SAAS,cAAc,KAAK;AAAA,EACvD,GAAA,CAAC,SAAS,cAAc,KAAK,CAAC;AAEjC,QAAM,WAAW;AACjB,MAAI,WAAW;AACX,+BACK,UAAS,EAAA,SAAS,UACf,UAAAR,oBAAC,kBAAe,EACpB,CAAA;AAAA,EAER;AAEA,MAAI,UAAU,MAAM;AAChB,+BACK,UAAS,EAAA,SAAS,UACf,UAACA,oBAAA,cAAA,EAAa,MAAc,CAAA,EAChC,CAAA;AAAA,EAER;AAEA,MAAI,SAAS,MAAM;AACf,+BACK,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,EACnB,CAAA;AAAA,EAER;AAGI,SAAAA,oBAAC,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,eAAe,MAAM,cAA4B,MAAc,CAAA,EAClF,CAAA;AAER;AAQA,MAAM,gBAAsD,CAAC,EAAE,eAAe,cAAc,YAAY;AAC9F,QAAA,CAAC,oBAAoB,qBAAqB,IAAIE,EAAS,EAAE,KAAK,MAAM,KAAK,EAAA,CAAG;AAElF,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,qBAAqB,YAAY;AACnF,QAAM,CAAC,wBAAwB,yBAAyB,IAAIA,EAAkC;AAAA,IAC1F,EAAE,OAAO,iBAAiB,SAAS,MAAM,MAAM,eAAe;AAAA,IAC9D,EAAE,OAAO,aAAa,SAAS,MAAM,MAAM,WAAW;AAAA,EAAA,CACzD;AAED,QAAM,eAAe,oBAAoB,eAAe,mBAAmB,sBAAsB;AAE3F,QAAA,SAAS,CAAC,SAAe;AAC3B,YAAQ,MAAM;AAAA,MACV,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SAAUF,oBAAA,gBAAA,EAAe,MAAM,aAAa,WAAW,oBAAwC;AAAA,QAAA;AAAA,MAEvG,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,MAAM,aAAa;AAAA,cACnB;AAAA,cACA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAGZ,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SAASA,oBAAC,iBAAgB,EAAA,MAAM,aAAa,YAAY;AAAA,QAAA;AAAA,IAErE;AAAA,EAAA;AAGJ,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAEvC,QAAA,UAAU,CAAC,cACbA;AAAAA,IAACU;AAAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAID,SAAAV,oBAAC,MAAK,EAAA,MAAY,QAAkB,CAAA;AAC/C;AAaA,MAAMU,YAA2C,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AAEE,SAAAL,oBAAC,OAAI,EAAA,OAAM,iBACP,UAAA;AAAA,IAACL,oBAAA,iBAAA,EAAgB,mBAAsC,qBAA4C,CAAA;AAAA,IAClG,cAAc,WACXA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,MAAA;AAAA,IACJ;AAAA,KAEF,cAAc,WAAW,cAAc,WAEjCK,oBAAA,UAAA,EAAA,UAAA;AAAA,MAAAL;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG;AAAA,UACA,kBAAkB,CAAC,QAAQ,sBAAsB,CAAC,UAAU,EAAE,GAAG,MAAM,IAAA,EAAM;AAAA,UAC7E,kBAAkB,CAAC,QAAQ,sBAAsB,CAAC,UAAU,EAAE,GAAG,MAAM,IAAA,EAAM;AAAA,UAC7E,eAAe;AAAA,QAAA;AAAA,MACnB;AAAA,MACAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SAAS,MAAM,sBAAsB,aAAa,WAAW,kBAAkB;AAAA,UAC/E,UAAS;AAAA,QAAA;AAAA,MACb;AAAA,IAAA,GACJ;AAAA,IAEH,cAAc,gBACXA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS,MAAM,uBAAuB,aAAa,UAAU;AAAA,QAC7D,UAAS;AAAA,MAAA;AAAA,IACb;AAAA,IAEHA,oBAAA,MAAA,EAAK,WAAU,QAAO,SAAQ,sBAAqB;AAAA,EACxD,EAAA,CAAA;AAER;;;;;;;;;;;;ACxLa,IAAA,qBAAN,cAAiC,iCAAiC;AAAA,EAAlE,cAAA;AAAA,UAAA,GAAA,SAAA;AAEoB,SAAA,UAAA,EAAE,aAAa,GAAG;AAGZ,SAAA,eAAA;AAGb,SAAA,QAAA,CAAC,SAAS,MAAM;AAAA,EAAA;AAAA,EAEvB,SAAS;AACP,WAAAA,oBAAC,WAAU,EAAA,SAAS,KAAK,SAAS,cAAc,KAAK,cAAc,OAAO,KAAK,MAAO,CAAA;AAAA,EACjG;AACJ;AAXIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADjB,mBAET,WAAA,WAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJjB,mBAKT,WAAA,gBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAPhB,mBAQT,WAAA,SAAA,CAAA;AARS,qBAAND,kBAAA;AAAA,EADNE,IAAc,wBAAwB;AAAA,GAC1B,kBAAA;ACJG,SAAA,+BAA+B,MAA8B,aAAkC;AAC3G,SAAO,KAAK,CAAC,EAAE,QAAQ,IAAI,CAAC,KAAK,cAAc;;AAC3C,UAAM,eAAe,KAChB,IAAI,CAAC,aAAa;AAAA,MACf,CAAC,GAAG,QAAQ,WAAW,aAAa,GAAG,QAAQ,QAAQ,SAAS,EAAE,WAAW,QAAQ,CAAC;AAAA,MACtF,CAAC,GAAG,QAAQ,WAAW,QAAQ,GAAG,QAAQ,QAAQ,SAAS,EAAE;AAAA,IAC/D,EAAA,EACD,OAAO,CAAC,KAAK,SAAS,EAAE,GAAG,KAAK,GAAG,QAAQ,CAAE,CAAA;AAE3C,WAAA;AAAA,MACH,CAAC,WAAW,KAAG,SAAI,cAAJ,mBAAe,eAAc;AAAA,MAC5C,GAAG;AAAA,IAAA;AAAA,EACP,CACH;AACL;ACfO,MAAM,cAAN,MAAM,oBAAmB,MAAM;AAAA,EAGlC,YAAY,KAAgF;AACxF,UAAM,GAAG;AACT,SAAK,MAAM;AACX,SAAK,MAAM;AAAA,EACf;AAAA,EAES,aAAa;AACZ,UAAA,aAAa,CAAC,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG;AAEjE,SAAK,QAAQ,WAAW,IAAI,CAAC,WAAW,EAAE,MAAQ,EAAA;AAClD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAS,OAAuB;AAC5B,QAAI,SAAS,GAAG;AACL,aAAA;AAAA,IACX;AACA,QAAI,SAAS,GAAG;AACL,aAAA;AAAA,IACX;AAEA,WAAO,KAAK,IAAI,SAAS,IAAI,MAAM;AAAA,EACvC;AAAA,EAES,iBAAiB,OAAuB;AAC7C,UAAM,WAAW,KAAK,SAAS,KAAK,GAAG;AACvC,UAAM,WAAW,KAAK,SAAS,KAAK,GAAG;AAEjC,UAAA,aAAa,KAAK,SAAS,KAAK;AAEhC,UAAA,WAAW,aAAa,aAAa,WAAW;AAE/C,WAAA,KAAK,mBAAmB,OAAO;AAAA,EAC1C;AACJ;AApCI,YAAO,KAAK;AADT,IAAM,aAAN;ACAP,MAAM,YAAY;AAAA,EACd,QAAQ,CAAC,IAAI,IAAI,GAAG;AAAA,EACpB,OAAO,CAAC,IAAI,KAAK,EAAE;AAAA,EACnB,MAAM,CAAC,KAAK,KAAK,GAAG;AAAA,EACpB,MAAM,CAAC,IAAI,KAAK,GAAG;AAAA,EACnB,OAAO,CAAC,KAAK,KAAK,EAAE;AAAA,EACpB,MAAM,CAAC,KAAK,KAAK,GAAG;AAAA,EACpB,MAAM,CAAC,KAAK,KAAK,GAAG;AAAA,EACpB,MAAM,CAAC,KAAK,IAAI,EAAE;AAAA,EAClB,QAAQ,CAAC,KAAK,IAAI,GAAG;AACzB;AAIO,MAAM,2BAA2B,CAAC,IAAY,QAAQ,MAAM;AACzD,QAAA,OAAO,OAAO,KAAK,SAAS;AAClC,QAAM,MAAM,KAAK,KAAK,KAAK,MAAM;AAE1B,SAAA,QAAQ,UAAU,GAAG,EAAE,KAAK,GAAG,CAAC,IAAI,KAAK;AACpD;AAEO,MAAM,4BAA4B,CAAC,MAAkB,QAAQ,MAAM;AAC/D,SAAA,QAAQ,UAAU,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,KAAK;AACrD;AClBgB,SAAA,kCAAkC,UAAkB,QAAgB;AAChF,QAAMT,KAAI,WAAW;AACrB,QAAMP,KAAI;AACV,QAAMa,KAAI;AAEV,QAAM,YAAYN,KAAKM,KAAIA,MAAM,IAAIb;AACrC,QAAM,eAAea,KAAI,KAAK,KAAMN,MAAK,IAAIA,MAAMP,KAAKa,KAAIA,MAAM,KAAKb,KAAIA,IAAG;AACxE,QAAA,cAAc,IAAKa,KAAIA,KAAKb;AAE3B,SAAA;AAAA,IACH,aAAa,YAAY,gBAAgB;AAAA,IACzC,aAAa,YAAY,gBAAgB;AAAA,EAAA;AAEjD;AAEO,MAAM,8BAA8B,CAAC,OAAe,YAAoB,YAAoB,WAAoB;AACnH,QAAM,QAAQ,SAAS,GAAG,MAAM,OAAO;AAEvC,SAAO,GAAG,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,KAAK,WAAW,QAAQ,CAAC,CAAC,MAAM,WAAW,QAAQ,CAAC,CAAC;AAC3F;ACxBO,SAAS,cAAc,WAAsB;AAChD,UAAQ,WAAW;AAAA,IACf,KAAK,UAAU;AACJ,aAAA,EAAE,aAAa,MAAM,MAAM,UAAmB,KAAK,GAAG,KAAK;IACtE;AAAA,IACA,KAAK,eAAe;AACT,aAAA,EAAE,MAAM;IACnB;AAAA,IACA,KAAK;AACM,aAAA,EAAE,MAAM;IACnB;AACI,aAAO,EAAE,aAAa,MAAM,MAAM,SAAkB;AAAA,EAC5D;AACJ;ACCA,MAAM,SAAS,GAAG,eAAe,YAAY,4BAA4B,eAAe;AAExF,MAAM,6BAA6B,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACJ,MAAuC;;AACnC,QAAM,SAA6B;AAAA,IAC/B,MAAM,2BAA2B;AAAA,IACjC,MAAM;AAAA,MACF,UAAQ,UAAK,CAAC,MAAN,mBAAS,QAAQ,IAAI,CAAC,cAAc;;AAAA,iBAAAY,MAAA,UAAU,cAAV,gBAAAA,IAAqB,eAAc;AAAA,aAAc,CAAC;AAAA,MAC9F,UAAU,KAAK,IAAI,CAAC,WAAW,UAAUsB,WAAS,WAAW,OAAO,wBAAwB,CAAC;AAAA,IACjG;AAAA,IACA,SAAS;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,QACJ,GAAG,cAAc,cAAc;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACL,QAAQ;AAAA,UACJ,SAAS;AAAA,QACb;AAAA,QACA,SAASC,UAAQ,wBAAwB;AAAA,MAC7C;AAAA,IACJ;AAAA,EAAA;AAGG,SAAAd,oBAAC,SAAQ,EAAA,eAAe,OAAQ,CAAA;AAC3C;AAEA,MAAMa,aAAW,CACb,2BACA,OACA,6BACC;AACD,QAAM,gBAAgB;AAAA,IAClB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO,0BAA0B;AAAA,IACjC,iBAAiB,yBAAyB,OAAO,GAAG;AAAA,IACpD,aAAa,yBAAyB,KAAK;AAAA,EAAA;AAG/C,UAAQ,0BAA0B;AAAA,IAC9B,KAAK;AACM,aAAA;AAAA,QACH,GAAG;AAAA,QACH,MAAM,0BAA0B,QAAQ,IAAI,CAAC,eAAe;AAAA,UACxD,GAAG,UAAU;AAAA,UACb,MAAM,kCAAkC,UAAU,OAAO,UAAU,KAAK,EAAE;AAAA,UAC1E,MAAM,kCAAkC,UAAU,OAAO,UAAU,KAAK,EAAE;AAAA,QAAA,EAC5E;AAAA,MAAA;AAAA,IAEV;AACW,aAAA;AAAA,QACH,GAAG;AAAA,QACH,MAAM,0BAA0B,QAAQ,IAAI,CAAC,cAAc,UAAU,UAAU;AAAA,MAAA;AAAA,EAE3F;AACJ;AAEA,MAAMC,YAAU,CAAC,6BAAuD;AACpE,QAAM,gBAAgB;AAAA,IAClB,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAGf,UAAQ,0BAA0B;AAAA,IAC9B,KAAK;AACM,aAAA;AAAA,QACH,GAAG;AAAA,QACH,WAAW;AAAA,UACP,OAAO,CAAC,YAA6C;AACjD,kBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AAM7C,mBAAA,GAAG,QAAQ,QAAQ,KAAK,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,UAC/G;AAAA,QACJ;AAAA,MAAA;AAAA,IAER;AACW,aAAA;AAAA,EACf;AACJ;ACtGO,IAAI,mBAAmB;AACvB,IAAI,iBAAiB,mBAAmB;AACxC,IAAI,gBAAgB,iBAAiB;AACrC,IAAI,iBAAiB,gBAAgB;AACrC,IAAI,wBAAwB;AAC5B,IAAI,wBAAwB,mBAAmB;AAC/C,IAAI,sBAAsB,iBAAiB;AAC3C,IAAI,qBAAqB,gBAAgB;AACzC,IAAI,sBAAsB,iBAAiB;AAE3C,IAAI,KAAK;AACT,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,OAAO;AACX,IAAI,iBAAiB;AACrB,IAAI,sBAAsB;AAE1B,IAAI,cAAc;AAClB,IAAI,eAAe;ACtB1B,MAAe,KAAA;AAAA,EACb,MAAM;AAAA,EACN,UAAU,2DAA2D,MAAM,GAAG;AAAA,EAC9E,QAAQ,wFAAwF,MAAM,GAAG;AAAA,EACzG,SAAS,SAAS,QAAQnC,IAAG;AAC3B,QAAIF,KAAI,CAAC,MAAM,MAAM,MAAM,IAAI;AAC/B,QAAIsC,KAAIpC,KAAI;AACZ,WAAO,MAAMA,MAAKF,IAAGsC,KAAI,MAAM,EAAE,KAAKtC,GAAEsC,EAAC,KAAKtC,GAAE,CAAC,KAAK;AAAA,EACvD;AACH;ACTA,IAAI,WAAW,SAASuC,UAAS,QAAQ,QAAQ,KAAK;AACpD,MAAIvC,KAAI,OAAO,MAAM;AACrB,MAAI,CAACA,MAAKA,GAAE,UAAU;AAAQ,WAAO;AACrC,SAAO,KAAK,MAAM,SAAS,IAAIA,GAAE,MAAM,EAAE,KAAK,GAAG,IAAI;AACvD;AAEA,IAAI,aAAa,SAASwC,YAAW,UAAU;AAC7C,MAAI,aAAa,CAAC,SAAS;AAC3B,MAAI,UAAU,KAAK,IAAI,UAAU;AACjC,MAAI,aAAa,KAAK,MAAM,UAAU,EAAE;AACxC,MAAI,eAAe,UAAU;AAC7B,UAAa,cAAc,IAAI,MAAM,OAAO,SAAS,YAAY,GAAG,GAAG,IAAI,MAAM,SAAS,cAAc,GAAG,GAAG;AAChH;AAEA,IAAI,YAAY,SAASC,WAAUlC,IAAGiB,IAAG;AAEvC,MAAIjB,GAAE,KAAM,IAAGiB,GAAE;AAAQ,WAAO,CAACiB,WAAUjB,IAAGjB,EAAC;AAC/C,MAAI,kBAAkBiB,GAAE,KAAM,IAAGjB,GAAE,KAAI,KAAM,MAAMiB,GAAE,MAAK,IAAKjB,GAAE,MAAO;AACxE,MAAI,SAASA,GAAE,MAAK,EAAG,IAAI,gBAAgBmC,CAAG;AAC9C,MAAItC,KAAIoB,KAAI,SAAS;AACrB,MAAI,UAAUjB,GAAE,MAAK,EAAG,IAAI,kBAAkBH,KAAI,KAAK,IAAIsC,CAAG;AAC9D,SAAO,EAAE,EAAE,kBAAkBlB,KAAI,WAAWpB,KAAI,SAAS,UAAU,UAAU,YAAY;AAC3F;AAEA,IAAI,WAAW,SAASuC,UAASzC,IAAG;AAClC,SAAOA,KAAI,IAAI,KAAK,KAAKA,EAAC,KAAK,IAAI,KAAK,MAAMA,EAAC;AACjD;AAEA,IAAI,aAAa,SAAS0C,YAAWjC,IAAG;AACtC,MAAI,UAAU;AAAA,IACZ;AAAA,IACA,GAAGkC;AAAAA,IACH,GAAGC;AAAAA,IACH,GAAGC;AAAAA,IACH,GAAGC;AAAAA,IACH,GAAGC;AAAAA,IACH,GAAGC;AAAAA,IACH,GAAGC;AAAAA,IACH,IAAIC;AAAAA,IACJ;AAAA,EACJ;AACE,SAAO,QAAQzC,EAAC,KAAK,OAAOA,MAAK,EAAE,EAAE,cAAc,QAAQ,MAAM,EAAE;AACrE;AAEA,IAAI,cAAc,SAAS0C,aAAYrD,IAAG;AACxC,SAAOA,OAAM;AACf;AAEA,MAAe,IAAA;AAAA,EACb,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;ACtDA,IAAI,IAAI;AAER,IAAI,KAAK,CAAA;AAET,GAAG,CAAC,IAAI;AACR,IAAI,WAAW;AAEf,IAAI,UAAU,SAASsD,SAAQ5C,IAAG;AAChC,SAAOA,cAAa,SAAS,CAAC,EAAEA,MAAKA,GAAE,QAAQ;AACjD;AAEA,IAAI,cAAc,SAAS6C,aAAY,QAAQ,QAAQ,SAAS;AAC9D,MAAI/C;AACJ,MAAI,CAAC;AAAQ,WAAO;AAEpB,MAAI,OAAO,WAAW,UAAU;AAC9B,QAAI,cAAc,OAAO;AAEzB,QAAI,GAAG,WAAW,GAAG;AACnB,MAAAA,KAAI;AAAA,IACL;AAED,QAAI,QAAQ;AACV,SAAG,WAAW,IAAI;AAClB,MAAAA,KAAI;AAAA,IACL;AAED,QAAI,cAAc,OAAO,MAAM,GAAG;AAElC,QAAI,CAACA,MAAK,YAAY,SAAS,GAAG;AAChC,aAAO+C,aAAY,YAAY,CAAC,CAAC;AAAA,IAClC;AAAA,EACL,OAAS;AACL,QAAI,OAAO,OAAO;AAClB,OAAG,IAAI,IAAI;AACX,IAAA/C,KAAI;AAAA,EACL;AAED,MAAI,CAAC,WAAWA;AAAG,QAAIA;AACvB,SAAOA,MAAK,CAAC,WAAW;AAC1B;AAEA,IAAI,QAAQ,SAASgD,OAAM,MAAMpD,IAAG;AAClC,MAAI,QAAQ,IAAI,GAAG;AACjB,WAAO,KAAK;EACb;AAGD,MAAI,MAAM,OAAOA,OAAM,WAAWA,KAAI,CAAA;AACtC,MAAI,OAAO;AACX,MAAI,OAAO;AAEX,SAAO,IAAI,MAAM,GAAG;AACtB;AAEA,IAAI,UAAU,SAASgB,SAAQ,MAAM,UAAU;AAC7C,SAAO,MAAM,MAAM;AAAA,IACjB,QAAQ,SAAS;AAAA,IACjB,KAAK,SAAS;AAAA,IACd,GAAG,SAAS;AAAA,IACZ,SAAS,SAAS;AAAA;AAAA,EAEtB,CAAG;AACH;AAEA,IAAI,QAAQ;AAEZ,MAAM,IAAI;AACV,MAAM,IAAI;AACV,MAAM,IAAI;AAEV,IAAI,YAAY,SAASqC,WAAU,KAAK;AACtC,MAAI,OAAO,IAAI,MACX,MAAM,IAAI;AACd,MAAI,SAAS;AAAM,WAAO,oBAAI,KAAK,GAAG;AAEtC,MAAI,MAAM,EAAE,IAAI;AAAG,WAAO,oBAAI,KAAI;AAElC,MAAI,gBAAgB;AAAM,WAAO,IAAI,KAAK,IAAI;AAE9C,MAAI,OAAO,SAAS,YAAY,CAAC,MAAM,KAAK,IAAI,GAAG;AACjD,QAAI/C,KAAI,KAAK,MAAMgD,WAAa;AAEhC,QAAIhD,IAAG;AACL,UAAIiD,KAAIjD,GAAE,CAAC,IAAI,KAAK;AACpB,UAAI,MAAMA,GAAE,CAAC,KAAK,KAAK,UAAU,GAAG,CAAC;AAErC,UAAI,KAAK;AACP,eAAO,IAAI,KAAK,KAAK,IAAIA,GAAE,CAAC,GAAGiD,IAAGjD,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AAAA,MAClF;AAED,aAAO,IAAI,KAAKA,GAAE,CAAC,GAAGiD,IAAGjD,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAGA,GAAE,CAAC,KAAK,GAAG,EAAE;AAAA,IACxE;AAAA,EACF;AAED,SAAO,IAAI,KAAK,IAAI;AACtB;AAEA,IAAI,QAAqB,2BAAY;AACnC,WAASkD,OAAM,KAAK;AAClB,SAAK,KAAK,YAAY,IAAI,QAAQ,MAAM,IAAI;AAC5C,SAAK,MAAM,GAAG;AAEd,SAAK,KAAK,KAAK,MAAM,IAAI,KAAK;AAC9B,SAAK,QAAQ,IAAI;AAAA,EAClB;AAED,MAAI,SAASA,OAAM;AAEnB,SAAO,QAAQ,SAAS,MAAM,KAAK;AACjC,SAAK,KAAK,UAAU,GAAG;AACvB,SAAK,KAAI;AAAA,EACb;AAEE,SAAO,OAAO,SAAS,OAAO;AAC5B,QAAI,KAAK,KAAK;AACd,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,KAAK,GAAG;AACb,SAAK,MAAM,GAAG;EACf;AAGD,SAAO,SAAS,SAAS,SAAS;AAChC,WAAO;AAAA,EACX;AAEE,SAAO,UAAU,SAAS,UAAU;AAClC,WAAO,EAAE,KAAK,GAAG,SAAU,MAAKC;AAAAA,EACpC;AAEE,SAAO,SAAS,SAAS,OAAO,MAAM,OAAO;AAC3C,QAAI,QAAQ,MAAM,IAAI;AACtB,WAAO,KAAK,QAAQ,KAAK,KAAK,SAAS,SAAS,KAAK,MAAM,KAAK;AAAA,EACpE;AAEE,SAAO,UAAU,SAAS,QAAQ,MAAM,OAAO;AAC7C,WAAO,MAAM,IAAI,IAAI,KAAK,QAAQ,KAAK;AAAA,EAC3C;AAEE,SAAO,WAAW,SAAS,SAAS,MAAM,OAAO;AAC/C,WAAO,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AAAA,EACzC;AAEE,SAAO,KAAK,SAAS,GAAG,OAAO,KAAK,KAAK;AACvC,QAAI,MAAM,EAAE,KAAK;AAAG,aAAO,KAAK,GAAG;AACnC,WAAO,KAAK,IAAI,KAAK,KAAK;AAAA,EAC9B;AAEE,SAAO,OAAO,SAAS,OAAO;AAC5B,WAAO,KAAK,MAAM,KAAK,QAAS,IAAG,GAAI;AAAA,EAC3C;AAEE,SAAO,UAAU,SAAS,UAAU;AAElC,WAAO,KAAK,GAAG;EACnB;AAEE,SAAO,UAAU,SAAS,QAAQ,OAAO,UAAU;AACjD,QAAI,QAAQ;AAGZ,QAAI,YAAY,CAAC,MAAM,EAAE,QAAQ,IAAI,WAAW;AAChD,QAAI,OAAO,MAAM,EAAE,KAAK;AAExB,QAAI,kBAAkB,SAASC,iBAAgBpD,IAAGiD,IAAG;AACnD,UAAI,MAAM,MAAM,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,IAAIA,IAAGjD,EAAC,IAAI,IAAI,KAAK,MAAM,IAAIiD,IAAGjD,EAAC,GAAG,KAAK;AACvF,aAAO,YAAY,MAAM,IAAI,MAAMqC,CAAG;AAAA,IAC5C;AAEI,QAAI,qBAAqB,SAASgB,oBAAmB,QAAQ,OAAO;AAClE,UAAI,gBAAgB,CAAC,GAAG,GAAG,GAAG,CAAC;AAC/B,UAAI,cAAc,CAAC,IAAI,IAAI,IAAI,GAAG;AAClC,aAAO,MAAM,EAAE,MAAM,OAAQ,EAAC,MAAM,EAAE;AAAA;AAAA,QACtC,MAAM,OAAO,GAAG;AAAA,SAAI,YAAY,gBAAgB,aAAa,MAAM,KAAK;AAAA,MAAC,GAAG,KAAK;AAAA,IACvF;AAEI,QAAI,KAAK,KAAK,IACV,KAAK,KAAK,IACV,KAAK,KAAK;AACd,QAAI,SAAS,SAAS,KAAK,KAAK,QAAQ;AAExC,YAAQ,MAAI;AAAA,MACV,KAAKlB;AACH,eAAO,YAAY,gBAAgB,GAAG,CAAC,IAAI,gBAAgB,IAAI,EAAE;AAAA,MAEnE,KAAKH;AACH,eAAO,YAAY,gBAAgB,GAAG,EAAE,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAAA,MAEvE,KAAKI,GACH;AACE,YAAI,YAAY,KAAK,QAAO,EAAG,aAAa;AAC5C,YAAI,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM;AAC3C,eAAO,gBAAgB,YAAY,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AAAA,MACjE;AAAA,MAEH,KAAKC;AAAAA,MACL,KAAKC;AACH,eAAO,mBAAmB,SAAS,SAAS,CAAC;AAAA,MAE/C,KAAKC;AACH,eAAO,mBAAmB,SAAS,WAAW,CAAC;AAAA,MAEjD,KAAKC;AACH,eAAO,mBAAmB,SAAS,WAAW,CAAC;AAAA,MAEjD,KAAKC;AACH,eAAO,mBAAmB,SAAS,gBAAgB,CAAC;AAAA,MAEtD;AACE,eAAO,KAAK;IACf;AAAA,EACL;AAEE,SAAO,QAAQ,SAAS,MAAM,KAAK;AACjC,WAAO,KAAK,QAAQ,KAAK,KAAK;AAAA,EAClC;AAEE,SAAO,OAAO,SAAS,KAAK,OAAO,MAAM;AACvC,QAAI;AAGJ,QAAI,OAAO,MAAM,EAAE,KAAK;AACxB,QAAI,SAAS,SAAS,KAAK,KAAK,QAAQ;AACxC,QAAI,QAAQ,wBAAwB,IAAI,sBAAsBJ,CAAG,IAAI,SAAS,QAAQ,sBAAsBC,IAAM,IAAI,SAAS,QAAQ,sBAAsBN,CAAG,IAAI,SAAS,SAAS,sBAAsBG,CAAG,IAAI,SAAS,YAAY,sBAAsBI,CAAG,IAAI,SAAS,SAAS,sBAAsBC,GAAK,IAAI,SAAS,WAAW,sBAAsBC,CAAG,IAAI,SAAS,WAAW,sBAAsBC,EAAI,IAAI,SAAS,gBAAgB,uBAAuB,IAAI;AAC7c,QAAI,MAAM,SAASL,IAAM,KAAK,MAAM,OAAO,KAAK,MAAM;AAEtD,QAAI,SAASL,KAAO,SAASG,GAAK;AAEhC,UAAI,OAAO,KAAK,MAAK,EAAG,IAAIG,MAAQ,CAAC;AACrC,WAAK,GAAG,IAAI,EAAE,GAAG;AACjB,WAAK,KAAI;AACT,WAAK,KAAK,KAAK,IAAIA,MAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,YAAW,CAAE,CAAC,EAAE;AAAA,IACxE,WAAe;AAAM,WAAK,GAAG,IAAI,EAAE,GAAG;AAElC,SAAK,KAAI;AACT,WAAO;AAAA,EACX;AAEE,SAAO,MAAM,SAAS,IAAI,QAAQ,OAAO;AACvC,WAAO,KAAK,MAAO,EAAC,KAAK,QAAQ,KAAK;AAAA,EAC1C;AAEE,SAAO,MAAM,SAAS,IAAI,MAAM;AAC9B,WAAO,KAAK,MAAM,EAAE,IAAI,CAAC,EAAC;AAAA,EAC9B;AAEE,SAAO,MAAM,SAAS,IAAI,QAAQ,OAAO;AACvC,QAAI,SAAS,MACT;AAEJ,aAAS,OAAO,MAAM;AAEtB,QAAI,OAAO,MAAM,EAAE,KAAK;AAExB,QAAI,qBAAqB,SAASe,oBAAmB7D,IAAG;AACtD,UAAIQ,KAAI,MAAM,MAAM;AACpB,aAAO,MAAM,EAAEA,GAAE,KAAKA,GAAE,KAAI,IAAK,KAAK,MAAMR,KAAI,MAAM,CAAC,GAAG,MAAM;AAAA,IACtE;AAEI,QAAI,SAASwC,GAAK;AAChB,aAAO,KAAK,IAAIA,GAAK,KAAK,KAAK,MAAM;AAAA,IACtC;AAED,QAAI,SAASG,GAAK;AAChB,aAAO,KAAK,IAAIA,GAAK,KAAK,KAAK,MAAM;AAAA,IACtC;AAED,QAAI,SAASE,GAAK;AAChB,aAAO,mBAAmB,CAAC;AAAA,IAC5B;AAED,QAAI,SAASD,GAAK;AAChB,aAAO,mBAAmB,CAAC;AAAA,IAC5B;AAED,QAAI,QAAQ,sBAAsB,CAAA,GAAI,oBAAoBI,GAAK,IAAIc,uBAAyB,oBAAoBf,CAAG,IAAIgB,qBAAuB,oBAAoBd,CAAG,IAAIe,uBAAyB,qBAAqB,IAAI,KAAK;AAEhO,QAAI,gBAAgB,KAAK,GAAG,QAAS,IAAG,SAAS;AACjD,WAAO,MAAM,EAAE,eAAe,IAAI;AAAA,EACtC;AAEE,SAAO,WAAW,SAAS,SAAS,QAAQ,QAAQ;AAClD,WAAO,KAAK,IAAI,SAAS,IAAI,MAAM;AAAA,EACvC;AAEE,SAAO,SAAS,SAAS,OAAO,WAAW;AACzC,QAAI,SAAS;AAEb,QAAI,SAAS,KAAK;AAClB,QAAI,CAAC,KAAK,QAAO;AAAI,aAAO,OAAO,eAAeL;AAClD,QAAI,MAAM,aAAaM;AACvB,QAAI,UAAU,MAAM,EAAE,IAAI;AAC1B,QAAI,KAAK,KAAK,IACV,KAAK,KAAK,IACV,KAAK,KAAK;AACd,QAAI,WAAW,OAAO,UAClB,SAAS,OAAO,QAChB,WAAW,OAAO;AAEtB,QAAI,WAAW,SAASC,UAAS,KAAK,OAAO,MAAM,QAAQ;AACzD,aAAO,QAAQ,IAAI,KAAK,KAAK,IAAI,QAAQ,GAAG,MAAM,KAAK,KAAK,EAAE,MAAM,GAAG,MAAM;AAAA,IACnF;AAEI,QAAI,QAAQ,SAASC,OAAM,KAAK;AAC9B,aAAO,MAAM,EAAE,KAAK,MAAM,IAAI,KAAK,GAAG;AAAA,IAC5C;AAEI,QAAI,eAAe,YAAY,SAAU,MAAM,QAAQ,aAAa;AAClE,UAAIV,KAAI,OAAO,KAAK,OAAO;AAC3B,aAAO,cAAcA,GAAE,YAAW,IAAKA;AAAA,IAC7C;AAEI,QAAI,UAAU,SAASW,SAAQ,OAAO;AACpC,cAAQ,OAAK;AAAA,QACX,KAAK;AACH,iBAAO,OAAO,OAAO,EAAE,EAAE,MAAM,EAAE;AAAA,QAEnC,KAAK;AACH,iBAAO,MAAM,EAAE,OAAO,IAAI,GAAG,GAAG;AAAA,QAElC,KAAK;AACH,iBAAO,KAAK;AAAA,QAEd,KAAK;AACH,iBAAO,MAAM,EAAE,KAAK,GAAG,GAAG,GAAG;AAAA,QAE/B,KAAK;AACH,iBAAO,SAAS,OAAO,aAAa,IAAI,QAAQ,CAAC;AAAA,QAEnD,KAAK;AACH,iBAAO,SAAS,QAAQ,EAAE;AAAA,QAE5B,KAAK;AACH,iBAAO,OAAO;AAAA,QAEhB,KAAK;AACH,iBAAO,MAAM,EAAE,OAAO,IAAI,GAAG,GAAG;AAAA,QAElC,KAAK;AACH,iBAAO,OAAO,OAAO,EAAE;AAAA,QAEzB,KAAK;AACH,iBAAO,SAAS,OAAO,aAAa,OAAO,IAAI,UAAU,CAAC;AAAA,QAE5D,KAAK;AACH,iBAAO,SAAS,OAAO,eAAe,OAAO,IAAI,UAAU,CAAC;AAAA,QAE9D,KAAK;AACH,iBAAO,SAAS,OAAO,EAAE;AAAA,QAE3B,KAAK;AACH,iBAAO,OAAO,EAAE;AAAA,QAElB,KAAK;AACH,iBAAO,MAAM,EAAE,IAAI,GAAG,GAAG;AAAA,QAE3B,KAAK;AACH,iBAAO,MAAM,CAAC;AAAA,QAEhB,KAAK;AACH,iBAAO,MAAM,CAAC;AAAA,QAEhB,KAAK;AACH,iBAAO,aAAa,IAAI,IAAI,IAAI;AAAA,QAElC,KAAK;AACH,iBAAO,aAAa,IAAI,IAAI,KAAK;AAAA,QAEnC,KAAK;AACH,iBAAO,OAAO,EAAE;AAAA,QAElB,KAAK;AACH,iBAAO,MAAM,EAAE,IAAI,GAAG,GAAG;AAAA,QAE3B,KAAK;AACH,iBAAO,OAAO,OAAO,EAAE;AAAA,QAEzB,KAAK;AACH,iBAAO,MAAM,EAAE,OAAO,IAAI,GAAG,GAAG;AAAA,QAElC,KAAK;AACH,iBAAO,MAAM,EAAE,OAAO,KAAK,GAAG,GAAG;AAAA,QAEnC,KAAK;AACH,iBAAO;AAAA,MAKV;AAED,aAAO;AAAA,IACb;AAEI,WAAO,IAAI,QAAQC,cAAgB,SAAU,OAAO,IAAI;AACtD,aAAO,MAAM,QAAQ,KAAK,KAAK,QAAQ,QAAQ,KAAK,EAAE;AAAA,IAC5D,CAAK;AAAA,EACL;AAEE,SAAO,YAAY,SAAS,YAAY;AAGtC,WAAO,CAAC,KAAK,MAAM,KAAK,GAAG,kBAAmB,IAAG,EAAE,IAAI;AAAA,EAC3D;AAEE,SAAO,OAAO,SAAS,KAAK,OAAO,OAAO,QAAQ;AAChD,QAAI,SAAS;AAEb,QAAI,OAAO,MAAM,EAAE,KAAK;AACxB,QAAI,OAAO,MAAM,KAAK;AACtB,QAAI,aAAa,KAAK,UAAW,IAAG,KAAK,UAAW,KAAIP;AACxD,QAAIQ,QAAO,OAAO;AAElB,QAAI,WAAW,SAASC,YAAW;AACjC,aAAO,MAAM,EAAE,QAAQ,IAAI;AAAA,IACjC;AAEI,QAAI;AAEJ,YAAQ,MAAI;AAAA,MACV,KAAK5B;AACH,iBAAS,SAAU,IAAG;AACtB;AAAA,MAEF,KAAKH;AACH,iBAAS,SAAQ;AACjB;AAAA,MAEF,KAAKgC;AACH,iBAAS,SAAU,IAAG;AACtB;AAAA,MAEF,KAAK5B;AACH,kBAAU0B,QAAO,aAAaG;AAC9B;AAAA,MAEF,KAAK5B;AACH,kBAAUyB,QAAO,aAAaI;AAC9B;AAAA,MAEF,KAAK3B;AACH,iBAASuB,QAAOP;AAChB;AAAA,MAEF,KAAKf;AACH,iBAASsB,QAAOR;AAChB;AAAA,MAEF,KAAKb;AACH,iBAASqB,QAAON;AAChB;AAAA,MAEF;AACE,iBAASM;AAET;AAAA,IACH;AAED,WAAO,SAAS,SAAS,MAAM,EAAE,MAAM;AAAA,EAC3C;AAEE,SAAO,cAAc,SAAS,cAAc;AAC1C,WAAO,KAAK,MAAM9B,CAAG,EAAE;AAAA,EAC3B;AAEE,SAAO,UAAU,SAAS,UAAU;AAElC,WAAO,GAAG,KAAK,EAAE;AAAA,EACrB;AAEE,SAAO,SAAS,SAAS,OAAO,QAAQ,QAAQ;AAC9C,QAAI,CAAC;AAAQ,aAAO,KAAK;AACzB,QAAI,OAAO,KAAK;AAChB,QAAI,iBAAiB,YAAY,QAAQ,QAAQ,IAAI;AACrD,QAAI;AAAgB,WAAK,KAAK;AAC9B,WAAO;AAAA,EACX;AAEE,SAAO,QAAQ,SAAS,QAAQ;AAC9B,WAAO,MAAM,EAAE,KAAK,IAAI,IAAI;AAAA,EAChC;AAEE,SAAO,SAAS,SAAS,SAAS;AAChC,WAAO,IAAI,KAAK,KAAK,QAAS,CAAA;AAAA,EAClC;AAEE,SAAO,SAAS,SAAS,SAAS;AAChC,WAAO,KAAK,QAAS,IAAG,KAAK,YAAW,IAAK;AAAA,EACjD;AAEE,SAAO,cAAc,SAAS,cAAc;AAI1C,WAAO,KAAK,GAAG;EACnB;AAEE,SAAO,WAAW,SAAS,WAAW;AACpC,WAAO,KAAK,GAAG;EACnB;AAEE,SAAOkB;AACT;AAEA,IAAI,QAAQ,MAAM;AAClB,MAAM,YAAY;AAClB,CAAC,CAAC,OAAOR,EAAI,GAAG,CAAC,MAAMD,CAAG,GAAG,CAAC,MAAMD,GAAK,GAAG,CAAC,MAAMD,CAAG,GAAG,CAAC,MAAMF,CAAG,GAAG,CAAC,MAAML,CAAG,GAAG,CAAC,MAAMG,CAAG,GAAG,CAAC,MAAMG,IAAM,CAAC,EAAE,QAAQ,SAAU,GAAG;AACnI,QAAM,EAAE,CAAC,CAAC,IAAI,SAAU,OAAO;AAC7B,WAAO,KAAK,GAAG,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAAA,EACpC;AACA,CAAC;AAED,MAAM,SAAS,SAAU,QAAQ,QAAQ;AACvC,MAAI,CAAC,OAAO,IAAI;AAEd,WAAO,QAAQ,OAAO,KAAK;AAC3B,WAAO,KAAK;AAAA,EACb;AAED,SAAO;AACT;AAEA,MAAM,SAAS;AACf,MAAM,UAAU;AAEhB,MAAM,OAAO,SAAU,WAAW;AAChC,SAAO,MAAM,YAAY,GAAG;AAC9B;AAEA,MAAM,KAAK,GAAG,CAAC;AACf,MAAM,KAAK;AACX,MAAM,IAAI,CAAE;AC1hBZ,MAAA,iBAAgB,SAAUjD,IAAGK,IAAG;AAE9B,MAAIyE,SAAQzE,GAAE;AACd,MAAI,YAAYyE,OAAM;AAEtB,EAAAA,OAAM,SAAS,SAAU,WAAW;AAClC,QAAI,QAAQ;AAEZ,QAAI,SAAS,KAAK;AAElB,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO,UAAU,KAAK,IAAI,EAAE,SAAS;AAAA,IACtC;AAED,QAAI,QAAQ,KAAK;AACjB,QAAI,MAAM,aAAa;AACvB,QAAI,SAAS,IAAI,QAAQ,+DAA+D,SAAU,OAAO;AACvG,cAAQ,OAAK;AAAA,QACX,KAAK;AACH,iBAAO,KAAK,MAAM,MAAM,KAAK,KAAK,CAAC;AAAA,QAErC,KAAK;AACH,iBAAO,OAAO,QAAQ,MAAM,EAAE;AAAA,QAEhC,KAAK;AACH,iBAAO,MAAM;QAEf,KAAK;AACH,iBAAO,MAAM;QAEf,KAAK;AACH,iBAAO,OAAO,QAAQ,MAAM,KAAM,GAAE,GAAG;AAAA,QAGzC,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,MAAM,EAAE,MAAM,KAAM,GAAE,UAAU,MAAM,IAAI,GAAG,GAAG;AAAA,QAEzD,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,MAAM,EAAE,MAAM,QAAS,GAAE,UAAU,MAAM,IAAI,GAAG,GAAG;AAAA,QAE5D,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,MAAM,EAAE,OAAO,MAAM,OAAO,IAAI,KAAK,MAAM,EAAE,GAAG,UAAU,MAAM,IAAI,GAAG,GAAG;AAAA,QAEnF,KAAK;AACH,iBAAO,KAAK,MAAM,MAAM,GAAG,QAAO,IAAK,GAAI;AAAA,QAE7C,KAAK;AACH,iBAAO,MAAM,GAAG;QAElB,KAAK;AACH,iBAAO,MAAM,MAAM,WAAU,IAAK;AAAA,QAEpC,KAAK;AACH,iBAAO,MAAM,MAAM,WAAW,MAAM,IAAI;AAAA,QAE1C;AACE,iBAAO;AAAA,MACV;AAAA,IACP,CAAK;AACD,WAAO,UAAU,KAAK,IAAI,EAAE,MAAM;AAAA,EACtC;AACA;AChEA,IAAI,oBAAoB;AACxB,MAAA,UAAgB,SAAU9E,IAAGK,IAAGM,IAAG;AACjC,MAAI,uBAAuB,SAASoE,sBAAqB,MAAM,OAAO;AACpE,QAAI,gBAAgB,QAAQpE,GAAE,MAAMA,MAAK,KAAK,IAAI,EAAE,QAAQ,CAAC;AAC7D,QAAI,cAAc,IAAI,aAAa,WAAU;AAE7C,QAAI,aAAa,WAAY,IAAG,GAAG;AACjC,qBAAe;AAAA,IAChB;AAED,WAAO,aAAa,IAAI,aAAa,CAAC;AAAA,EAC1C;AAEE,MAAI,yBAAyB,SAASqE,wBAAuB,KAAK;AAChE,WAAO,IAAI,IAAI,IAAI,IAAI,WAAU,GAAI,CAAC;AAAA,EAC1C;AAEE,MAAIF,SAAQzE,GAAE;AAEd,EAAAyE,OAAM,cAAc,WAAY;AAC9B,QAAI,kBAAkB,uBAAuB,IAAI;AACjD,WAAO,gBAAgB;EAC3B;AAEE,EAAAA,OAAM,UAAU,SAAU,MAAM;AAC9B,QAAI,CAAC,KAAK,OAAQ,EAAC,EAAE,IAAI,GAAG;AAC1B,aAAO,KAAK,KAAK,OAAO,KAAK,QAAS,KAAI,GAAG,CAAC;AAAA,IAC/C;AAED,QAAI,kBAAkB,uBAAuB,IAAI;AACjD,QAAI,mBAAmB,qBAAqB,KAAK,YAAW,GAAI,KAAK,EAAE;AACvE,WAAO,gBAAgB,KAAK,kBAAkB,CAAC,IAAI;AAAA,EACvD;AAEE,EAAAA,OAAM,aAAa,SAAU,MAAM;AACjC,QAAI,CAAC,KAAK,OAAQ,EAAC,EAAE,IAAI,GAAG;AAC1B,aAAO,KAAK,IAAI,KAAK,IAAG,IAAK,IAAI,OAAO,OAAO,CAAC;AAAA,IACjD;AAED,WAAO,KAAK,IAAK,KAAI;AAAA,EACzB;AAEE,MAAI,aAAaA,OAAM;AAEvB,EAAAA,OAAM,UAAU,SAAU,OAAO,SAAS;AACxC,QAAI,QAAQ,KAAK;AACjB,QAAI,YAAY,CAAC,MAAM,EAAE,OAAO,IAAI,UAAU;AAC9C,QAAI,OAAO,MAAM,EAAE,KAAK;AAExB,QAAI,SAAS,mBAAmB;AAC9B,aAAO,YAAY,KAAK,KAAK,KAAK,KAAM,KAAI,KAAK,WAAY,IAAG,EAAE,EAAE,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,eAAe,KAAK,CAAC,EAAE,MAAM,KAAK;AAAA,IAC1J;AAED,WAAO,WAAW,KAAK,IAAI,EAAE,OAAO,OAAO;AAAA,EAC/C;AACA;ACpDA,MAAM,OAAO,OAAO;AACpB,MAAM,OAAO,cAAc;AAEpB,MAAM,iBAAN,MAAM,eAAc;AAAA,EAMf,cAAc;AALd,SAAA,wCAAwB;AACxB,SAAA,oCAAoB;AACpB,SAAA,qCAAqB;AACrB,SAAA,gCAAgB;EAED;AAAA,EAEvB,gBAAgB7E,IAAyB;AACrC,QAAI,CAAC,KAAK,kBAAkB,IAAIA,EAAC,GAAG;AAChC,WAAK,kBAAkB,IAAIA,IAAG,aAAa,MAAMA,IAAG,IAAI,CAAC;AAAA,IAC7D;AACO,WAAA,KAAK,kBAAkB,IAAIA,EAAC;AAAA,EACvC;AAAA,EAEA,aAAaA,IAAsB;AAC/B,QAAI,CAAC,KAAK,eAAe,IAAIA,EAAC,GAAG;AAC7B,WAAK,eAAe,IAAIA,IAAG,UAAU,MAAMA,IAAG,IAAI,CAAC;AAAA,IACvD;AACO,WAAA,KAAK,eAAe,IAAIA,EAAC;AAAA,EACpC;AAAA,EAEA,YAAYA,IAAqB;AAC7B,QAAI,CAAC,KAAK,cAAc,IAAIA,EAAC,GAAG;AAC5B,WAAK,cAAc,IAAIA,IAAG,SAAS,MAAMA,IAAG,IAAI,CAAC;AAAA,IACrD;AACO,WAAA,KAAK,cAAc,IAAIA,EAAC;AAAA,EACnC;AAAA,EAEA,QAAQA,IAAiB;AACrB,QAAI,CAAC,KAAK,UAAU,IAAIA,EAAC,GAAG;AACxB,WAAK,UAAU,IAAIA,IAAG,KAAK,MAAMA,IAAG,IAAI,CAAC;AAAA,IAC7C;AACO,WAAA,KAAK,UAAU,IAAIA,EAAC;AAAA,EAC/B;AAAA,EAIA,OAAO,cAA6B;AAChC,WAAO,KAAK;AAAA,EAChB;AACJ;AALmB,eAAA,WAAW,IAAI;AApC3B,IAAM,gBAAN;AA2CA,MAAM,aAAa;AAAA,EAItB,YACa,YACA,aACA,WACA,OACX;AAJW,SAAA,aAAA;AACA,SAAA,cAAA;AACA,SAAA,YAAA;AACA,SAAA,QAAA;AAEJ,SAAA,OAAO,IAAI,KAAK,KAAK,YAAY,KAAK,cAAc,GAAG,KAAK,SAAS;AACrE,SAAA,QAAQ,MAAM,KAAK,IAAI;AAAA,EAChC;AAAA,EAEA,IAAI,OAAe;AACR,WAAA,KAAK,MAAM,OAAO,YAAY;AAAA,EACzC;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAK,MAAM,QAAQ,GAAG,KAAK,UAAU,EAAE;AAAA,EAClD;AAAA,EAEA,IAAI,QAAmB;AACnB,WAAO,KAAK,MAAM,aAAa,KAAK,MAAM,OAAO,SAAS,CAAC;AAAA,EAC/D;AAAA,EAEA,IAAI,OAAiB;AACjB,WAAO,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO,SAAS,CAAC;AAAA,EAC9D;AAAA,EAEA,QAAQ,MAA4B;AAChC,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK;AACjC,UAAAA,KAAI,KAAK,OAAO,YAAY;AAC3B,WAAA,KAAK,MAAM,gBAAgBA,EAAC;AAAA,EACvC;AAAA,EAEA,MAAM,OAA6B;AAC/B,WAAO,KAAK,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,EAC7C;AAAA,EAEA,OAAO,MAAMA,IAAW,OAAoC;AACxD,UAAM,CAAC,MAAM,OAAO,GAAG,IAAIA,GAAE,MAAM,GAAG,EAAE,IAAI,CAACA,QAAM,SAASA,KAAG,EAAE,CAAC;AAClE,WAAO,IAAI,aAAa,MAAM,OAAO,KAAK,KAAK;AAAA,EACnD;AACJ;AAEO,MAAM,SAAS;AAAA,EAClB,YACa,eACA,eACA,OACX;AAHW,SAAA,gBAAA;AACA,SAAA,gBAAA;AACA,SAAA,QAAA;AAAA,EACV;AAAA,EAEH,IAAI,OAAe;AACf,WAAO,KAAK,SAAS,MAAM,OAAO,SAAS;AAAA,EAC/C;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAyB;AAEzB,UAAM,WAAW,QACZ,KAAK,KAAK,aAAa,EACvB,MAAM,CAAC,EACP,KAAK,CAAC,EACN,QAAQ,KAAK,aAAa,EAC1B,QAAQ,SAAS;AACtB,WAAO,KAAK,MAAM,gBAAgB,SAAS,OAAO,YAAY,CAAC;AAAA,EACnE;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAK,MAAM,QAAQ,GAAG,KAAK,aAAa,EAAE;AAAA,EACrD;AAAA,EAEA,SAAS,OAAyB;AAC9B,UAAM,OAAO,KAAK,SAAS,MAAM,IAAI,OAAO,MAAM;AAC5C,UAAAA,KAAI,KAAK,OAAO,SAAS;AACxB,WAAA,KAAK,MAAM,YAAYA,EAAC;AAAA,EACnC;AAAA,EAEA,MAAM,OAAyB;AAC3B,WAAO,KAAK,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AAAA,EAChE;AAAA,EAEA,OAAO,MAAMA,IAAW,OAAgC;AACpD,UAAM,CAAC,MAAM,IAAI,IAAIA,GAAE,MAAM,GAAG,EAAE,IAAI,CAACA,QAAM,SAASA,KAAG,EAAE,CAAC;AAC5D,WAAO,IAAI,SAAS,MAAM,MAAM,KAAK;AAAA,EACzC;AACJ;AAEO,MAAM,UAAU;AAAA,EACnB,YACa,YACA,aACA,OACX;AAHW,SAAA,aAAA;AACA,SAAA,cAAA;AACA,SAAA,QAAA;AAAA,EACV;AAAA,EAEH,IAAI,OAAe;AACf,WAAO,KAAK,SAAS,MAAM,OAAO,SAAS;AAAA,EAC/C;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,WAAyB;AACzB,WAAO,KAAK,MAAM,gBAAgB,MAAM,GAAG,KAAK,UAAU,IAAI,KAAK,WAAW,KAAK,EAAE,OAAO,YAAY,CAAC;AAAA,EAC7G;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAK,MAAM,QAAQ,GAAG,KAAK,UAAU,EAAE;AAAA,EAClD;AAAA,EAEA,UAAU,QAA2B;AACjC,UAAM,OAAO,KAAK,SAAS,MAAM,IAAI,QAAQ,OAAO;AAC9C,UAAAA,KAAI,KAAK,OAAO,SAAS;AACxB,WAAA,KAAK,MAAM,aAAaA,EAAC;AAAA,EACpC;AAAA,EAEA,MAAM,OAA0B;AAC5B,WAAO,KAAK,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,OAAO;AAAA,EACjE;AAAA,EAEA,OAAO,MAAMA,IAAW,OAAiC;AACrD,UAAM,CAAC,MAAM,KAAK,IAAIA,GAAE,MAAM,GAAG,EAAE,IAAI,CAACA,QAAM,SAASA,KAAG,EAAE,CAAC;AAC7D,WAAO,IAAI,UAAU,MAAM,OAAO,KAAK;AAAA,EAC3C;AACJ;AAEO,MAAM,KAAK;AAAA,EACd,YACa,MACA,OACX;AAFW,SAAA,OAAA;AACA,SAAA,QAAA;AAAA,EACV;AAAA,EAEH,IAAI,OAAe;AACf,WAAO,KAAK,SAAS,MAAM,OAAO,MAAM;AAAA,EAC5C;AAAA,EAEA,WAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,aAAwB;AACxB,WAAO,KAAK,MAAM,aAAa,GAAG,KAAK,IAAI,KAAK;AAAA,EACpD;AAAA,EAEA,IAAI,WAAyB;AACzB,WAAO,KAAK,WAAW;AAAA,EAC3B;AAAA,EAEA,SAAS,OAAqB;AAC1B,UAAM,OAAO,KAAK,SAAS,MAAM,IAAI,OAAO,MAAM;AAC5C,UAAAA,KAAI,KAAK,OAAO,MAAM;AACrB,WAAA,KAAK,MAAM,QAAQA,EAAC;AAAA,EAC/B;AAAA,EAEA,MAAM,OAAqB;AACvB,WAAO,KAAK,SAAS,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AAAA,EAChE;AAAA,EAEA,OAAO,MAAMA,IAAW,OAA4B;AAC1C,UAAA,OAAO,SAASA,IAAG,EAAE;AACpB,WAAA,IAAI,KAAK,MAAM,KAAK;AAAA,EAC/B;AACJ;AAIgB,SAAA,uBAAuB,OAAqB,KAAmC;AAC3F,QAAM,OAAO,CAAA;AACP,QAAA,gBAAgB,IAAI,MAAM,KAAK;AACrC,WAASK,KAAI,GAAGA,MAAK,eAAeA,MAAK;AACrC,SAAK,KAAK,MAAM,QAAQA,EAAC,CAAC;AAAA,EAC9B;AACO,SAAA;AACX;AAEgB,SAAA,wBAAwB,OAAiB,KAA2B;AAChF,QAAM,QAAQ,CAAA;AACR,QAAA,iBAAiB,IAAI,MAAM,KAAK;AACtC,WAASA,KAAI,GAAGA,MAAK,gBAAgBA,MAAK;AACtC,UAAM,KAAK,MAAM,SAASA,EAAC,CAAC;AAAA,EAChC;AACO,SAAA;AACX;AAEgB,SAAA,yBAAyB,OAAkB,KAA6B;AACpF,QAAM,SAAS,CAAA;AACT,QAAA,kBAAkB,IAAI,MAAM,KAAK;AACvC,WAASA,KAAI,GAAGA,MAAK,iBAAiBA,MAAK;AACvC,WAAO,KAAK,MAAM,UAAUA,EAAC,CAAC;AAAA,EAClC;AACO,SAAA;AACX;AAEgB,SAAA,wBAAwB,OAAa,KAAmB;AACpE,QAAM,QAAQ,CAAA;AACR,QAAA,iBAAiB,IAAI,MAAM,KAAK;AACtC,WAASA,KAAI,GAAGA,MAAK,gBAAgBA,MAAK;AACtC,UAAM,KAAK,MAAM,SAASA,EAAC,CAAC;AAAA,EAChC;AACO,SAAA;AACX;AAEgB,SAAA,mBAAmB,OAAwB,KAAkC;AACrF,MAAA,UAAU,QAAQ,QAAQ,MAAM;AAChC,WAAO;EACX;AACI,MAAA,iBAAiB,gBAAgB,eAAe,cAAc;AACvD,WAAA,uBAAuB,OAAO,GAAG;AAAA,EAC5C;AACI,MAAA,iBAAiB,YAAY,eAAe,UAAU;AAC/C,WAAA,wBAAwB,OAAO,GAAG;AAAA,EAC7C;AACI,MAAA,iBAAiB,aAAa,eAAe,WAAW;AACjD,WAAA,yBAAyB,OAAO,GAAG;AAAA,EAC9C;AACI,MAAA,iBAAiB,QAAQ,eAAe,MAAM;AACvC,WAAA,wBAAwB,OAAO,GAAG;AAAA,EAC7C;AACA,QAAM,IAAI,MAAM,8DAA8D,KAAK,KAAK,GAAG,EAAE;AACjG;AAEgB,SAAA,cAAcE,IAAaiB,IAAqB;AACxD,MAAAjB,cAAa,gBAAgBiB,cAAa,cAAc;AACjD,WAAAjB,GAAE,MAAMiB,EAAC;AAAA,EACpB;AACI,MAAAjB,cAAa,YAAYiB,cAAa,UAAU;AACzC,WAAAjB,GAAE,MAAMiB,EAAC;AAAA,EACpB;AACI,MAAAjB,cAAa,aAAaiB,cAAa,WAAW;AAC3C,WAAAjB,GAAE,MAAMiB,EAAC;AAAA,EACpB;AACI,MAAAjB,cAAa,QAAQiB,cAAa,MAAM;AACjC,WAAAjB,GAAE,MAAMiB,EAAC;AAAA,EACpB;AACA,QAAM,IAAI,MAAM,kBAAkBjB,EAAC,QAAQiB,EAAC,EAAE;AAClD;AAEgB,SAAA,gBAAgBjB,IAAoBiB,IAA4B;AAC5E,MAAIjB,OAAM,MAAM;AACL,WAAA;AAAA,EACX;AACA,MAAIiB,OAAM,MAAM;AACL,WAAA;AAAA,EACX;AACM,QAAA,OAAO,cAAcjB,IAAGiB,EAAC;AAC/B,MAAI,OAAO,GAAG;AACH,WAAA;AAAA,EACX;AACA,MAAI,OAAO,GAAG;AACH,WAAA;AAAA,EACX;AACO,SAAA;AACX;AAEO,SAAS,kBAAkB,QAAgE;AAC9F,MAAI,MAAM;AACV,MAAI,MAAM;AACV,aAAW,SAAS,QAAQ;AACxB,QAAI,UAAU,MAAM;AAChB;AAAA,IACJ;AACA,QAAI,QAAQ,QAAQ,gBAAgB,OAAO,GAAG,IAAI,GAAG;AAC3C,YAAA;AAAA,IACV;AACA,QAAI,QAAQ,QAAQ,gBAAgB,OAAO,GAAG,IAAI,GAAG;AAC3C,YAAA;AAAA,IACV;AAAA,EACJ;AACI,MAAA,QAAQ,QAAQ,QAAQ,MAAM;AACvB,WAAA;AAAA,EACX;AACO,SAAA,CAAC,KAAK,GAAG;AACpB;AAEgB,SAAA,QAAQ,UAAoB,QAA0B;AAClE,MAAI,oBAAoB,cAAc;AAC3B,WAAA,SAAS,QAAQ,MAAM;AAAA,EAClC;AACA,MAAI,oBAAoB,UAAU;AACvB,WAAA,SAAS,SAAS,MAAM;AAAA,EACnC;AACA,MAAI,oBAAoB,WAAW;AACxB,WAAA,SAAS,UAAU,MAAM;AAAA,EACpC;AACA,MAAI,oBAAoB,MAAM;AACnB,WAAA,SAAS,SAAS,MAAM;AAAA,EACnC;AACA,QAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AACnD;ACzVO,SAAS,gBAAgB,QAAmD;AAC/E,MAAI,MAAM;AACV,MAAI,MAAM;AACV,aAAW,SAAS,QAAQ;AACpB,QAAA,QAAQ,QAAQ,QAAQ,KAAK;AACvB,YAAA;AAAA,IACV;AACI,QAAA,QAAQ,QAAQ,QAAQ,KAAK;AACvB,YAAA;AAAA,IACV;AAAA,EACJ;AACI,MAAA,QAAQ,QAAQ,QAAQ,MAAM;AACvB,WAAA;AAAA,EACX;AACO,SAAA,CAAC,KAAK,GAAG;AACpB;ACFA,MAAM,SAAS,GAAG,eAAe,UAAU;AAE3C,MAAM,gCAAgC,CAAC,EAAE,MAAM,qBAAyD;AACpG,QAAM,YAAY,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE;AACrC,QAAM,QAAQ,KAAK,IAAI,CAAC,cAAc,UAAU,QAAQ,IAAI,CAAC,cAAc,UAAU,KAAK,CAAC,EAAE,KAAK;AAClG,QAAM,CAAC,UAAU,QAAQ,IAAI,gBAAgB,KAAK;AAC5C,QAAA,cAAc,CAAC,UAAkB;AACnC,YAAS,QAAQ,aAAa,WAAW,YAAa,MAAM;AAAA,EAAA;AAGhE,QAAM,SAA6B;AAAA,IAC/B,MAAM;AAAA,IACN,MAAM;AAAA,MACF,UAAU,KAAK,IAAI,CAAC,WAAW,WAAW;AAAA,QACtC,OAAO,UAAU;AAAA,QACjB,MAAM,UAAU,QACX,OAAO,CAAC,cAAc,UAAU,cAAc,IAAI,EAClD,IAAI,CAAC,eAAe;AAAA,UACjB,GAAG,cAAc,UAAU,WAAY,SAAS;AAAA,UAChD,GAAG,UAAU;AAAA,UACb,GAAG,YAAY,UAAU,KAAK;AAAA,QAAA,EAChC;AAAA,QACN,aAAa;AAAA,QACb,aAAa;AAAA,QACb,iBAAiB,yBAAyB,OAAO,GAAG;AAAA,QACpD,aAAa,yBAAyB,KAAK;AAAA,MAAA,EAC7C;AAAA,IACN;AAAA,IACA,SAAS;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,QACJ,GAAG;AAAA,UACC,OAAO;AAAA,YACH,UAAU,CAAC,UAAU,QAAQ,WAAW,KAAe,EAAE,SAAS;AAAA,UACtE;AAAA,QACJ;AAAA,QACA,GAAG,cAAc,cAAc;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACL,QAAQ;AAAA,UACJ,SAAS;AAAA,QACb;AAAA,QACA,SAAS;AAAA,UACL,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,YACP,OAAO,CAAC,YAAY;;AAChB,oBAAM,UAAU,KAAK,QAAQ,CAAC,EAAE,YAAa;AAC7C,oBAAM,YAAY,QAAQ,QAAQ,QAAQ,CAAC,EAAE,SAAU;AAChD,sBAAA,eAAU,cAAV,mBAAqB;AAAA,YAChC;AAAA,YACA,OAAO,CAAC,YAAY;AACV,oBAAA,UAAU,KAAK,QAAQ,YAAa;AAC1C,oBAAM,YAAY,QAAQ,QAAQ,QAAQ,SAAU;AAEpD,oBAAM,cAAc,UAAU,aAAa,KAAK,QAAQ,CAAC;AACzD,oBAAM,QAAQ,UAAU,MAAM,QAAQ,CAAC;AACvC,oBAAMwD,SAAQ,UAAU,MAAM,QAAQ,CAAC;AAEhC,qBAAA,GAAG,QAAQ,WAAW,KAAK,UAAU,MAAM,KAAK,IAAIA,MAAK;AAAA,YACpE;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EAAA;AAGG,SAAAzD,oBAAC,SAAQ,EAAA,eAAe,OAAQ,CAAA;AAC3C;AC/DA,MAAM,SAAS,GAAG,eAAe,UAAU;AAE3C,MAAM,8BAA8B,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACJ,MAAwC;;AACpC,QAAMa,YAAW,KAAK,IAAI,CAAC,WAAW,UAAU,WAAW,WAAW,OAAO,wBAAwB,CAAC,EAAE,KAAK;AAC7G,QAAM,WAAS,UAAK,CAAC,MAAN,mBAAS,QAAQ,IAAI,CAAC,cAAc;;AAAA,aAAAtB,MAAA,UAAU,cAAV,gBAAAA,IAAqB,eAAc;AAAA,SAAc,CAAA;AAEpG,QAAM,SAA6B;AAAA,IAC/B,MAAM;AAAA,IACN,MAAM;AAAA,MACF;AAAA,MACA,UAAAsB;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,QACJ,GAAG,cAAc,cAAc;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACL,QAAQ;AAAA,UACJ,SAAS;AAAA,QACb;AAAA,QACA,SAASC,UAAQ,wBAAwB;AAAA,MAC7C;AAAA,IACJ;AAAA,EAAA;AAGG,SAAAd,oBAAC,SAAQ,EAAA,eAAe,OAAQ,CAAA;AAC3C;AAEA,MAAM,aAAa,CACf,2BACA,WACA,6BACC;AACD,UAAQ,0BAA0B;AAAA,IAC9B,KAAK;AACM,aAAA;AAAA,QACH,kBAAkB,2BAA2B,SAAS;AAAA,QACtD,eAAe,2BAA2B,SAAS;AAAA,QACnD,kBAAkB,2BAA2B,SAAS;AAAA,QACxD,KAAK;AAAA,IACX;AACW,aAAA,eAAe,2BAA2B,SAAS;AAAA,EAClE;AACJ;AAEA,MAAM,oBAAoB,CAAC,2BAA0D,eAAuB;AAAA,EACxG,OAAO,GAAG,0BAA0B,WAAW;AAAA,EAC/C,MAAM,0BAA0B,QAAQ;AAAA,IACpC,CAAC,cAAc,kCAAkC,UAAU,OAAO,UAAU,KAAK,EAAE;AAAA,EACvF;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,MAAM;AAAA,EACN,iBAAiB,yBAAyB,WAAW,GAAG;AAC5D;AAEA,MAAM,oBAAoB,CAAC,2BAA0D,eAAuB;AAAA,EACxG,OAAO,GAAG,0BAA0B,WAAW;AAAA,EAC/C,MAAM,0BAA0B,QAAQ;AAAA,IACpC,CAAC,cAAc,kCAAkC,UAAU,OAAO,UAAU,KAAK,EAAE;AAAA,EACvF;AAAA,EACA,aAAa;AAAA,EACb,aAAa;AAAA,EACb,MAAM;AAAA,EACN,iBAAiB,yBAAyB,WAAW,GAAG;AAC5D;AAEA,MAAM,iBAAiB,CAAC,2BAA0D,eAAuB;AAAA,EACrG,OAAO,0BAA0B;AAAA,EACjC,MAAM,0BAA0B,QAAQ,IAAI,CAAC,cAAc,UAAU,UAAU;AAAA,EAC/E,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa,yBAAyB,SAAS;AAAA,EAC/C,iBAAiB,yBAAyB,SAAS;AACvD;AAEA,MAAMc,YAAU,CAAC,6BAAwD;AACrE,QAAM,gBAAgB;AAAA,IAClB,MAAM;AAAA,IACN,WAAW;AAAA,EAAA;AAGf,UAAQ,0BAA0B;AAAA,IAC9B,KAAK;AACM,aAAA;AAAA,QACH,GAAG;AAAA,QACH,QAAQ,CAAC,EAAE,mBAAwC;AAC/C,iBAAO,eAAe,MAAM;AAAA,QAChC;AAAA,QACA,WAAW;AAAA,UACP,OAAO,CAAC,YAAiC;AACjC,gBAAA,QAAQ,eAAe,MAAM,GAAG;AAChC,oBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,oBAAM,UAAU,QAAQ,QAAQ,KAAK,QAAQ,YAAY,CAAC;AAC1D,oBAAM,UAAU,QAAQ,QAAQ,KAAK,QAAQ,YAAY,CAAC;AAGtD,kBAAA,OAAO,UAAU,YACjB,OAAO,YAAY,YACnB,OAAO,YAAY,UACrB;AACS,uBAAA;AAAA,cACX;AAEA,qBAAO,4BAA4B,OAAO,SAAS,SAAS,QAAQ,QAAQ,KAAK;AAAA,YACrF;AACA,mBAAO,QAAQ,QAAQ;AAAA,UAC3B;AAAA,QACJ;AAAA,MAAA;AAAA,IAER;AACW,aAAA;AAAA,EACf;AACJ;AC/HA,MAAM,0BAA0B,CAAC,EAAE,MAAM,kBAAgD;AAC/E,QAAA,kBAAkB,CAAC4C,UAAiC;AAC/CA,WAAAA,MAAK,IAAI,CAAC,aAAa;AAAA,MAC1B,MAAM,QAAQ;AAAA,MACd,SAAS;AAAA,QACL;AAAA,UACI,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAW,CAAC,SAAiB,iBAAiB,IAAI;AAAA,QACtD;AAAA,QACA;AAAA,UACI,MAAM;AAAA,UACN,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACF,EAAA;AAAA,EAAA;AAGA,QAAA,aAAa,CAACA,UAAiC;AAAA,IACjD;AAAA,MACI,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA,GAAG,gBAAgBA,KAAI;AAAA,EAAA;AAGrB,QAAA,UAAU,CAACA,OAA8BC,iBAAqC;AAC1E,UAAA,eAAe,+BAA+BD,OAAMC,YAAW;AAC9D,WAAA,OAAO,OAAO,YAAY,EAAE,IAAI,CAAC,QAAQ,OAAO,OAAO,GAAG,CAAC;AAAA,EAAA;AAGtE,SAAQ3D,oBAAA,OAAA,EAAM,MAAM,QAAQ,MAAM,WAAW,GAAG,SAAS,WAAW,IAAI,GAAG,YAAY,MAAO,CAAA;AAClG;AC7BO,MAAM,iBAQb;AAAA,EACI,YACY,WACA,aACA,UACA,YACA,aACA,gBACA,kBACV;AAPU,SAAA,YAAA;AACA,SAAA,cAAA;AACA,SAAA,WAAA;AACA,SAAA,aAAA;AACA,SAAA,cAAA;AACA,SAAA,iBAAA;AACA,SAAA,mBAAA;AAAA,EACT;AAAA,EAEH,MAAM,SACF,OACA,QAC8G;AAC9G,UAAM,qBAAqB,MAAM,KAAK,UAAU,SAAS,OAAO,MAAM;AACtE,UAAM,uBAAuB,MAAM,KAAK,YAAY,SAAS,OAAO,MAAM;AAEpE,UAAA,mCAAmB;AACN,uBAAA,QAAQ,QAAQ,CAAC,QAAQ;AAC3B,mBAAA,IAAI,IAAI,KAAK,QAAQ,GAAG,IAAI,KAAK,UAAU,CAAC;AAAA,IAAA,CAC5D;AAED,UAAM,UAAU,qBAAqB,QAAQ,IAAI,CAAC,QAAQ;AACtD,YAAM,iBAAiB,aAAa,IAAI,IAAI,KAAK,QAAQ,CAAC,KAAK;AACxD,aAAA;AAAA,QACH,CAAC,KAAK,QAAQ,GAAG,IAAI,KAAK,QAAQ;AAAA,QAClC,CAAC,KAAK,cAAc,GAAG;AAAA,QACvB,CAAC,KAAK,gBAAgB,GAAG,IAAI,KAAK,UAAU;AAAA,QAC5C,CAAC,KAAK,WAAW,GAAI,iBAA6B,IAAI,KAAK,UAAU;AAAA,MAAA;AAAA,IACzE,CAGH;AAED,WAAO,EAAE,QAAQ;AAAA,EACrB;AACJ;ACrDO,MAAM,wBAOb;AAAA,EACI,YACY,QACA,QACV;AAFU,SAAA,SAAA;AACA,SAAA,SAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,UAAkB,QAAoE;AACjG,UAAM4D,uBACF,MAAM;AAAA,MACF;AAAA,MACA;AAAA,QACI,GAAG,KAAK;AAAA,QACR,QAAQ,KAAK;AAAA,MACjB;AAAA,MACA;AAAA,IAEN,GAAA;AAEE,QAAA,uBAAmDA,mBAAkB,GAAG;AACjE,aAAA;AAAA,QACH,SAASA;AAAA,MAAA;AAAA,IAEjB;AAEM,UAAA,IAAI,MAAM,yCAAyC;AAAA,EAC7D;AACJ;AAEA,SAAS,uBAA0B,MAA2D;AAC1F,SAAO,KAAK,MAAM,CAAC,SAAS,OAAO,SAAS,YAAY,WAAW,QAAQ,OAAO,KAAK,UAAU,QAAQ;AAC7G;ACxCO,MAAM,oBAAkF;AAAA,EAC3F,YACY,OACA,UACA,aACA,sBACA,gBACV;AALU,SAAA,QAAA;AACA,SAAA,WAAA;AACA,SAAA,cAAA;AACA,SAAA,uBAAA;AACA,SAAA,iBAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,OAAe,QAA8C;AACxE,UAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AAC9D,UAAM,eAAe,IAAI,IAAI,eAAe,QAAQ,IAAI,CAAC,QAAQ,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC9E,UAAA,SAAS,KAAK,YAAY,YAAY;AAC5C,QAAI,WAAW,MAAM;AACV,aAAA;AAAA,IACX;AACM,UAAA,CAAC,KAAK,GAAG,IAAI;AACnB,UAAM,eAAe,KAAK,qBAAqB,KAAK,GAAG;AACvD,UAAM,UAAU,eAAe;AAC/B,eAAW,OAAO,cAAc;AAC5B,UAAI,CAAC,aAAa,IAAI,GAAG,GAAG;AACxB,gBAAQ,KAAK,KAAK,eAAe,GAAG,CAAC;AAAA,MACzC;AAAA,IACJ;AACA,WAAO,EAAE,QAAQ;AAAA,EACrB;AACJ;AC1BO,MAAM,gBAEb;AAAA,EACI,YACY,OACA,OACA,WACV;AAHU,SAAA,QAAA;AACA,SAAA,QAAA;AACA,SAAA,YAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,OAAe,QAA2D;AACrF,UAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AACxD,UAAA,8BAAc;AACT,eAAA,OAAO,eAAe,SAAS;AAChC,YAAA,MAAM,IAAI,KAAK,KAAK;AAC1B,UAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACX,gBAAA,IAAI,KAAK,CAAA,CAAE;AAAA,MACvB;AACA,cAAQ,IAAI,GAAG,EAAG,KAAK,GAAG;AAAA,IAC9B;AACM,UAAA,SAAS,IAAI;AACnB,eAAW,CAAA,EAAG,MAAM,KAAK,SAAS;AAC9B,aAAO,KAAK,KAAK,UAAU,MAAM,CAAC;AAAA,IACtC;AAEO,WAAA;AAAA,MACH,SAAS;AAAA,IAAA;AAAA,EAEjB;AACJ;ACvBO,MAAM,8BAIH,gBAA4E;AAAA,EAClF,YAAY,OAAuB,cAA4B,UAAsB;AAC3E,UAAA,OAAO,cAAc,CAAC,WAAmB;AAC3C,UAAIjF,KAAI;AACR,iBAAW,SAAS,QAAQ;AACxB,QAAAA,MAAK,MAAM,QAAQ;AAAA,MACvB;AACO,aAAA;AAAA,QACH,CAAC,YAAY,GAAG,OAAO,CAAC,EAAE,YAAY;AAAA,QACtC,CAAC,QAAQ,GAAGA;AAAA,MAAA;AAAA,IAChB,CACH;AAAA,EACL;AACJ;ACtBO,MAAM,YAAyC;AAAA,EAClD,YACY,OACA,MACV;AAFU,SAAA,QAAA;AACA,SAAA,OAAA;AAAA,EACT;AAAA,EAEH,MAAM,SAAS,OAAe,QAA2C;AACrE,UAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AACvD,WAAA;AAAA,MACH,SAAS,eAAe,QAAQ,IAAI,KAAK,IAAI;AAAA,IAAA;AAAA,EAErD;AACJ;ACbO,MAAM,gBAAgF;AAAA,EACzF,YACY,OACA,YACA,WACV;AAHU,SAAA,QAAA;AACA,SAAA,aAAA;AACA,SAAA,YAAA;AAER,QAAI,aAAa,GAAG;AACV,YAAA,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,OAAe,QAAsB;AAChD,UAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,OAAO,MAAM;AACxD,UAAA,UAAU,IAAI;AACd,UAAA,kBAAkB,KAAK,IAAI,eAAe,QAAQ,SAAS,KAAK,YAAY,CAAC,IAAI;AACvF,aAASG,KAAI,GAAGA,KAAI,iBAAiBA,MAAK;AAC9B,cAAA,KAAK,KAAK,UAAU,eAAe,QAAQ,MAAMA,IAAGA,KAAI,KAAK,UAAU,CAAC,CAAC;AAAA,IACrF;AACA,WAAO,EAAE,QAAQ;AAAA,EACrB;AACJ;ACCO,SAAS,wBACZ,iBACA,mBACA,aACA,iBACA,OACA,QAC+B;AACzB,QAAA,mBAAmB,UAAU,eAAe;AAElD,QAAM,kBAAkB,gBAAgB,UAAU,iBAAiB,GAAG,aAAa,eAAe;AAClG,QAAM,aAAa,iBAAiB,IAAI,OAAO,qBAAqB;AAChE,UAAM,EAAE,aAAa,GAAG,OAAA,IAAW;AACnC,UAAM,gBAAgB,gBAAgB,QAAQ,aAAa,eAAe;AAC1E,UAAM,SAAS,IAAI;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEJ,UAAM,UAAU,MAAM,OAAO,SAAS,OAAO,MAAM;AAC5C,WAAA;AAAA,MACH;AAAA,MACA,SAAS,QAAQ;AAAA,IAAA;AAAA,EACrB,CACH;AACM,SAAA,QAAQ,IAAI,UAAU;AACjC;AAEA,SAAS,UAAU,QAA0B;AAEzC,QAAM,EAAE,aAAa,GAAG,yBAAA,IAA6B;AAC9C,SAAA;AACX;AAEA,SAAS,UAAa,mBAA4B;AAC1C,MAAA,MAAM,QAAQ,iBAAiB,GAAG;AAC3B,WAAA;AAAA,EACX;AACA,SAAO,CAAC,iBAAiB;AAC7B;AAEA,SAAS,gBAAgB,QAAqB,aAAkC,iBAAyB;AACrG,QAAM,YAAY,IAAI,wBAEnB,QAAQ,CAAC,MAAM,CAAC;AACb,QAAA,UAAU,IAAI,YAAY,WAAW,CAACK,OAAM,0BAA0BA,IAAG,WAAW,CAAC;AAC3F,QAAM,cAAc,IAAI,sBAAsB,SAAS,aAAa,OAAO;AAC3E,QAAM,WAAW,IAAI;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,SAAS,EAAE,WAAW,KAAK,OAAO,EAAE;AAAA,EAAA;AAEzC,QAAM,WAAW,IAAI,aAAa,UAAU,gBAAgB;AAE5D,SAAO,mBAAmB,IAAI,IAAI,gBAAgB,UAAU,iBAAiB,gBAAgB,IAAI;AACrG;AAEA,SAAS,0BAA0BA,IAA2C,aAAkC;AAC5G,MAAI,YAA6B;AAC7B,MAAAA,GAAE,SAAS,MAAM;AACjB,UAAM,OAAO,cAAc,YAAA,EAAc,gBAAgBA,GAAE,IAAI;AAC/D,YAAQ,aAAa;AAAA,MACjB,KAAK;AACW,oBAAA;AACZ;AAAA,MACJ,KAAK;AACD,oBAAY,KAAK;AACjB;AAAA,MACJ,KAAK;AACD,oBAAY,KAAK;AACjB;AAAA,MACJ,KAAK;AACD,oBAAY,KAAK;AACjB;AAAA,IACR;AAAA,EACJ;AACO,SAAA;AAAA,IACH;AAAA,IACA,OAAOA,GAAE;AAAA,EAAA;AAEjB;AAEA,SAAS,iBAAiBH,IAAmCiB,IAAmC;AACxF,MAAAjB,GAAE,cAAc,MAAM;AACf,WAAA;AAAA,EACX;AACI,MAAAiB,GAAE,cAAc,MAAM;AACf,WAAA;AAAA,EACX;AACA,SAAO,gBAAgBjB,GAAE,WAAWiB,GAAE,SAAS;AACnD;AAEA,SAAS,iBAAiB,eAAgE;AAChF,QAAA,UAAU,cAAc,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,OAAO,CAAC,IAAI,cAAc;AACzF,QAAM,cAAc,KAAK,MAAM,cAAc,SAAS,CAAC;AACvD,SAAO,EAAE,WAAW,cAAc,WAAW,EAAE,WAAW,OAAO;AACrE;ACnHO,MAAM,SAAyC,CAAC,EAAE,OAAO,UAAU,UAAU,kBAAkB;AAE9F,SAAAD,oBAAC,UAAO,EAAA,OAAO,0BAA0B,WAAW,IAAI,OAAO,UAAU,UACpE,UAAM,MAAA,IAAI,CAAC,6BACP,UAAwB,EAAA,OAAO,KAAK,OAAO,UAAU,KAAK,UACtD,UAAA,KAAK,MADG,GAAA,KAAK,KAElB,CACH,EACL,CAAA;AAER;ACTO,MAAM,6BAAiF,CAAC;AAAA,EAC3F;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACE,MAAA,0BAA0B,WAAW,GAAG;AACjC,WAAA;AAAA,EACX;AAEA,QAAM,QAAQ;AAAA,IACV,EAAE,OAAO,8BAA8B,OAAO,QAAQ,UAAU,KAAK;AAAA,IACrE,GAAG,0BAA0B,OAAO,MAAM,EAAE,IAAI,CAAC,WAAW;AACxD,cAAQ,QAAQ;AAAA,QACZ,KAAK;AACD,iBAAO,EAAE,OAAO,kBAAkB,OAAO,SAAS;AAAA,QACtD,KAAK;AACD,iBAAO,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,MAC9C;AAAA,IAAA,CACH;AAAA,EAAA;AAID,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,UAAU,6BAA6B,SAAY,SAAS;AAAA,MAC5D,UAAU,CAAC,UAAiB;AACxB,cAAM,SAAS,MAAM;AACrB,cAAM,QAAQ,OAAO;AACrB,oCAA4B,KAAK;AAAA,MACrC;AAAA,MACA,aAAa;AAAA,IAAA;AAAA,EAAA;AAGzB;ACjCO,MAAM,kBAA2D,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,QAAM,QAAQ;AAAA,IACV,EAAE,OAAO,uBAAuB,OAAO,QAAQ,UAAU,KAAK;AAAA,IAC9D,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,IACnC,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,IAC7C,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EAAA;AAIjC,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,UAAU;AAAA,MACV,UAAU,CAAC,UAAiB;AACxB,cAAM,SAAS,MAAM;AACrB,cAAM,QAAQ,OAAO;AACrB,0BAAkB,KAAK;AAAA,MAC3B;AAAA,MACA,aAAa,GAAG,SAAS;AAAA,IAAA;AAAA,EAAA;AAGrC;ACAO,MAAM,qBAAiE,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACI,QAAA,QAAQQ,EAAW,eAAe;AAExC,QAAM,EAAE,MAAM,OAAO,UAAc,IAAA;AAAA,IAC/B,MAAM,wBAAwB,WAAW,aAAa,aAAa,iBAAiB,KAAK;AAAA,IACzF,CAAC,OAAO,WAAW,aAAa,aAAa,eAAe;AAAA,EAAA;AAGhE,QAAM,WAAW;AAEjB,MAAI,WAAW;AACX,+BACK,UAAS,EAAA,SAAS,UACf,UAAAR,oBAAC,kBAAe,EACpB,CAAA;AAAA,EAER;AAEA,MAAI,UAAU,MAAM;AAChB,+BACK,UAAS,EAAA,SAAS,UACf,UAACA,oBAAA,cAAA,EAAa,MAAc,CAAA,EAChC,CAAA;AAAA,EAER;AAEA,MAAI,SAAS,MAAM;AACf,+BACK,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,EACnB,CAAA;AAAA,EAER;AAGI,SAAAA,oBAAC,UAAS,EAAA,SAAS,UACf,UAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAER,EAAA,CAAA;AAER;AASA,MAAM,yBAAyE,CAAC;AAAA,EAC5E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACF,QAAM,CAAC,gBAAgB,iBAAiB,IAAIE,EAAoB,QAAQ;AAClE,QAAA,CAAC,0BAA0B,2BAA2B,IAAIA;AAAAA,IAC5D,0BAA0B,SAAS,IAAI,0BAA0B,CAAC,IAAI;AAAA,EAAA;AAGpE,QAAA,SAAS,CAAC,SAAe;AAC3B,YAAQ,MAAM;AAAA,MACV,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIF;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAGZ,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAGZ,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SAASA,oBAAC,+BAA8B,EAAA,MAAY,eAAgC,CAAA;AAAA,QAAA;AAAA,MAE5F,KAAK;AACM,eAAA,EAAE,OAAO,SAAS,6BAAU,yBAAwB,EAAA,MAAY,YAA0B,CAAA;IACzG;AAAA,EAAA;AAGJ,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAEvC,QAAA,UAAU,CAAC,cACbA;AAAAA,IAACU;AAAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAID,SAAAV,oBAAC,MAAK,EAAA,MAAY,QAAkB,CAAA;AAC/C;AAaA,MAAMU,YAA2C,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AAEE,SAAAL,oBAAC,OAAI,EAAA,OAAM,QACN,UAAA;AAAA,IAAA,cAAc,WACXL,oBAAC,iBAAgB,EAAA,gBAAgC,mBAAsC;AAAA,KAEzF,cAAc,SAAS,cAAc,WACnCA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACJ;AAAA,IAEJA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,SAAS,MAAM,+BAA+B,MAAM,WAAW;AAAA,QAC/D,UAAS;AAAA,MAAA;AAAA,IACb;AAAA,IACCA,oBAAA,MAAA,EAAK,WAAU,QAAO,SAAQ,iCAAgC;AAAA,EACnE,EAAA,CAAA;AAER;;;;;;;;;;;;AC/La,IAAA,8BAAN,cAA0C,iCAAiC;AAAA,EAA3E,cAAA;AAAA,UAAA,GAAA,SAAA;AAEgD,SAAA,YAAA,EAAE,aAAa,GAAG;AAGrC,SAAA,cAAA,EAAE,aAAa,GAAG;AAGf,SAAA,cAAA;AAGT,SAAA,kBAAA;AAG1B,SAAA,QAAgB,CAAC,OAAO,QAAQ,UAAU,OAAO;AAGjD,SAAA,4BAAwD,CAAC,QAAQ;AAAA,EAAA;AAAA,EAExD,SAAS;AAEV,WAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,aAAa,KAAK;AAAA,QAClB,iBAAiB,KAAK;AAAA,QACtB,OAAO,KAAK;AAAA,QACZ,2BAA2B,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAG5C;AACJ;AA7BIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADjB,4BAET,WAAA,aAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJjB,4BAKT,WAAA,eAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAPjB,4BAQT,WAAA,eAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAVjB,4BAWT,WAAA,mBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAbhB,4BAcT,WAAA,SAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAhBhB,4BAiBT,WAAA,6BAAA,CAAA;AAjBS,8BAAND,kBAAA;AAAA,EADNE,IAAc,yBAAyB;AAAA,GAC3B,2BAAA;ACqBb,MAAM,SAAS,GAAG,eAAe,UAAU;AAE3C,MAAM,+BAA+B,CAAC,EAAE,MAAM,qBAAwD;AAClG,QAAM,SAA6B;AAAA,IAC/B,MAAM;AAAA,IACN,MAAM;AAAA,MACF,QAAQ,KAAK;AAAA,MACb,UAAU,SAAS,IAAI;AAAA,IAC3B;AAAA,IACA,SAAS;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,QACJ,GAAG,cAAc,cAAc;AAAA,MACnC;AAAA,MACA,SAAS;AAAA,QACL,QAAQ;AAAA,UACJ,SAAS;AAAA,QACb;AAAA,QACA,SAAS,QAAQ;AAAA,MACrB;AAAA,IACJ;AAAA,EAAA;AAGJ,SAEQU,oBAAA,UAAA,EAAA,UAAA;AAAA,IAACL,oBAAA,SAAA,EAAQ,eAAe,OAAQ,CAAA;AAAA,wBAC/B,OAAI,EAAA,UAAA;AAAA,MAAA;AAAA,OACY,KAAK,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC;AAAA,MAAE;AAAA,OAAK,KAAK,OAAO,GAAG,UAAU,KAAK,QAAQ,CAAC;AAAA,MAAE;AAAA,MAAI;AAAA,OACpG,KAAK,OAAO,GAAG,UAAU,KAAK,QAAQ,CAAC;AAAA,MAAE;AAAA,IAAA,GAC/C;AAAA,EACJ,EAAA,CAAA;AAER;AAEA,MAAM,WAAW,CAAC,SAA2C;AAClD,SAAA;AAAA,IACH;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa,0BAA0B,QAAQ;AAAA,MAC/C,iBAAiB,0BAA0B,QAAQ;AAAA,IACvD;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM;AAAA,MACN,iBAAiB,0BAA0B,UAAU,GAAG;AAAA,IAC5D;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,MACX,aAAa;AAAA,MACb,aAAa;AAAA,MACb,MAAM;AAAA,MACN,iBAAiB,0BAA0B,UAAU,GAAG;AAAA,IAC5D;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM,KAAK;AAAA,MACX,sBAAsB,0BAA0B,OAAO;AAAA,MACvD,aAAa;AAAA,IACjB;AAAA,EAAA;AAER;AAEA,MAAM,UAAU,MAAM;AACX,SAAA;AAAA,IACH,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ,CAAC,EAAE,mBAAwC;AACxC,aAAA,iBAAiB,KAAK,iBAAiB;AAAA,IAClD;AAAA,IACA,WAAW;AAAA,MACP,OAAO,CAAC,YAAiC;AACrC,gBAAQ,QAAQ,cAAc;AAAA,UAC1B,KAAK,GAAG;AACJ,kBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AACpD,kBAAM,UAAU,QAAQ,QAAQ,KAAK,QAAQ,YAAY,CAAC;AAC1D,kBAAM,UAAU,QAAQ,QAAQ,KAAK,QAAQ,YAAY,CAAC;AACtD,gBAAA,OAAO,UAAU,YAAY,OAAO,YAAY,YAAY,OAAO,YAAY,UAAU;AAClF,qBAAA;AAAA,YACX;AACA,mBAAO,4BAA4B,OAAO,SAAS,SAAS,QAAQ,QAAQ,KAAK;AAAA,UACrF;AAAA,UAEA,KAAK,GAAG;AACJ,kBAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AAChD,gBAAA,OAAO,UAAU,UAAU;AACpB,qBAAA;AAAA,YACX;AACA,mBAAO,aAAa,MAAM,QAAQ,CAAC,CAAC;AAAA,UACxC;AAAA,UACA;AACW,mBAAA;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,EAAA;AAER;AChIA,eAAsB,6BAClB,WACA,aACA,gBACA,OACA,QACF;AACE,QAAM,iBAAiB,IAAI,wBAExB,WAAW,CAAC,MAAM,CAAC;AACtB,QAAM,mBAAmB,IAAI,wBAE1B,aAAa,CAAC,MAAM,CAAC;AACxB,QAAM,eAAe,IAAI,YAAY,gBAAgB,cAAc;AACnE,QAAM,iBAAiB,IAAI,YAAY,kBAAkB,cAAc;AACvE,QAAM,CAAC,eAAe,eAAe,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,aAAa,SAAS,OAAO,MAAM;AAAA,IACnC,eAAe,SAAS,OAAO,MAAM;AAAA,EAAA,CACxC;AACK,QAAA,aAAa,kBAAkB,gBAAgB,QAAQ,IAAI,CAACb,OAAMA,GAAE,IAAI,CAAC;AAC/E,MAAI,CAAC,YAAY;AACN,WAAA;AAAA,EACX;AACM,QAAA,CAAC,SAAS,OAAO,IAAI;AACrB,QAAA,sCAAsB;AACd,gBAAA,QAAQ,QAAQ,CAACA,OAAM;AACjC,QAAIA,GAAE,MAAM;AACR,sBAAgB,IAAIA,GAAE,MAAMA,GAAE,KAAK;AAAA,IACvC;AAAA,EAAA,CACH;AACK,QAAA,wCAAwB;AAC9B,QAAM,cAAc;AAAA,IAChB,GAAG,CAAC;AAAA,IACJ,GAAG,CAAC;AAAA,IACJ,GAAG,CAAC;AAAA,EAAA;AAEQ,kBAAA,QAAQ,QAAQ,CAACA,OAAM;AACnC,QAAIA,GAAE,MAAM;AACR,wBAAkB,IAAIA,GAAE,MAAMA,GAAE,KAAK;AACrC,YAAMb,KAAIa,GAAE,KAAK,MAAM,OAAO;AAClB,kBAAA,EAAE,KAAKb,EAAC;AACR,kBAAA,EAAE,KAAKa,GAAE,KAAK;AAC1B,kBAAY,EAAE,KAAK,gBAAgB,IAAIA,GAAE,IAAI,KAAK,CAAC;AAAA,IACvD;AAAA,EAAA,CACH;AACD,QAAM,iBAAiB;AAAA,IACnB,QAAQ;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,4BAA4B;AAAA,MAC5B,QAAQ;AAAA,MACR,MAAM,QAAQ,MAAM,OAAO;AAAA,IAC/B;AAAA,IACA,MAAM;AAAA,EAAA;AAEJ,QAAA,WAAW,MAAM,MAAM,kEAAkE;AAAA,IAC3F,QAAQ;AAAA,IACR,SAAS;AAAA,MACL,gBAAgB;AAAA,IACpB;AAAA,IACA,MAAM,KAAK,UAAU,cAAc;AAAA,IACnC;AAAA,EAAA,CACH;AACK,QAAA,eAAgB,MAAM,SAAS;AAmCrC,QAAM,cAAc;AAAA,IAChB,GAAG;AAAA,IACH,sBAAsB;AAAA,MAClB,GAAG,aAAa;AAAA,MAChB,GAAG,aAAa,qBAAqB,EAAE,IAAI,CAACb,OAAM,QAAQ,QAAQA,EAAC,CAAC;AAAA,IACxE;AAAA,EAAA;AAEE,QAAA,sBAAsB,YAAY,qBAAqB,EAAE;AAAA,IAC3D,CAACA,QAAO,gBAAgB,IAAIA,EAAC,KAAK,MAAM,kBAAkB,IAAIA,EAAC,KAAK;AAAA,EAAA;AAGjE,SAAA;AAAA,IACH,GAAG;AAAA,IACH;AAAA,EAAA;AAER;AAEA,SAAS,eAAea,IAA2C;AACzD,QAAA,gBAAgB,cAAc;AAC7B,SAAA;AAAA,IACH,MAAMA,GAAE,OAAO,cAAc,gBAAgBA,GAAE,IAAI,IAAI;AAAA,IACvD,OAAOA,GAAE;AAAA,EAAA;AAEjB;ACrGO,MAAM,0BAA2E,CAAC;AAAA,EACrF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACI,QAAA,QAAQqB,EAAW,eAAe;AACxC,QAAM,CAAC,gBAAgB,iBAAiB,IAAIN,EAAoB,QAAQ;AAExE,QAAM,EAAE,MAAM,OAAO,UAAc,IAAA;AAAA,IAC/B,MAAM,6BAA6B,WAAW,aAAa,gBAAgB,KAAK;AAAA,IAChF,CAAC,OAAO,WAAW,aAAa,gBAAgB,KAAK;AAAA,EAAA;AAGzD,QAAM,WAAW;AACjB,MAAI,WAAW;AACX,+BACK,UAAS,EAAA,SAAS,UACf,UAAAF,oBAAC,kBAAe,EACpB,CAAA;AAAA,EAER;AAEA,MAAI,UAAU,MAAM;AAChB,+BACK,UAAS,EAAA,SAAS,UACf,UAACA,oBAAA,cAAA,EAAa,MAAc,CAAA,EAChC,CAAA;AAAA,EAER;AAEA,MAAI,SAAS,MAAM;AACf,+BACK,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,EACnB,CAAA;AAAA,EAER;AAGI,SAAAA,oBAAC,UAAS,EAAA,SAAS,UACf,UAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAER,EAAA,CAAA;AAER;AASA,MAAM,8BAAmF,CAAC;AAAA,EACtF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAM;AACI,QAAA,SAAS,CAAC,SAAe;AAC3B,YAAQ,MAAM;AAAA,MACV,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SACIA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACG,MAAM;AAAA,gBACF,GAAG,KAAK;AAAA,gBACR,UAAU,KAAK;AAAA,gBACf,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,IAGhB;AAAA,EAAA;AAGJ,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAC7C,QAAM,UAAU,MACXA,oBAAA,gCAAA,EAA+B,gBAAgC,kBAAsC,CAAA;AAGnG,SAAAA,oBAAC,MAAK,EAAA,MAAY,QAAkB,CAAA;AAC/C;AAOA,MAAM,iCAAyF,CAAC;AAAA,EAC5F;AAAA,EACA;AACJ,MAAM;AAEE,SAAAK,oBAAC,OAAI,EAAA,OAAM,QACP,UAAA;AAAA,IAACL,oBAAA,iBAAA,EAAgB,gBAAgC,kBAAsC,CAAA;AAAA,IACtFA,oBAAA,MAAA,EAAK,WAAU,QAAO,SAAQ,cAAa;AAAA,EAChD,EAAA,CAAA;AAER;;;;;;;;;;;;AChIa,IAAA,mCAAN,cAA+C,iBAAiB;AAAA,EAAhE,cAAA;AAAA,UAAA,GAAA,SAAA;AAEH,SAAA,YAAyB;AAGzB,SAAA,cAA2B;AAGF,SAAA,iBAAA;AAGzB,SAAA,QAAgB,CAAC,MAAM;AAAA,EAAA;AAAA,EAEd,SAAS;AAEV,WAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,gBAAgB,KAAK;AAAA,QACrB,OAAO,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGxB;AACJ;AArBIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GADjB,iCAET,WAAA,aAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJjB,iCAKT,WAAA,eAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAPjB,iCAQT,WAAA,kBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAVhB,iCAWT,WAAA,SAAA,CAAA;AAXS,mCAAND,kBAAA;AAAA,EADNE,IAAc,8BAA8B;AAAA,GAChC,gCAAA;ACIN,MAAM,iBAAyD,CAAC,EAAE,MAAM,aAAa;AACxF,QAAM,UAAU;AAAA,IACZ,GAAG,OAAO,IAAI,CAAC,UAAU;AACd,aAAA;AAAA,QACH,MAAM;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,IACV,CACH;AAAA,IACD;AAAA,MACI,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAAA,IACA;AAAA,MACI,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW,CAAC,SAAiB,iBAAiB,IAAI;AAAA,IACtD;AAAA,EAAA;AAGJ,6BAAQ,OAAM,EAAA,MAAY,SAAS,SAAS,YAAY,KAAM,CAAA;AAClE;ACvBA,eAAsB,mBAAmB,SAAsB,QAAkB,OAAe,QAAsB;AAClH,QAAM,YAAY,IAAI,wBAAgE,SAAS,MAAM;AACrG,QAAM,QAAQ,MAAM,UAAU,SAAS,OAAO,MAAM,GAAG;AAEjD,QAAA,QAAQ,KAAK,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,OAAO,CAAC;AAE1D,SAAO,KAAK;AAAA,IACR,CAAC,SACI;AAAA,MACG,GAAG;AAAA,MACH,YAAY,IAAI,QAAQ;AAAA,IAAA;AAAA,EAC5B;AAKZ;ACAO,MAAM,YAA+C,CAAC,EAAE,QAAQ,OAAO,aAAa;AACjF,QAAA,QAAQa,EAAW,eAAe;AAExC,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,SAAS,YAAY;AAC7C,WAAA,mBAAmB,QAAQ,QAAQ,KAAK;AAAA,EAChD,GAAA,CAAC,QAAQ,QAAQ,KAAK,CAAC;AAE1B,QAAM,WAAW;AAEjB,MAAI,WAAW;AACX,+BACK,UAAS,EAAA,SAAS,UACf,UAAAR,oBAAC,kBAAe,EACpB,CAAA;AAAA,EAER;AAEA,MAAI,UAAU,MAAM;AAChB,+BACK,UAAS,EAAA,SAAS,UACf,UAACA,oBAAA,cAAA,EAAa,MAAc,CAAA,EAChC,CAAA;AAAA,EAER;AAEA,MAAI,SAAS,MAAM;AACf,+BACK,UAAS,EAAA,SAAS,UACf,UAAAA,oBAAC,iBAAc,EACnB,CAAA;AAAA,EAER;AAGI,SAAAA,oBAAC,YAAS,SAAS,UACf,8BAAC,oBAAmB,EAAA,MAAY,OAAc,OAAgB,CAAA,EAClE,CAAA;AAER;AAQA,MAAM,qBAAiE,CAAC,EAAE,MAAM,OAAO,aAAa;AAC1F,QAAA,SAAS,CAAC,SAAe;AAC3B,YAAQ,MAAM;AAAA,MACV,KAAK;AACM,eAAA;AAAA,UACH,OAAO;AAAA,UACP,SAASA,oBAAC,gBAAe,EAAA,MAAY,OAAgB,CAAA;AAAA,QAAA;AAAA,IAEjE;AAAA,EAAA;AAGJ,QAAM,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;AAE7C,6BAAQ,MAAK,EAAA,MAAY,SAAUA,oBAAA,SAAA,EAAQ,MAAY,EAAI,CAAA;AAC/D;AAMA,MAAM,UAA2C,CAAC,EAAE,WAAW;AAEvD,SAAAK,oBAAC,OAAI,EAAA,OAAM,iBACP,UAAA;AAAA,IAAAL,oBAAC,qBAAkB,WAAU,mBAAkB,SAAS,MAAM,MAAM,UAAS,iBAAgB;AAAA,IAC5FA,oBAAA,MAAA,EAAK,WAAU,QAAO,SAAQ,sBAAqB;AAAA,EACxD,EAAA,CAAA;AAER;;;;;;;;;;;;AC/Ea,IAAA,qBAAN,cAAiC,iCAAiC;AAAA,EAAlE,cAAA;AAAA,UAAA,GAAA,SAAA;AAKH,SAAA,SAAmB;AAUnB,SAAA,QAAgB,CAAC,OAAO;AAMxB,SAAA,SAAsB;EAAC;AAAA,EAEd,SAAS;AACP,WAAAA,oBAAC,WAAU,EAAA,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAQ,CAAA;AAAA,EACnF;AACJ;AArBIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAJhB,mBAKT,WAAA,UAAA,CAAA;AAUAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAdhB,mBAeT,WAAA,SAAA,CAAA;AAMAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GApBjB,mBAqBT,WAAA,UAAA,CAAA;AArBS,qBAAND,kBAAA;AAAA,EADNE,IAAc,wBAAwB;AAAA,GAC1B,kBAAA;AClBA,MAAA,aAAa,CAAC,SAAgB;AACvC,MAAI,CAAC,MAAM;AACA,WAAA;AAAA,EACX;AAEA,QAAMkE,WAAsC,EAAE,MAAM,WAAW,OAAO,WAAW,KAAK;AAC/E,SAAA,KAAK,mBAAmB,SAASA,QAAO;AACnD;ACSO,MAAM,oBAA+D,CAAC;AAAA,EACzE;AAAA,EACA,eAAe;AACnB,MAAM;AACI,QAAA,gBAAgB/D,EAAyB,IAAI;AAC7C,QAAA,mBAAmBA,EAAyB,IAAI;AAChD,QAAA,SAASA,EAAuB,IAAI;AAC1C,QAAM,CAAC,gBAAgB,iBAAiB,IAAII,EAAoC,IAAI;AACpF,QAAM,CAAC,cAAc,eAAe,IAAIA,EAAoC,IAAI;AAEhF,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,EAAS,aAAa;AACxE,QAAM,CAAC,eAAe,gBAAgB,IAAIA,EAA2C;AAAA,IACjF,UAAU,yBAAyB,eAAe,qBAAqB,YAAY,EAAE;AAAA,IACrF,QAAQ,yBAAyB,eAAe,qBAAqB,YAAY,EAAE;AAAA,EAAA,CACtF;AAEDH,IAAU,MAAM;AACZ,UAAM,eAAe;AAAA,MACjB,YAAY;AAAA,MACZ,YAAY;AAAA,IAAA;AAGhB,QAAI,cAAc,SAAS;AACvB;AAAA,QACI,UAAU,cAAc,SAAS;AAAA,UAC7B,GAAG;AAAA,UACH,aAAa,cAAc;AAAA,QAAA,CAC9B;AAAA,MAAA;AAAA,IAET;AAEA,QAAI,iBAAiB,SAAS;AAC1B;AAAA,QACI,UAAU,iBAAiB,SAAS;AAAA,UAChC,GAAG;AAAA,UACH,aAAa,cAAc;AAAA,QAAA,CAC9B;AAAA,MAAA;AAAA,IAET;AAEA,WAAO,MAAM;AACT,uDAAgB;AAChB,mDAAc;AAAA,IAAQ;AAAA,EAC1B,GAED,CAAC,eAAe,gBAAgB,CAAC;AAEpC,QAAM,oBAAoB,MAAM;AAC5B,UAAM,gBAAgB;AAAA,MAClB,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,MACnC,EAAE,OAAO,aAAa,OAAO,WAAW;AAAA,MACxC,EAAE,OAAO,gBAAgB,OAAO,aAAa;AAAA,MAC7C,EAAE,OAAO,cAAc,OAAO,YAAY;AAAA,MAC1C,EAAE,OAAO,gBAAgB,OAAO,aAAa;AAAA,MAC7C,EAAE,OAAO,cAAc,OAAO,YAAY;AAAA,MAC1C,EAAE,OAAO,iBAAiB,OAAO,cAAc;AAAA,MAC/C,EAAE,OAAO,iBAAiB,OAAO,cAAc;AAAA,MAC/C,EAAE,OAAO,iBAAiB,OAAO,cAAc;AAAA,IAAA;AAGnD,UAAM,gBAAgB,oBAAoB,IAAI,CAAC,uBAAuB;AAC3D,aAAA,EAAE,OAAO,mBAAmB,OAAO,OAAO,yBAAyB,mBAAmB,KAAK;IAAE,CACvG;AAED,WAAO,CAAC,GAAG,eAAe,GAAG,aAAa;AAAA,EAAA;AAGxC,QAAA,iBAAiB,CAAC,UAAkB;AACtC,yBAAqB,KAAK;AAE1B,UAAM,YAAY,yBAAyB,OAAO,qBAAqB,YAAY;AAErE,iDAAA,IAAI,WAAW,UAAU;AACvB,qDAAA,IAAI,WAAW,UAAU;AAEzB,qDAAA,QAAQ,UAAU;AACpB,iDAAA,QAAQ,UAAU;AAEf,qBAAA;AAAA,MACb,UAAU,UAAU;AAAA,MACpB,QAAQ,UAAU;AAAA,IAAA,CACrB;AAEM;EAAA;AAGX,QAAM,mBAAmB,MAAM;AACvB,QAAA,cAAc,SAAS,aAAa,OAAM,iDAAgB,cAAc,GAAG,iBAAgB;AAC3F;AAAA,IACJ;AAEA,kBAAc,YAAW,iDAAgB,cAAc,2BAAU;AACjE,iDAAc,IAAI,WAAW,iDAAgB,cAAc;AAC3D,yBAAqB,QAAQ;AAEtB;EAAA;AAGX,QAAM,iBAAiB,MAAM;AACrB,QAAA,cAAc,OAAO,aAAa,OAAM,6CAAc,cAAc,GAAG,iBAAgB;AACvF;AAAA,IACJ;AAEA,kBAAc,UAAS,6CAAc,cAAc,2BAAU;AAC7D,qDAAgB,IAAI,WAAW,6CAAc,cAAc;AAC3D,yBAAqB,QAAQ;AAEtB;EAAA;AAGX,QAAM,SAAS,MAAM;;AACjB,UAAM,WAAW,WAAW,iDAAgB,cAAc,EAAE;AAC5D,UAAM,SAAS,WAAW,6CAAc,cAAc,EAAE;AAExD,UAAM,SAAS;AAAA,MACX,GAAI,aAAa,UAAa,EAAE,SAAS;AAAA,MACzC,GAAI,WAAW,UAAa,EAAE,OAAO;AAAA,IAAA;AAGzC,iBAAO,YAAP,mBAAgB;AAAA,MACZ,IAAI,YAAY,yBAAyB;AAAA,QACrC;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACb;AAAA;AAAA,EACL;AAGJ,SACKM,oBAAA,OAAA,EAAI,OAAM,QAAO,KAAK,QACnB,UAAA;AAAA,IAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAO,kBAAkB;AAAA,QACzB,UAAU;AAAA,QACV,aAAY;AAAA,QACZ,UAAU,CAAC,UAAiB;AACxB,gBAAM,eAAe;AACrB,gBAAM,SAAS,MAAM;AACrB,gBAAM,QAAQ,OAAO;AACrB,yBAAe,KAAK;AAAA,QACxB;AAAA,MAAA;AAAA,IACJ;AAAA,IACAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAM;AAAA,QACN,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACZ;AAAA,IACAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,OAAM;AAAA,QACN,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACZ;AAAA,EACJ,EAAA,CAAA;AAER;AAEA,MAAM,2BAA2B,CAAC,gBAAwB;AACtD,SAAO,GAAG,WAAW;AACzB;AAEA,MAAM,2BAA2B,CAC7B,eACA,qBACA,iBACC;AACK,QAAA,4BAAY;AAElB,QAAM,qBAAqB,oBAAoB;AAAA,IAC3C,CAAC,WAAW,yBAAyB,OAAO,KAAK,MAAM;AAAA,EAAA;AAE3D,MAAI,oBAAoB;AACpB,WAAO,EAAE,UAAU,IAAI,KAAK,mBAAmB,QAAQ,GAAG,QAAQ,IAAI,KAAK,mBAAmB,MAAM,EAAE;AAAA,EAC1G;AAEA,UAAQ,eAAe;AAAA,IACnB,KAAK,cAAc;AACT,YAAA,cAAc,IAAI,KAAK,KAAK;AAClC,kBAAY,QAAQ,MAAM,QAAQ,IAAI,EAAE;AACxC,aAAO,EAAE,UAAU,aAAa,QAAQ,MAAM;AAAA,IAClD;AAAA,IACA,KAAK,aAAa;AACR,YAAA,YAAY,IAAI,KAAK,KAAK;AAChC,gBAAU,SAAS,MAAM,SAAS,IAAI,CAAC;AACvC,aAAO,EAAE,UAAU,WAAW,QAAQ,MAAM;AAAA,IAChD;AAAA,IACA,KAAK,eAAe;AACV,YAAA,eAAe,IAAI,KAAK,KAAK;AACnC,mBAAa,SAAS,MAAM,SAAS,IAAI,CAAC;AAC1C,aAAO,EAAE,UAAU,cAAc,QAAQ,MAAM;AAAA,IACnD;AAAA,IACA,KAAK,eAAe;AACV,YAAA,iBAAiB,IAAI,KAAK,KAAK;AACrC,qBAAe,SAAS,MAAM,SAAS,IAAI,CAAC;AAC5C,aAAO,EAAE,UAAU,gBAAgB,QAAQ,MAAM;AAAA,IACrD;AAAA,IACA,KAAK,eAAe;AACV,YAAA,eAAe,IAAI,KAAK,KAAK;AACnC,mBAAa,SAAS,MAAM,SAAS,IAAI,CAAC;AAC1C,aAAO,EAAE,UAAU,cAAc,QAAQ,MAAM;AAAA,IACnD;AAAA,IACA,KAAK,YAAY;AACb,aAAO,EAAE,UAAU,IAAI,KAAK,YAAY,GAAG,QAAQ;IACvD;AAAA,IACA;AACI,aAAO,EAAE,UAAU,OAAO,QAAQ,MAAM;AAAA,EAChD;AACJ;;;;;;;;;;;;AC1Na,IAAA,6BAAN,cAAyC,iBAAiB;AAAA,EAA1D,cAAA;AAAA,UAAA,GAAA,SAAA;AAEH,SAAA,sBAA4C;AAGT,SAAA,eAAA;AAAA,EAAA;AAAA,EAE1B,SAAS;AACd,+BAAQ,mBAAkB,EAAA,qBAAqB,KAAK,qBAAqB,cAAc,KAAK,aAAc,CAAA;AAAA,EAC9G;AACJ;AARIP,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GADhB,2BAET,WAAA,uBAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,QAAQ;AAAA,GAJjB,2BAKT,WAAA,gBAAA,CAAA;AALS,6BAAND,kBAAA;AAAA,EADNE,IAAc,wBAAwB;AAAA,GAC1B,0BAAA;ACPS,eAAA,wBAAwB,QAAkB,OAAe,QAAsB;AACjG,QAAM,uCAAuC,MAAM,OAAO,SAAS,CAAC,EAC/D,KAAK,CAAC,EACN,IAAI,CAACS,IAAGtB,OAAMA,KAAI,CAAC,EACnB,IAAI,CAACA,OAAM,OAAO,MAAMA,EAAC,EAAE,OAAO,CAAC,KAAK,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAE,CAAA,CAAC;AAEvF,QAAM,0BAA0B,IAAI,wBAAuD,IAAI,MAAM;AAErG,QAAM,QAAQ,MAAM,wBAAwB,SAAS,OAAO,MAAM,GAAG;AAC/D,QAAA,iBAAiB,KAClB,IAAI,CAAC,UAAU,OAAO,OAAO,CAAC,KAAK,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,MAAM,EAAE,CAAC,EACrF,OAAoB,CAAC,qBAAqB,UAAU;AACjD,wBAAoB,IAAI,KAAK,UAAU,KAAK,CAAC;AACR,yCAAA,QAAQ,CAAC,oBAAoB;AAC1C,0BAAA,IAAI,KAAK,UAAU,EAAE,GAAG,OAAO,GAAG,gBAAiB,CAAA,CAAC;AAAA,IAAA,CAC3E;AACM,WAAA;AAAA,EAAA,GACJ,oBAAA,IAAA,CAAK;AAEhB,SAAO,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,EAAE,KAAK,uBAAuB,MAAM,CAAC;AAClG;AAEA,SAAS,uBAAuB,QAAkB;AACvC,SAAA,CAACE,IAAkCiB,OAAqC;AAC3E,eAAW,SAAS,QAAQ;AAClB,YAAA,SAASjB,GAAE,KAAK;AAChB,YAAA,SAASiB,GAAE,KAAK;AACtB,UAAI,WAAW,QAAQ;AACnB;AAAA,MACJ;AACA,UAAI,WAAW,MAAM;AACV,eAAA;AAAA,MACX;AACA,UAAI,WAAW,MAAM;AACV,eAAA;AAAA,MACX;AACO,aAAA,SAAS,SAAS,KAAK;AAAA,IAClC;AACO,WAAA;AAAA,EAAA;AAEf;AC/BO,MAAM,iBAAiB,CAAC,EAAE,OAAO,cAAc,aAAkC;AAC9E,QAAA,QAAQO,EAAW,eAAe;AAExC,QAAM,CAAC,OAAO,QAAQ,IAAIN,EAAS,gBAAgB,EAAE;AACrD,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,EAAS,KAAK;AAEtD,QAAA,UAAUJ,EAAwB,IAAI;AAE5C,QAAM,EAAE,MAAM,OAAO,UAAA,IAAc,SAAS,MAAM,wBAAwB,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AAErG,MAAA;AAEI,WAAAO,oBAAC,QAAK,EAAA,OAAM,QACR,UAAA;AAAA,MAAAL,oBAAC,WAAM,MAAK,QAAO,OAAM,6BAA4B,OAAc,UAAQ,MAAC;AAAA,MAC5EA,oBAAC,YAAO,OAAM,YAAW,UAAQ,MAAC,MAAK,UAAS,UAEhD,aAAA,CAAA;AAAA,IACJ,EAAA,CAAA;AAGR,MAAI,OAAO;AACP,+BACK,KAAE,EAAA,UAAA;AAAA,MAAA;AAAA,MACS,MAAM;AAAA,MAAK;AAAA,MAAE,MAAM;AAAA,MAAQ;AAAA,MAAE,MAAM;AAAA,IAC/C,EAAA,CAAA;AAAA,EAER;AAEM,QAAA,UAAU,CAAC,UAAsB;AAC/B,QAAA,MAAM,kBAAkB,kBAAkB;AACpC,YAAA,aAAa,MAAM,OAAO;AAChC,eAAS,UAAU;AACnB,UAAI,iBAAiB;AACX,cAAA,cAAc,cAAc,YAAY,MAAM;AAChD,YAAA,iBAAiB,MAAM,WAAW,GAAG;AACrC,6BAAmB,KAAK;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ;AAAA,EAAA;AAGE,QAAA,SAAS,CAAC,UAAuB;;AACnC,UAAM,eAAe;AACf,UAAA,cAAc,cAAc,OAAO,MAAM;AAE3C,QAAA,iBAAiB,MAAM,WAAW,GAAG;AACrC,yBAAmB,KAAK;AAExB,oBAAQ,YAAR,mBAAiB;AAAA,QACb,IAAI,YAAY,uBAAuB;AAAA,UACnC,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,QAAA,CACb;AAAA;AAAA,IACL,OACG;AACH,yBAAmB,IAAI;AAAA,IAC3B;AAAA,EAAA;AAGJ,6BACK,QAAK,EAAA,OAAM,QAAO,UAAU,QAAQ,KAAK,SACtC,UAAA;AAAA,IAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,OAAO,6BAA6B,kBAAkB,0BAA0B,EAAE;AAAA,QAClF;AAAA,QACA;AAAA,QACA,MAAK;AAAA,MAAA;AAAA,IACT;AAAA,wBACC,YAAS,EAAA,IAAG,aACR,UAAM,6BAAA,IAAI,CAACe,OAAM;AACd,YAAM+C,SAAQ,OACT,IAAI,CAAC,UAAU/C,GAAE,KAAK,CAAC,EACvB,OAAO,CAAC+C,WAAUA,WAAU,IAAI,EAChC,KAAK,KAAK;AACf,aAAQ9D,oBAAA,UAAA,EAAmB,OAAO8D,OAAAA,GAAdA,MAAqB;AAAA,IAC5C,IACL;AAAA,wBACC,UAAO,EAAA,OAAM,wBAAuB,MAAK,UAAS,UAEnD,UAAA;AAAA,EACJ,EAAA,CAAA;AAER;AAEA,MAAM,gBAAgB,CAAC,UAAkB,WAAqB;AACpD,QAAA,cAAc,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,KAAA,CAAM;AACjE,SAAO,YAAY,OAAO,CAAC,KAAK,YAAYhF,QAAO,EAAE,GAAG,KAAK,CAAC,OAAOA,EAAC,CAAC,GAAG,WAAW,IAAI,CAAE,CAAA;AAC/F;AAEA,MAAM,mBAAmB,CAAC,MAAuC,gBAAwC;AACrG,MAAI,SAAS,MAAM;AACR,WAAA;AAAA,EACX;AAEA,QAAM,kBAAkB,OAAO,QAAQ,WAAW,EAC7C,OAAO,CAAC,CAAA,EAAG,KAAK,MAAM,UAAU,MAAS,EACzC,OAAO,CAAC,cAAc,CAAC,KAAK,KAAK,MAAM,aAAa,OAAO,CAAC,OAAO,GAAG,GAAG,MAAM,KAAK,GAAG,IAAI;AAEhG,SAAO,gBAAgB,SAAS;AACpC;;;;;;;;;;;;AC1Ea,IAAA,0BAAN,cAAsC,iBAAiB;AAAA,EAAvD,cAAA;AAAA,UAAA,GAAA,SAAA;AAMK,SAAA,QAAA;AASR,SAAA,SAAmB;EAAC;AAAA,EAEX,SAAS;AACd,+BAAQ,gBAAe,EAAA,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAQ,CAAA;AAAA,EACnE;AACJ;AAdIW,kBAAA;AAAA,EADCC,GAAS;AAAA,GALD,wBAMT,WAAA,SAAA,CAAA;AASAD,kBAAA;AAAA,EADCC,GAAS,EAAE,MAAM,OAAO;AAAA,GAdhB,wBAeT,WAAA,UAAA,CAAA;AAfS,0BAAND,kBAAA;AAAA,EADNE,IAAc,oBAAoB;AAAA,GACtB,uBAAA;ACnCS,eAAA,sBAAsB,OAAe,OAAe,QAAsB;AAC5F,QAAM,0BAA0B,IAAI,wBAAgD,CAAI,GAAA,CAAC,KAAK,CAAC;AAE/F,QAAM,QAAQ,MAAM,wBAAwB,SAAS,OAAO,MAAM,GAAG;AAErE,SAAO,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACzC;ACOO,MAAM,YAA+C,CAAC,EAAE,YAAY,sBAAsB;AACvF,QAAA,QAAQa,EAAW,eAAe;AAElC,QAAA,WAAWV,EAAyB,IAAI;AAE9C,QAAM,EAAE,MAAM,OAAO,UAAA,IAAc,SAAS,MAAM,sBAAsB,OAAO,UAAU,GAAG,CAAC,YAAY,KAAK,CAAC;AAE/G,MAAI,WAAW;AACX,+BAAQ,gBAAe,CAAA,CAAA;AAAA,EAC3B;AAEA,MAAI,UAAU,MAAM;AACT,WAAAE,oBAAC,gBAAa,MAAc,CAAA;AAAA,EACvC;AAEA,MAAI,SAAS,MAAM;AACf,+BAAQ,eAAc,CAAA,CAAA;AAAA,EAC1B;AAEA,QAAM,UAAU,MAAM;;AACZ,UAAA,SAAQ,cAAS,YAAT,mBAAkB;AAE5B,QAAA,aAAa,KAAK,GAAG;AACrB,qBAAS,YAAT,mBAAkB;AAAA,QACd,IAAI,YAAY,yBAAyB;AAAA,UACrC,QAAQ,EAAE,CAAC,UAAU,GAAG,MAAM;AAAA,UAC9B,SAAS;AAAA,UACT,UAAU;AAAA,QAAA,CACb;AAAA;AAAA,IAET;AAAA,EAAA;AAGE,QAAA,eAAe,CAAC,UAA8B;AAChD,QAAI,UAAU,QAAW;AACd,aAAA;AAAA,IACX;AACO,WAAA,KAAK,SAAS,KAAK;AAAA,EAAA;AAG9B,SAEQK,oBAAA,UAAA,EAAA,UAAA;AAAA,IAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,OAAM;AAAA,QACN,aAAa,oBAAoB,SAAY,kBAAkB;AAAA,QAC/D;AAAA,QACA,KAAK;AAAA,QACL,MAAM;AAAA,MAAA;AAAA,IACV;AAAA,IACCA,oBAAA,YAAA,EAAS,IAAI,YACT,eAAK,IAAI,CAAC,SACPA,oBAAC,UAAO,EAAA,OAAO,KAAW,GAAA,IAAM,CACnC,GACL;AAAA,EACJ,EAAA,CAAA;AAER;;;;;;;;;;;;AC/Da,IAAA,qBAAN,cAAiC,iBAAiB;AAAA,EAAlD,cAAA;AAAA,UAAA,GAAA,SAAA;AAEU,SAAA,aAAA;AAGK,SAAA,kBAAA;AAAA,EAAA;AAAA,EAET,SAAS;AACd,+BAAQ,WAAU,EAAA,YAAY,KAAK,YAAY,iBAAiB,KAAK,gBAAiB,CAAA;AAAA,EAC1F;AACJ;AARIP,kBAAA;AAAA,EADCC,GAAS;AAAA,GADD,mBAET,WAAA,cAAA,CAAA;AAGAD,kBAAA;AAAA,EADCC,GAAS;AAAA,GAJD,mBAKT,WAAA,mBAAA,CAAA;AALS,qBAAND,kBAAA;AAAA,EADNE,IAAc,eAAe;AAAA,GACjB,kBAAA;ACNA,MAAA,0BAA0B,CACnC,iBACA,oBAC2B;AAC3B,MAAI,oBAAoB,QAAW;AAC/B,WAAO,gBAAgB,oBAAoB,WAAW,IAAI,eAAe;AAAA,EAC7E;AAEI,MAAA,gBAAgB,oBAAoB,KAAK,CAAC,aAAa,SAAS,SAAS,eAAe,GAAG;AACpF,WAAA;AAAA,EACX;AAEI,MAAA,gBAAgB,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,eAAe,GAAG;AAC9D,WAAA;AAAA,EACX;AACO,SAAA;AACX;ACVa,MAAA,2BAA2B,CACpC,OACA,oBAC8B;AACxB,QAAA,oBAAoB,UAAU,MAAM,KAAK;AAC/C,MAAI,sBAAsB,MAAM;AAC5B,UAAM,eAAe,wBAAwB,kBAAkB,SAAS,eAAe;AACvF,YAAQ,cAAc;AAAA,MAClB,KAAK;AACD,eAAO,EAAE,MAAM,wBAAwB,OAAO,kBAAkB;AAAA,MACpE,KAAK;AACD,eAAO,EAAE,MAAM,uBAAuB,OAAO,kBAAkB;AAAA,MACnE,KAAK;AACM,eAAA;AAAA,IACf;AAAA,EACJ;AAEM,QAAA,mBAAmB,SAAS,MAAM,KAAK;AAC7C,MAAI,qBAAqB,MAAM;AAC3B,UAAM,eAAe,wBAAwB,iBAAiB,SAAS,eAAe;AACtF,YAAQ,cAAc;AAAA,MAClB,KAAK;AACD,eAAO,EAAE,MAAM,uBAAuB,OAAO,iBAAiB;AAAA,MAClE,KAAK;AACD,eAAO,EAAE,MAAM,sBAAsB,OAAO,iBAAiB;AAAA,MACjE,KAAK;AACM,eAAA;AAAA,IACf;AAAA,EACJ;AAEM,QAAA,uBAAuB,aAAa,MAAM,KAAK;AACrD,MAAI,yBAAyB,MAAM;AAC/B,UAAM,eAAe,wBAAwB,qBAAqB,SAAS,eAAe;AAC1F,YAAQ,cAAc;AAAA,MAClB,KAAK;AACD,eAAO,EAAE,MAAM,uBAAuB,OAAO,qBAAqB;AAAA,MACtE,KAAK;AACD,eAAO,EAAE,MAAM,sBAAsB,OAAO,qBAAqB;AAAA,MACrE,KAAK;AACM,eAAA;AAAA,IACf;AAAA,EACJ;AAEO,SAAA;AACX;ACnDO,MAAM,aAAgC,MAAM;AAE3C,SAAAK;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,MAAK;AAAA,MACL,gBAAa;AAAA,MACb,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,QAAO;AAAA,MACP,OAAM;AAAA,MAEN,UAAAA,oBAAC,QAAK,EAAA,GAAE,kMAAkM,CAAA;AAAA,IAAA;AAAA,EAAA;AAGtN;ACMO,MAAM,iBAAyD,MAAM;AAClE,QAAA,kBAAkBQ,EAAW,sBAAsB;AACzD,QAAM,CAAC,iBAAiB,kBAAkB,IAAIN,EAA0B;AAAA,IACpE,qBAAqB,CAAC;AAAA,IACtB,oBAAoB,CAAC;AAAA,IACrB,sBAAsB,CAAC;AAAA,IACvB,qBAAqB,CAAC;AAAA,EAAA,CACzB;AACD,QAAM,CAAC,YAAY,aAAa,IAAIA,EAAS,EAAE;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAIA,EAAS,KAAK;AACtC,QAAA,UAAUJ,EAAwB,IAAI;AAEtC,QAAA,eAAe,CAAC,UAAiB;AACnC,UAAM,eAAe;AAEf,UAAA,iBAAiB,yBAAyB,YAAY,eAAe;AAE3E,QAAI,mBAAmB,MAAM;AACzB,iBAAW,IAAI;AACf;AAAA,IACJ;AAEA,UAAM,oBAAoB;AAAA,MACtB,GAAG;AAAA,MACH,CAAC,eAAe,IAAI,GAAG,CAAC,GAAG,gBAAgB,eAAe,IAAI,GAAG,eAAe,KAAK;AAAA,IAAA;AAGzF,uBAAmB,iBAAiB;AACpC,oBAAgB,iBAAiB;AACjC,kBAAc,EAAE;AAAA,EAAA;AAGd,QAAA,kBAAkB,CAACiE,qBAAqC;;AACpD,UAAA,SAAS,2BAA2BA,gBAAe;AAEzD,kBAAQ,YAAR,mBAAiB;AAAA,MACb,IAAI,YAA2C,8BAA8B;AAAA,QACzE;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACb;AAAA;AAAA,EACL;AAGJ,QAAM,eAAe,MAAM;;AACjB,UAAA,SAAS,2BAA2B,eAAe;AAEzD,kBAAQ,YAAR,mBAAiB;AAAA,MACb,IAAI,YAA2C,8BAA8B;AAAA,QACzE;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACb;AAAA;AAAA,EACL;AAGE,QAAA,oBAAoB,CAAC,UAAiB;AACzB,kBAAA,MAAM,OAA4B,KAAK;AACtD,eAAW,KAAK;AAAA,EAAA;AAIhB,SAAA1D,oBAAC,OAAI,EAAA,OAAO,kDACR,UAAA;AAAA,IAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IACJ;AAAA,IAECA,oBAAA,QAAA,EAAK,WAAU,eAAc,UAAU,cAAc,KAAK,SACvD,UAAAK,oBAAC,WAAM,WAAW,iCAAiC,UAAU,gBAAgB,gBAAgB,IACzF,UAAA;AAAA,MAAAL;AAAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,MAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,aAAa;AAAA,UACb,QAAQ;AAAA,QAAA;AAAA,MACZ;AAAA,MACCA,oBAAA,UAAA,EAAO,WAAU,cAAa,UAAC,KAAA;AAAA,IAAA,EAAA,CACpC,EACJ,CAAA;AAAA,EACJ,EAAA,CAAA;AAER;AAEA,MAAM,0BAID,CAAC,EAAE,iBAAiB,oBAAoB,sBAAsB;AACzD,QAAA,oBAAoB,CACtB,UACA,QACC;AACD,UAAM,oBAAoB;AAAA,MACtB,GAAG;AAAA,MACH,CAAC,GAAG,GAAG,gBAAgB,GAAG,EAAE,OAAO,CAAClB,OAAM,CAAC,SAAS,OAAOA,EAAC,CAAC;AAAA,IAAA;AAGjE,uBAAmB,iBAAiB;AAEpC,oBAAgB,iBAAiB;AAAA,EAAA;AAIjC,SAAAuB,oBAAC,MAAG,EAAA,OAAM,kBACL,UAAA;AAAA,IAAA,gBAAgB,oBAAoB,IAAI,CAAC,iCACrC,MACG,EAAA,UAAAL;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,UAAU,CAACgE,cACP,kBAAkBA,WAAU,qBAAqB;AAAA,MAAA;AAAA,IAAA,KAJpD,SAAS,SAAS,CAO3B,CACH;AAAA,IACA,gBAAgB,mBAAmB,IAAI,CAAC,iCACpC,MACG,EAAA,UAAAhE;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,UAAU,CAACgE,cACP,kBAAkBA,WAAU,oBAAoB;AAAA,MAAA;AAAA,IAAA,KAJnD,SAAS,SAAS,CAO3B,CACH;AAAA,IACA,gBAAgB,qBAAqB,IAAI,CAAC,kCACtC,MACG,EAAA,UAAAhE;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,UAAU,CAACiE,eAAc,kBAAkBA,YAAW,sBAAsB;AAAA,MAAA;AAAA,IAAA,KAH3E,UAAU,SAAS,CAK5B,CACH;AAAA,IACA,gBAAgB,oBAAoB,IAAI,CAAC,kCACrC,MACG,EAAA,UAAAjE;AAAAA,MAAC;AAAA,MAAA;AAAA,QACG;AAAA,QACA,UAAU,CAACiE,eAAyB,kBAAkBA,YAAW,qBAAqB;AAAA,MAAA;AAAA,IAAA,KAHrF,UAAU,SAAS,CAK5B,CACH;AAAA,EACL,EAAA,CAAA;AAER;AAEA,MAAM,6BAGD,CAAC,EAAE,WAAW,eAAe;AACxB,QAAA,kBAAkB,0BAA0B,QAAQ,GAAG;AACvD,QAAA,YAAY,0BAA0B,QAAQ,CAAC;AAEjD,SAAAjE;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAEA,MAAM,4BAGD,CAAC,EAAE,UAAU,eAAe;AACvB,QAAA,kBAAkB,0BAA0B,QAAQ,GAAG;AACvD,QAAA,YAAY,0BAA0B,QAAQ,CAAC;AAEjD,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAEA,MAAM,6BAGD,CAAC,EAAE,UAAU,eAAe;AACvB,QAAA,kBAAkB,0BAA0B,UAAU,GAAG;AACzD,QAAA,YAAY,0BAA0B,UAAU,CAAC;AAEnD,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAEA,MAAM,8BAGD,CAAC,EAAE,WAAW,eAAe;AACxB,QAAA,kBAAkB,0BAA0B,SAAS,GAAG;AACxD,QAAA,YAAY,0BAA0B,SAAS,CAAC;AAGlD,SAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAAA;AAGZ;AASA,MAAM,iBAAiB,CAAgC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,MAAyC;AAEjC,SAAAK;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG,OAAM;AAAA,MACN,OAAO,EAAE,iBAAiB,OAAO,UAAU;AAAA,MAE3C,UAAA;AAAA,QAACL,oBAAA,OAAA,EAAK,UAAS,SAAA,SAAW,EAAA,CAAA;AAAA,QAC1BA,oBAAC,YAAO,SAAS,MAAM,SAAS,QAAQ,GACpC,UAACA,oBAAA,YAAA,CAAA,CAAW,EAChB,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGZ;AAEA,SAAS,2BAA2B,iBAAkC;AAC3D,SAAA;AAAA,IACH,oBAAoB,gBAAgB,mBAAmB,IAAI,CAAC,aAAa,SAAS,UAAU;AAAA,IAC5F,qBAAqB,gBAAgB,oBAAoB,IAAI,CAAC,aAAa,SAAS,UAAU;AAAA,IAC9F,qBAAqB,gBAAgB,oBAAoB,IAAI,CAAC,cAAc,UAAU,UAAU;AAAA,IAChG,sBAAsB,gBAAgB,qBAAqB,IAAI,CAAC,cAAc,UAAU,UAAU;AAAA,EAAA;AAE1G;;;;;;;;;;;;AChQa,IAAA,0BAAN,cAAsC,iBAAiB;AAAA,EACjD,SAAS;AACd,+BAAQ,gBAAe,CAAA,CAAA;AAAA,EAC3B;AACJ;AAJa,0BAAN,gBAAA;AAAA,EADNL,IAAc,oBAAoB;AAAA,GACtB,uBAAA;","x_google_ignoreList":[0,1,2,3,10,11,64,65,66,67,68,69]}
|