diff --git a/app/apis/catalog/brc-analytics-catalog/common/entities.ts b/app/apis/catalog/brc-analytics-catalog/common/entities.ts index 872956118..4fd8b9c80 100644 --- a/app/apis/catalog/brc-analytics-catalog/common/entities.ts +++ b/app/apis/catalog/brc-analytics-catalog/common/entities.ts @@ -22,6 +22,7 @@ export interface BRCDataCatalogGenome { gcPercent: number | null; geneModelUrl: string | null; isRef: string; + jbrowseConfigUrl: string | null; length: number; level: string; lineageTaxonomyIds: string[]; diff --git a/app/apis/catalog/ga2/entities.ts b/app/apis/catalog/ga2/entities.ts index f39455da0..6ab7d31e4 100644 --- a/app/apis/catalog/ga2/entities.ts +++ b/app/apis/catalog/ga2/entities.ts @@ -10,6 +10,7 @@ export interface GA2AssemblyEntity { gcPercent: number | null; geneModelUrl: string | null; isRef: "No" | "Yes"; + jbrowseConfigUrl: string | null; length: number; level: string; lineageTaxonomyIds: string[]; diff --git a/app/components/Entity/components/JBrowse/jbrowse.tsx b/app/components/Entity/components/JBrowse/jbrowse.tsx new file mode 100644 index 000000000..267aa2548 --- /dev/null +++ b/app/components/Entity/components/JBrowse/jbrowse.tsx @@ -0,0 +1,88 @@ +import React, { useEffect, useState, useMemo } from "react"; +import { Alert, Skeleton, Stack, ThemeProvider } from "@mui/material"; +import { + createViewState, + JBrowseLinearGenomeView, +} from "@jbrowse/react-linear-genome-view2"; +import { createJBrowseTheme } from "@jbrowse/core/ui/theme"; +import { + convertToLinearGenomeViewConfig, + getConfigErrorMessage, + isValidConfigUrl, + loadJBrowseConfig, +} from "./utils"; +import { JBrowseProps } from "./types"; +import { mergeAppTheme } from "app/theme/theme"; + +/** + * JBrowse genome browser component with isolated theme. + * Uses JBrowse's own theme wrapped in a ThemeProvider to ensure all + * required MUI palette colors are present for JBrowse components. + * + * @param props - Component props + * @param props.accession - Assembly accession ID + * @param props.configUrl - URL to JBrowse configuration JSON + * @returns Rendered JBrowse Linear Genome View component + */ +export const JBrowse = ({ + accession, + configUrl, +}: JBrowseProps): JSX.Element => { + const [viewState, setViewState] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Create and memoize JBrowse theme to override parent theme + const jbrowseTheme = useMemo(() => createJBrowseTheme(), []); + + useEffect(() => { + async function initializeJBrowse(): Promise { + setLoading(true); + setError(null); + try { + if (!isValidConfigUrl(configUrl)) { + throw new Error("Invalid JBrowse configuration URL"); + } + + const rawConfig = await loadJBrowseConfig(configUrl); + const config = convertToLinearGenomeViewConfig(rawConfig); + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- JBrowse config type is complex and external + const state = createViewState(config as any); + setViewState(state); + } catch (err) { + const message = getConfigErrorMessage( + accession, + err instanceof Error ? err : undefined + ); + setError(message); + console.error(message, err); + } finally { + setLoading(false); + } + } + + initializeJBrowse(); + }, [accession, configUrl]); + + if (loading) { + return ( + + + + + ); + } + + if (error || !viewState) { + return {error || "Failed to initialize"}; + } + + return ( + mergeAppTheme(outerTheme, jbrowseTheme)} + > + {/* eslint-disable-next-line @typescript-eslint/no-explicit-any -- JBrowse viewState type is complex and external */} + + + ); +}; diff --git a/app/components/Entity/components/JBrowse/types.ts b/app/components/Entity/components/JBrowse/types.ts new file mode 100644 index 000000000..a38db815f --- /dev/null +++ b/app/components/Entity/components/JBrowse/types.ts @@ -0,0 +1,82 @@ +/** + * JBrowse component types. + */ + +/** + * Props for the JBrowse component. + */ +export interface JBrowseProps { + /** + * Assembly accession identifier (e.g., GCA_000002825.3). + */ + accession: string; + /** + * URL or path to the JBrowse 2 configuration file. + * Can be a local path (e.g., /jbrowse-config/GCA_000002825.3/config.json) + * or a remote URL (e.g., https://example.com/jbrowse/config.json). + */ + configUrl: string; +} + +/** + * JBrowse view state interface. + */ +export interface JBrowseViewState { + /** + * URL to the assembly FASTA file. + */ + assembly: { + /** + * Assembly name. + */ + name: string; + /** + * Path to sequence adapter configuration. + */ + sequence: { + adapter: { + faiLocation: { + uri: string; + }; + fastaLocation: { + uri: string; + }; + type: string; + }; + type: string; + }; + }; + /** + * Default session configuration. + */ + defaultSession?: { + name: string; + view: { + id: string; + tracks: Array<{ + configuration: string; + displays: Array<{ + configuration: string; + type: string; + }>; + type: string; + }>; + type: string; + }; + }; + /** + * Tracks configuration. + */ + tracks: Array<{ + adapter: { + gffLocation?: { + uri: string; + }; + type: string; + }; + assemblyNames: string[]; + name: string; + trackId: string; + type: string; + }>; +} diff --git a/app/components/Entity/components/JBrowse/utils.ts b/app/components/Entity/components/JBrowse/utils.ts new file mode 100644 index 000000000..77626505a --- /dev/null +++ b/app/components/Entity/components/JBrowse/utils.ts @@ -0,0 +1,124 @@ +/** + * Utility functions for JBrowse component. + */ + +/** + * Check if a URL is a remote URL (http/https) or local path. + * @param url - URL or path to check. + * @returns True if the URL is remote (starts with http:// or https://), false otherwise. + */ +export function isRemoteUrl(url: string): boolean { + return url.startsWith("http://") || url.startsWith("https://"); +} + +/** + * Validate that a JBrowse config URL is properly formed. + * @param url - URL or path to validate. + * @returns True if URL is valid, false otherwise. + */ +export function isValidConfigUrl(url: string): boolean { + if (!url || typeof url !== "string") { + return false; + } + + // Check if it's a remote URL + if (isRemoteUrl(url)) { + try { + new URL(url); + return true; + } catch { + return false; + } + } + + // Check if it's a local path (should start with /) + return url.startsWith("/"); +} + +/** + * Load JBrowse configuration from a URL or local path. + * @param configUrl - URL or path to the JBrowse config file. + * @returns Promise resolving to the configuration object. + */ +export async function loadJBrowseConfig( + configUrl: string +): Promise> { + try { + const response = await fetch(configUrl); + + if (!response.ok) { + throw new Error( + `Failed to load JBrowse config: ${response.status} ${response.statusText}` + ); + } + + const config = await response.json(); + return config; + } catch (error) { + console.error("Error loading JBrowse config:", error); + throw error; + } +} + +/** + * Generate a default error message for missing or invalid config. + * @param accession - Assembly accession. + * @param error - Optional error object. + * @returns Error message string. + */ +export function getConfigErrorMessage( + accession: string, + error?: Error +): string { + if (error) { + return `Failed to load JBrowse configuration for assembly ${accession}: ${error.message}`; + } + return `JBrowse configuration not available for assembly ${accession}`; +} + +/** + * Convert full JBrowse config to React Linear Genome View format. + * Handles both formats: full JBrowse config and React LGV config. + * @param config - JBrowse configuration object. + * @returns Configuration in React Linear Genome View format. + */ +export function convertToLinearGenomeViewConfig( + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Config structure varies + config: any +): Record { + // If it's already in React LGV format (has singular 'assembly'), return as-is + if (config.assembly && config.defaultSession?.view) { + return config; + } + + // If it's a full JBrowse config (has plural 'assemblies'), convert it + if (config.assemblies && Array.isArray(config.assemblies)) { + const firstAssembly = config.assemblies[0]; + const firstView = config.defaultSession?.views?.[0]; + + if (!firstAssembly) { + throw new Error("Config has no assemblies"); + } + + return { + assembly: firstAssembly, + configuration: config.configuration, + defaultSession: { + name: config.defaultSession?.name || "Default Session", + view: firstView + ? { + id: "linearGenomeView", + type: "LinearGenomeView", + ...firstView.init, + } + : { + id: "linearGenomeView", + type: "LinearGenomeView", + }, + }, + tracks: config.tracks || [], + }; + } + + throw new Error("Invalid JBrowse configuration format"); +} diff --git a/app/components/Layout/components/Main/main.styles.ts b/app/components/Layout/components/Main/main.styles.ts index 0572acf78..b4b29cfa5 100644 --- a/app/components/Layout/components/Main/main.styles.ts +++ b/app/components/Layout/components/Main/main.styles.ts @@ -10,3 +10,15 @@ export const StyledPagesMain = styled(DXMain)` background-color: ${PALETTE.COMMON_WHITE}; flex-direction: column; `; + +/** + * Full-width main container for browser pages. + * Removes max-width constraints and padding to allow full viewport usage. + */ +export const StyledBrowserMain = styled(DXMain)` + background-color: ${PALETTE.COMMON_WHITE}; + flex-direction: column; + max-width: 100% !important; + padding: 0 !important; + width: 100% !important; +`; diff --git a/app/views/BrowserView/browserView.tsx b/app/views/BrowserView/browserView.tsx new file mode 100644 index 000000000..399587284 --- /dev/null +++ b/app/views/BrowserView/browserView.tsx @@ -0,0 +1,70 @@ +import { Fragment } from "react"; +import { Alert, Box, Stack, Typography } from "@mui/material"; +import { BRCDataCatalogGenome } from "../../apis/catalog/brc-analytics-catalog/common/entities"; +import dynamic from "next/dynamic"; +import { GA2AssemblyEntity } from "app/apis/catalog/ga2/entities"; + +// Load JBrowse only on client-side to avoid SSR issues +const JBrowse = dynamic( + () => + import("../../components/Entity/components/JBrowse/jbrowse").then( + (mod) => mod.JBrowse + ), + { ssr: false } +); + +/** + * Props interface for the BrowserView component + * @interface BrowserViewProps + * @property {BRCDataCatalogGenome | GA2AssemblyEntity} assembly - The assembly object containing genome or assembly information + */ +export interface BrowserViewProps { + assembly: BRCDataCatalogGenome | GA2AssemblyEntity; +} + +/** + * Browser view component for displaying JBrowse genome browser. + * @param props - Browser view props. + * @param props.assembly - Assembly entity with genome data. + * @returns Browser view JSX. + */ +export const BrowserView = ({ assembly }: BrowserViewProps): JSX.Element => { + // Check if assembly has JBrowse config + if (!assembly.jbrowseConfigUrl) { + return ( + + + Genome browser is not available for this assembly. + + + ); + } + + return ( + + + {/* JBrowse browser */} + + + {/* Additional assembly info */} + {assembly.ucscBrowserUrl && ( + + + Alternative browsers:{" "} + + UCSC Genome Browser + + + + )} + + + ); +}; diff --git a/catalog/build/ts/build-assemblies.ts b/catalog/build/ts/build-assemblies.ts index a424010d4..b0e787f6b 100644 --- a/catalog/build/ts/build-assemblies.ts +++ b/catalog/build/ts/build-assemblies.ts @@ -58,6 +58,7 @@ export async function buildAssemblies( gcPercent: parseNumberOrNull(row.gcPercent), geneModelUrl: parseStringOrNull(row.geneModelUrl), isRef: parseBoolean(row.isRef), + jbrowseConfigUrl: `/jbrowse-config/${row.accession}_config.json`, length: parseNumber(row.length), level: row.level, lineageTaxonomyIds, diff --git a/catalog/ga2/build/ts/build-catalog.ts b/catalog/ga2/build/ts/build-catalog.ts index e1503707e..d3f65eb52 100644 --- a/catalog/ga2/build/ts/build-catalog.ts +++ b/catalog/ga2/build/ts/build-catalog.ts @@ -108,6 +108,7 @@ async function buildAssemblies( gcPercent: parseNumberOrNull(row.gcPercent), geneModelUrl: parseStringOrNull(row.geneModelUrl), isRef: parseBoolean(row.isRef), + jbrowseConfigUrl: null, length: parseNumber(row.length), level: row.level, lineageTaxonomyIds: parseList(row.lineageTaxonomyIds), diff --git a/catalog/ga2/output/assemblies.json b/catalog/ga2/output/assemblies.json index d130b5082..cfe239da3 100644 --- a/catalog/ga2/output/assemblies.json +++ b/catalog/ga2/output/assemblies.json @@ -9,6 +9,7 @@ "isRef": "No", "length": 28206905576, "level": "Chromosome", + "jbrowseConfigUrl": "/jbrowse-config/test_config.json", "lineageTaxonomyIds": [ "1", "131567", diff --git a/catalog/py_package/catalog_build/generated_schema/schema.py b/catalog/py_package/catalog_build/generated_schema/schema.py index 0237797f3..edc816ba4 100644 --- a/catalog/py_package/catalog_build/generated_schema/schema.py +++ b/catalog/py_package/catalog_build/generated_schema/schema.py @@ -305,6 +305,13 @@ class Assembly(ConfiguredBaseModel): "linkml_meta": {"alias": "accession", "domain_of": ["Assembly"]} }, ) + jbrowse_config_url: Optional[str] = Field( + default=None, + description="""URL or path to the JBrowse 2 configuration file for this assembly. Can be a local path (e.g., /jbrowse-config/GCA_000001405.28/config.json) or a remote URL (e.g., https://example.com/jbrowse/config.json). Optional field used to enable genome browser functionality.""", + json_schema_extra={ + "linkml_meta": {"alias": "jbrowse_config_url", "domain_of": ["Assembly"]} + }, + ) class Organisms(ConfiguredBaseModel): diff --git a/catalog/py_package/catalog_build/schema/assemblies.yaml b/catalog/py_package/catalog_build/schema/assemblies.yaml index 437130e24..b3a183237 100644 --- a/catalog/py_package/catalog_build/schema/assemblies.yaml +++ b/catalog/py_package/catalog_build/schema/assemblies.yaml @@ -26,3 +26,7 @@ classes: description: The unique accession identifier for the assembly (e.g., GCA_000001405.28 for GRCh38), used to retrieve the assembly data from public repositories. required: true range: string + jbrowse_config_url: + description: URL or path to the JBrowse 2 configuration file for this assembly. Can be a local path (e.g., /jbrowse-config/GCA_000001405.28/config.json) or a remote URL (e.g., https://example.com/jbrowse/config.json). Optional field used to enable genome browser functionality. + required: false + range: string diff --git a/catalog/schema/generated/assemblies.json b/catalog/schema/generated/assemblies.json index b6281d689..b4ff2c3f8 100644 --- a/catalog/schema/generated/assemblies.json +++ b/catalog/schema/generated/assemblies.json @@ -25,6 +25,13 @@ "accession": { "description": "The unique accession identifier for the assembly (e.g., GCA_000001405.28 for GRCh38), used to retrieve the assembly data from public repositories.", "type": "string" + }, + "jbrowse_config_url": { + "description": "URL or path to the JBrowse 2 configuration file for this assembly. Can be a local path (e.g., /jbrowse-config/GCA_000001405.28/config.json) or a remote URL (e.g., https://example.com/jbrowse/config.json). Optional field used to enable genome browser functionality.", + "type": [ + "string", + "null" + ] } }, "required": [ diff --git a/catalog/schema/generated/schema.ts b/catalog/schema/generated/schema.ts index 8c8d0e050..df3552565 100644 --- a/catalog/schema/generated/schema.ts +++ b/catalog/schema/generated/schema.ts @@ -206,6 +206,8 @@ export interface Assemblies { export interface Assembly { /** The unique accession identifier for the assembly (e.g., GCA_000001405.28 for GRCh38), used to retrieve the assembly data from public repositories. */ accession: string, + /** URL or path to the JBrowse 2 configuration file for this assembly. Can be a local path (e.g., /jbrowse-config/GCA_000001405.28/config.json) or a remote URL (e.g., https://example.com/jbrowse/config.json). Optional field used to enable genome browser functionality. */ + jbrowse_config_url?: string | null, } diff --git a/catalog/source/assemblies.yml b/catalog/source/assemblies.yml index db0bbc25d..d143d227a 100644 --- a/catalog/source/assemblies.yml +++ b/catalog/source/assemblies.yml @@ -2,9 +2,11 @@ assemblies: # organism: Trichomonas vaginalis G3 # common_name: trichomonads (G3 2022 genbank) - accession: GCA_000002825.3 + jbrowseConfigUrl: /jbrowse-config/GCA_000002825.3/config.json # organism: Aspergillus flavus NRRL3357 # common_name: ascomycetes A.flavus (NRRL3357 2020) - accession: GCA_000006275.3 + jbrowseConfigUrl: /jbrowse-config/GCA_000006275.3/config.json # organism: Globisporangium ultimum DAOM BR144 # common_name: oomycetes (DAOM BR144 2010) - accession: GCA_000143045.1 diff --git a/package-lock.json b/package-lock.json index ab4342788..86baaf6e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,8 @@ "@databiosphere/findable-ui": "^46.0.0", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", + "@jbrowse/product-core": "^3.6.5", + "@jbrowse/react-linear-genome-view2": "^3.6.5", "@mdx-js/loader": "^3.0.1", "@mdx-js/react": "^3.0.1", "@mui/icons-material": "^7.0.1", @@ -194,6 +196,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -1883,12 +1886,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2282,7 +2283,6 @@ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "optional": true, - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2296,7 +2296,6 @@ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "optional": true, - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2382,6 +2381,7 @@ "url": "https://opencollective.com/csstools" } ], + "peer": true, "engines": { "node": ">=18" }, @@ -2403,6 +2403,7 @@ "url": "https://opencollective.com/csstools" } ], + "peer": true, "engines": { "node": ">=18" } @@ -2511,6 +2512,7 @@ "version": "11.13.3", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", @@ -2551,6 +2553,7 @@ "version": "11.13.0", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", @@ -3138,6 +3141,235 @@ "node": ">=14" } }, + "node_modules/@flatten-js/interval-tree": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.4.tgz", + "integrity": "sha512-o4emRDDvGdkwX18BSVSXH8q27qAL7Z2WDHSN75C8xyRSE4A8UOkig0mWSGoT5M5KaTHZxoLmalFwOTQmbRusUg==", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.27.16", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.16.tgz", + "integrity": "sha512-9O8N4SeG2z++TSM8QA/KTeKFBVCNEz/AGS7gWPJf6KFRzmRWixFRnCnkPHRDwSVZW6QPDO6uT0P2SpWNKCc9/g==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.6", + "@floating-ui/utils": "^0.2.10", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@gmod/abortable-promise-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@gmod/abortable-promise-cache/-/abortable-promise-cache-3.0.4.tgz", + "integrity": "sha512-kxRJj5fyRKFuZDp/YvnHeadYCV2EEUKyH2T4a2Iz9O7T/thOWWHUDiiD/Mg6WZP/RNNDIcfSHl/xVHHy/+j8qg==", + "license": "MIT" + }, + "node_modules/@gmod/bam": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@gmod/bam/-/bam-6.1.1.tgz", + "integrity": "sha512-2p0j6P+0n2XFc4NBPJCVEEprwYWDFgvWThONPe7a0ra2+UD+DCLwL3BKfseZ7MyzRwptlYV6ektYODXSqilFKA==", + "license": "MIT", + "dependencies": { + "@gmod/abortable-promise-cache": "^3.0.1", + "@gmod/bgzf-filehandle": "^4.0.0", + "crc": "^4.3.2", + "generic-filehandle2": "^2.0.1", + "quick-lru": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/bbi": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@gmod/bbi/-/bbi-7.0.5.tgz", + "integrity": "sha512-XTWmeheoG5LWF4Rm2a5tttt+93PDyKnPp3pXle4bRYdwNWY534iK3ifpSx5cjGggjt4xOrWwGpM0Tqpmh7LaRA==", + "license": "MIT", + "dependencies": { + "@gmod/abortable-promise-cache": "^3.0.1", + "generic-filehandle2": "^2.0.10", + "pako": "^2.0.0", + "quick-lru": "^4.0.0", + "rxjs": "^7.8.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/bbi/node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@gmod/bed": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@gmod/bed/-/bed-2.1.7.tgz", + "integrity": "sha512-ddxGWgcbI984gTdsIPbrFpM2h7s7kNWWKmxD+xKtv5N+Pe4RaoPdJ6nAc33QFkUjuM2s+3QIf81qjFLDVGhLsA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/bgzf-filehandle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@gmod/bgzf-filehandle/-/bgzf-filehandle-4.1.1.tgz", + "integrity": "sha512-X6KwsZSlYBfR+QZazNLlvXqWxw09jJt0e+VUVi64tC0ns4sdTAlPCQTWWTOnYnC0qrQ6sKDLjILDNfLY9+0YAA==", + "license": "MIT", + "dependencies": { + "generic-filehandle2": "^2.0.5", + "pako": "^1.0.11" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/cram": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@gmod/cram/-/cram-5.0.6.tgz", + "integrity": "sha512-YHJlLm0byAIaAI1rvlXb1wP6abq5WyZc8DDpnM3WK1iMmnPmYwLzqIYWjyrbMdP532SZah+jECWGKe9Y7+nNmg==", + "license": "MIT", + "dependencies": { + "crc": "^4.3.2", + "generic-filehandle2": "^2.0.12", + "md5": "^2.2.1", + "pako": "^1.0.4", + "quick-lru": "^4.0.1", + "xz-decompress": "^0.2.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/http-range-fetcher": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@gmod/http-range-fetcher/-/http-range-fetcher-5.0.1.tgz", + "integrity": "sha512-O1Ly1s/sn0mb/OO4SvYkFnR9P+DfsX/qml1O7aqxSnxdrqNXaGRDSl4Ggw0ta30ctCTPvuXxsKA8Met5N4KRzg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^4.0.0" + } + }, + "node_modules/@gmod/indexedfasta": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@gmod/indexedfasta/-/indexedfasta-4.0.6.tgz", + "integrity": "sha512-tiLHXBrRcG9geR6gc9yJzZdL9mWPsZ3ju32Fc7ckSyhHMpPh9MBo4djdNbqDuyTtW7vDXxs3/TksaPJzolBVQg==", + "license": "MIT", + "dependencies": { + "@gmod/bgzf-filehandle": "^4.0.0", + "generic-filehandle2": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@gmod/nclist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@gmod/nclist/-/nclist-3.0.1.tgz", + "integrity": "sha512-/7oNR1a91n3iIB/xTyvILi7IiLCW+89DF2uh3dbE6SQ9s3lYu4JxhoeZFLhQ75G5oZi8jvu50kz9m9iSONWjdA==", + "license": "MIT", + "dependencies": { + "@gmod/abortable-promise-cache": "^3.0.1", + "@jridgewell/resolve-uri": "^3.1.2", + "quick-lru": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@gmod/tabix": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@gmod/tabix/-/tabix-3.1.0.tgz", + "integrity": "sha512-9UKmEs+3eqoAHuSVTNOodBhJrT5036R329wnseg6rE4xMFOOjb1LFW5IdyqxkS19eecPxM0lSFnnrICn1J6Xdg==", + "license": "MIT", + "dependencies": { + "@gmod/abortable-promise-cache": "^3.0.1", + "@gmod/bgzf-filehandle": "^4.0.0", + "generic-filehandle2": "^2.0.1", + "quick-lru": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/trix": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@gmod/trix/-/trix-3.0.3.tgz", + "integrity": "sha512-CnR9HkozYOzaJRKrQJIN4I3oMm5fhCnNOkgywMkceAybP6sO1nzbEgYe/v1W8/9BfipZTx6FCgRB+PgOXSjZuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@gmod/twobit": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@gmod/twobit/-/twobit-6.0.1.tgz", + "integrity": "sha512-0wZIntu6NHyBZcas8dcrB7f/IAbu/B/OOutImQkXkCFHvaC/nFKd4uaiw6n+N+8XaiEaLmAC4v8QesXHSQEFxQ==", + "license": "MIT", + "dependencies": { + "generic-filehandle2": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@gmod/ucsc-hub": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@gmod/ucsc-hub/-/ucsc-hub-2.0.3.tgz", + "integrity": "sha512-w0qs1J2rjxt/ytxYH0VhxcFW+03Uh6R216skpbc5Q4to73lmXbaatJz6cZ+M4vgBkTQXoOpvaULAha0g7nxjWA==", + "license": "MIT" + }, + "node_modules/@gmod/vcf": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@gmod/vcf/-/vcf-6.0.9.tgz", + "integrity": "sha512-POXCZ5/6HL/Jbywc6uondLqqepcOTbVQZEOxY0G3Y6c7Q/3dP+tRl8sD5YUgk/2yppu9wG4c9Ek9fOnPw+OWPw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -3294,6 +3526,590 @@ "node": ">=8" } }, + "node_modules/@jbrowse/core": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/core/-/core-3.6.5.tgz", + "integrity": "sha512-zphv5LxzID2Uq3Vr/19nHebEcUVrh4LwW9IBXr6H5Naf82L2t1BqkzZLRyctmcalw2mGDj74Rt529ncphYfPZQ==", + "license": "Apache-2.0", + "dependencies": { + "@floating-ui/react": "^0.27.0", + "@gmod/abortable-promise-cache": "^3.0.1", + "@gmod/bgzf-filehandle": "^4.0.0", + "@gmod/http-range-fetcher": "^5.0.0", + "@leeoniya/ufuzzy": "^1.0.18", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@mui/x-data-grid": "^8.0.0", + "canvas-sequencer": "^3.1.0", + "canvas2svg": "^1.0.16", + "colord": "^2.9.3", + "copy-to-clipboard": "^3.3.1", + "deepmerge": "^4.2.2", + "detect-node": "^2.1.0", + "dompurify": "^3.2.0", + "escape-html": "^1.0.3", + "fast-deep-equal": "^3.1.3", + "generic-filehandle2": "^2.0.1", + "jexl": "^2.3.0", + "librpc-web-mod": "^1.1.5", + "load-script": "^2.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rbush": "^3.0.1", + "react-draggable": "^4.4.5", + "rxjs": "^7.0.0", + "serialize-error": "^8.0.0", + "source-map-js": "^1.0.2", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-alignments": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-alignments/-/plugin-alignments-3.6.5.tgz", + "integrity": "sha512-XuFySwgI0sriXeIs8VfPVqa9+1HlpPAwjxjlRJZGjr3NK5JOzqyPTVddDjiT+yIgMtXCQR+Nd1qkydS8lOqmAg==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/bam": "^6.0.1", + "@gmod/cram": "^5.0.4", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/plugin-wiggle": "^3.6.5", + "@jbrowse/sv-core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "canvas2svg": "^1.0.16", + "copy-to-clipboard": "^3.3.1", + "fast-deep-equal": "^3.1.3", + "generic-filehandle2": "^2.0.1", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-alignments/node_modules/@jbrowse/sv-core": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/sv-core/-/sv-core-3.6.5.tgz", + "integrity": "sha512-sgQ4Lm4RriUSdSMgFoeSB2MmcpIegHpnWsq3n798Fnmtj4bAGwF4uTbHlLRVxbSur448nVUNnKW9jROs2jjJoA==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/vcf": "^6.0.8", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-bed": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-bed/-/plugin-bed-3.6.5.tgz", + "integrity": "sha512-I5p2Z3zqFYcEgD9Jbxxl8P8306vtTRchwSHy6//G3sngjUgPIAKxk+3q9CNdBoLbVrGciZjCRXG1ToFjq9ozXQ==", + "license": "Apache-2.0", + "dependencies": { + "@flatten-js/interval-tree": "^1.0.15", + "@gmod/bbi": "^7.0.0", + "@gmod/bed": "^2.1.2", + "@gmod/bgzf-filehandle": "^4.0.0", + "@gmod/tabix": "^3.0.1", + "@jbrowse/core": "^3.6.5", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/@jbrowse/plugin-data-management": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-data-management/-/plugin-data-management-3.6.5.tgz", + "integrity": "sha512-Mjw9h7OLITFcbkmvas7vk2dTrEi69QWyDPBwh5WHY2GgW+o+PEMpXvY09SQH4eJQ1p+nHeCmF/Yg/a/Hla0KVA==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/ucsc-hub": "^2.0.1", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-config": "^3.6.5", + "@jbrowse/product-core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@mui/x-data-grid": "^8.0.0", + "deepmerge": "^4.3.1", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "react-virtualized-auto-sizer": "^1.0.26", + "react-vtree": "^3.0.0-beta.1", + "react-window": "^1.8.6", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-data-management/node_modules/@jbrowse/plugin-config": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-config/-/plugin-config-3.6.5.tgz", + "integrity": "sha512-+b9rir9bYf4+Y0kCZWwwjbSwTOXTzQZ/zoW+0kIiuqQbVR8Fxy3FB4u0qA1h5Zhhy9mkDhPGOGRwX8/k5D2Xpg==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "pluralize": "^8.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-data-management/node_modules/react-virtualized-auto-sizer": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.26.tgz", + "integrity": "sha512-CblNyiNVw2o+hsa5/49NH2ogGxZ+t+3aweRvNSq7TVjDIlwk7ir4lencEg5HxHeSzwNarSkNkiu0qJSOXtxm5A==", + "license": "MIT", + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@jbrowse/plugin-data-management/node_modules/react-vtree": { + "version": "3.0.0-beta.3", + "resolved": "https://registry.npmjs.org/react-vtree/-/react-vtree-3.0.0-beta.3.tgz", + "integrity": "sha512-BGC8kOT2Ti3rne0Nwu+n90TAo8lbYiWT36Cu47aj6bz+Bs7k5p3EVgBTinyuCdU5+n4a9wJOXHAdop/zsR1RAA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.0", + "react-merge-refs": "^1.1.0" + }, + "peerDependencies": { + "react": ">= 16.8", + "react-dom": ">= 16.8", + "react-window": ">= 1.8.5" + } + }, + "node_modules/@jbrowse/plugin-gccontent": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-gccontent/-/plugin-gccontent-3.6.5.tgz", + "integrity": "sha512-ZoPYOcpZw1TqLWIFjDPzkBI6OpbQgQj4hNUAN07MNO1v5jsPq/pYsRwWffcOfLpPorf2YBbp03QISgExlRgDBQ==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/plugin-sequence": "^3.6.5", + "@jbrowse/plugin-wiggle": "^3.6.5", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-gff3": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-gff3/-/plugin-gff3-3.6.5.tgz", + "integrity": "sha512-y+VrZu5NDpdarziQ7yjcSTbNzJaAxg9QchgfzGfuoqvfzLYXAXdlE1sqthQziMWNs2wc8fjVfSP23GqJifeU6A==", + "license": "Apache-2.0", + "dependencies": { + "@flatten-js/interval-tree": "^1.0.15", + "@gmod/bgzf-filehandle": "^4.0.0", + "@gmod/tabix": "^3.0.1", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@mui/material": "^7.0.0", + "gff-nostream": "^1.3.3", + "mobx": "^6.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/@jbrowse/plugin-legacy-jbrowse": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-legacy-jbrowse/-/plugin-legacy-jbrowse-3.6.5.tgz", + "integrity": "sha512-VVQtyFxKhTDTivi/92tHllneqj6Zn203aklGh5q0CtzZffJi+J/VsRxvQc9f8efX3wCgzjBrNwIGgvN+FH5XCQ==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/nclist": "^3.0.0", + "@jbrowse/core": "^3.6.5", + "crc": "^4.0.0", + "generic-filehandle2": "^2.0.1", + "get-value": "^3.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "set-value": "^4.0.1" + } + }, + "node_modules/@jbrowse/plugin-linear-genome-view": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-linear-genome-view/-/plugin-linear-genome-view-3.6.5.tgz", + "integrity": "sha512-UsZVkxE+JiPZzSbdZEvZbxEpIECdWoo1cMGTzArsieApzy2CORVdXr+3BN1yLMCHbgI82Q+v8SXTSIExg+9eQg==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@types/file-saver": "^2.0.1", + "copy-to-clipboard": "^3.3.1", + "file-saver": "^2.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-sequence": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-sequence/-/plugin-sequence-3.6.5.tgz", + "integrity": "sha512-ndsgm+rXA4Y4+mrnH+Y2UEfE8QDGZkvTPcOnyv989859bp/2fATpt5n6mKTvJYxneQlM69vJQF1aZ2ZWbPJQXg==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/abortable-promise-cache": "^3.0.1", + "@gmod/indexedfasta": "^4.0.0", + "@gmod/twobit": "^6.0.0", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/plugin-wiggle": "^3.6.5", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-svg": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-svg/-/plugin-svg-3.6.5.tgz", + "integrity": "sha512-LECMna0kVLdNtccQx2pVU8NNt10YTujt41lcH3hG6V5W/gjqWkpq3PSid+i8B9kdqlSSCOR9HoXz40Ptv4TPjw==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-trix": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-trix/-/plugin-trix-3.6.5.tgz", + "integrity": "sha512-jzfqMlQOn7bhTNbFAUgYsV1Vpe27Zcl25vzidkxWz8+3bzVqI16JfUs2QdSQ/Fjw6mAIISZU9SwWMpIP/MUwxw==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/trix": "^3.0.2", + "@jbrowse/core": "^3.6.5", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-variants": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-variants/-/plugin-variants-3.6.5.tgz", + "integrity": "sha512-fQpMTqOhx1OCveFAH/QE1rUCfLmqp1hytUa3Vpeml/A7TItIBnLxEBvvm3pidGrGrVCqaOkRUqnRdnFyXC37cg==", + "license": "Apache-2.0", + "dependencies": { + "@flatten-js/interval-tree": "^1.0.15", + "@gmod/bgzf-filehandle": "^4.0.0", + "@gmod/tabix": "^3.0.1", + "@gmod/vcf": "^6.0.8", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-circular-view": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/sv-core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@mui/x-data-grid": "^8.0.0", + "escape-html": "^1.0.3", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-variants/node_modules/@jbrowse/plugin-circular-view": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-circular-view/-/plugin-circular-view-3.6.5.tgz", + "integrity": "sha512-XFl7bCSMqRnscI7iCbmx9v9uuIuuaOnbOq0C12enId2F6gfRZU1ntahhOSs+hzg+exOZ6KCgx48T30r0xyblnQ==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@types/file-saver": "^2.0.0", + "file-saver": "^2.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-variants/node_modules/@jbrowse/sv-core": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/sv-core/-/sv-core-3.6.5.tgz", + "integrity": "sha512-sgQ4Lm4RriUSdSMgFoeSB2MmcpIegHpnWsq3n798Fnmtj4bAGwF4uTbHlLRVxbSur448nVUNnKW9jROs2jjJoA==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/vcf": "^6.0.8", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/plugin-wiggle": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-wiggle/-/plugin-wiggle-3.6.5.tgz", + "integrity": "sha512-VoY0SgcctVvVk6xbs/WpQoOqKVu7CyRHeUgYraZ9cMQ0413Q0wLZ2n2enxT2vTo0LFSQna4aT0l+iAyMeyxePQ==", + "license": "Apache-2.0", + "dependencies": { + "@gmod/bbi": "^7.0.0", + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-data-management": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@mui/x-charts-vendor": "^8.0.0", + "@mui/x-data-grid": "^8.0.0", + "fast-deep-equal": "^3.1.3", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "react-d3-axis-mod": "^0.1.9", + "react-draggable": "^4.4.5", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/product-core": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/product-core/-/product-core-3.6.5.tgz", + "integrity": "sha512-Exs7ZhmalvYv5pa/astu6dEjQ0Hvqp62/P9rgU7b3GCWtEC3pP32B/lOHVoJZ2ls/KbOMMvv7tcFc/Spspi5xw==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "copy-to-clipboard": "^3.3.1", + "librpc-web-mod": "^1.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "serialize-error": "^8.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/react-linear-genome-view2/-/react-linear-genome-view2-3.6.5.tgz", + "integrity": "sha512-fl4JbmvQnbaxcUFUvus+oJ/e/9erUN3D3CuYuhm8eCQnTOCP0lWq+lONdVdA2PtOEdOmAU/YcRsGd+3pnl+2Bw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@emotion/cache": "^11.7.1", + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@jbrowse/core": "^3.6.5", + "@jbrowse/embedded-core": "^3.6.5", + "@jbrowse/plugin-alignments": "^3.6.5", + "@jbrowse/plugin-arc": "^3.6.5", + "@jbrowse/plugin-authentication": "^3.6.5", + "@jbrowse/plugin-bed": "^3.6.5", + "@jbrowse/plugin-circular-view": "^3.6.5", + "@jbrowse/plugin-config": "^3.6.5", + "@jbrowse/plugin-data-management": "^3.6.5", + "@jbrowse/plugin-gccontent": "^3.6.5", + "@jbrowse/plugin-gff3": "^3.6.5", + "@jbrowse/plugin-legacy-jbrowse": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/plugin-sequence": "^3.6.5", + "@jbrowse/plugin-svg": "^3.6.5", + "@jbrowse/plugin-trix": "^3.6.5", + "@jbrowse/plugin-variants": "^3.6.5", + "@jbrowse/plugin-wiggle": "^3.6.5", + "@jbrowse/product-core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "deepmerge": "^4.3.1", + "mobx": "^6.6.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.4.1" + }, + "peerDependencies": { + "react": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2/node_modules/@jbrowse/embedded-core": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/embedded-core/-/embedded-core-3.6.5.tgz", + "integrity": "sha512-FmSjorVrSJKTP0gOozbg/1EnGfqcaEqgfqIlefjr5GePYa7hv3SiHVUzHdJlACnxxMRJooB38AgekLg2pfXybQ==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@jbrowse/core": "^3.6.5", + "@jbrowse/product-core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "copy-to-clipboard": "^3.3.1", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2/node_modules/@jbrowse/plugin-arc": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-arc/-/plugin-arc-3.6.5.tgz", + "integrity": "sha512-T0WPnua49uZmuGBcq8yr/PPvmWGAZry596fV9ZCJaZXpJm5xIv2aVXRcN37A2S5YGiA8bQU0CpFlNJIpJLKDzw==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@jbrowse/plugin-linear-genome-view": "^3.6.5", + "@jbrowse/plugin-wiggle": "^3.6.5", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2/node_modules/@jbrowse/plugin-authentication": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-authentication/-/plugin-authentication-3.6.5.tgz", + "integrity": "sha512-+jJFVS2+rCtrpHTv/J5s8F9YHBSQ2BIClJAfA37f991LBVsaMVn8WUzqjbn62bd8Yf31hR1HLYZ+ZPE+b9Eqqg==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/material": "^7.0.0", + "crypto-js": "^4.2.0", + "generic-filehandle2": "^2.0.1", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "rxjs": "^7.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2/node_modules/@jbrowse/plugin-circular-view": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-circular-view/-/plugin-circular-view-3.6.5.tgz", + "integrity": "sha512-XFl7bCSMqRnscI7iCbmx9v9uuIuuaOnbOq0C12enId2F6gfRZU1ntahhOSs+hzg+exOZ6KCgx48T30r0xyblnQ==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "@types/file-saver": "^2.0.0", + "file-saver": "^2.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@jbrowse/react-linear-genome-view2/node_modules/@jbrowse/plugin-config": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/@jbrowse/plugin-config/-/plugin-config-3.6.5.tgz", + "integrity": "sha512-+b9rir9bYf4+Y0kCZWwwjbSwTOXTzQZ/zoW+0kIiuqQbVR8Fxy3FB4u0qA1h5Zhhy9mkDhPGOGRwX8/k5D2Xpg==", + "license": "Apache-2.0", + "dependencies": { + "@jbrowse/core": "^3.6.5", + "@mui/icons-material": "^7.0.0", + "@mui/material": "^7.0.0", + "mobx": "^6.0.0", + "mobx-react": "^9.0.0", + "mobx-state-tree": "^5.0.0", + "pluralize": "^8.0.0", + "rxjs": "^7.0.0", + "tss-react": "^4.0.0" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, "node_modules/@jest/console": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", @@ -4002,7 +4818,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -4022,6 +4837,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@leeoniya/ufuzzy": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/@leeoniya/ufuzzy/-/ufuzzy-1.0.19.tgz", + "integrity": "sha512-0pikDeYt0IHEUPza5RTCDXc/17S1pTrYnReEMp8Aa6k1ovzw5QdZLwicW8TjljwEZRb6oYag0xmALohrcq/yOQ==", + "license": "MIT" + }, "node_modules/@mapbox/hast-util-table-cell-style": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.1.tgz", @@ -4173,6 +4994,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -4198,6 +5020,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.0.1.tgz", "integrity": "sha512-x8Em7LISFQ6s/KeZj6ZKwJHq2WttRNe9KJLWFa72eQx7B53s/TzMKOEjGKB/YyhOx+bqqSv1pMvK373M4Xf07A==", + "peer": true, "dependencies": { "@babel/runtime": "^7.26.10" }, @@ -4223,6 +5046,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz", "integrity": "sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==", + "peer": true, "dependencies": { "@babel/runtime": "^7.26.10", "@mui/core-downloads-tracker": "^7.0.1", @@ -4335,6 +5159,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.2.tgz", "integrity": "sha512-yFUraAWYWuKIISPPEVPSQ1NLeqmTT4qiQ+ktmyS8LO/KwHxB+NNVOacEZaIofh5x1NxY8rzphvU5X2heRZ/RDA==", + "peer": true, "dependencies": { "@babel/runtime": "^7.27.0", "@mui/private-theming": "^7.0.2", @@ -4370,12 +5195,13 @@ } } }, - "node_modules/@mui/system/node_modules/@mui/types": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.1.tgz", - "integrity": "sha512-gUL8IIAI52CRXP/MixT1tJKt3SI6tVv4U/9soFsTtAsHzaJQptZ42ffdHZV3niX1ei0aUgMvOxBBN0KYqdG39g==", + "node_modules/@mui/types": { + "version": "7.4.8", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.8.tgz", + "integrity": "sha512-ZNXLBjkPV6ftLCmmRCafak3XmSn8YV0tKE/ZOhzKys7TZXUiE0mZxlH8zKDo6j6TTUaDnuij68gIG+0Ucm7Xhw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.28.4" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -4386,15 +5212,29 @@ } } }, - "node_modules/@mui/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz", - "integrity": "sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==", - "dependencies": { - "@babel/runtime": "^7.26.10" + "node_modules/@mui/utils": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.5.tgz", + "integrity": "sha512-jisvFsEC3sgjUjcPnR4mYfhzjCDIudttSGSbe1o/IXFNu0kZuR+7vqQI0jg8qtcVZBHWrwTfvAZj9MNMumcq1g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/types": "^7.4.8", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -4402,17 +5242,48 @@ } } }, - "node_modules/@mui/utils": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.2.tgz", - "integrity": "sha512-72gcuQjPzhj/MLmPHLCgZjy2VjOH4KniR/4qRtXTTXIEwbkgcN+Y5W/rC90rWtMmZbjt9svZev/z+QHUI4j74w==", - "dependencies": { - "@babel/runtime": "^7.27.0", - "@mui/types": "^7.4.1", - "@types/prop-types": "^15.7.14", + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz", + "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==", + "license": "MIT" + }, + "node_modules/@mui/x-charts-vendor": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-8.15.0.tgz", + "integrity": "sha512-0w7Who278kmRFm+5LUZY5MErSJBO75tqBH8abDkTiDNfsCe88vnrImmIT7OGzJGyRJfyrEBht8RLL6bHNEParg==", + "license": "MIT AND ISC", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@types/d3-color": "^3.1.3", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-sankey": "^0.12.4", + "@types/d3-scale": "^4.0.9", + "@types/d3-shape": "^3.1.7", + "@types/d3-time": "^3.0.4", + "@types/d3-timer": "^3.0.2", + "d3-color": "^3.1.0", + "d3-interpolate": "^3.0.1", + "d3-sankey": "^0.12.3", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/@mui/x-data-grid": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.17.0.tgz", + "integrity": "sha512-eIzYM700Er5AKGS7T9NxQfpFNGpGP0NYpJ6RiQWSv904CkzAY0mbMZ6/XKldavbhSwzHVUfv37GK9mFeUl7I5g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.3", + "@mui/x-internals": "8.17.0", + "@mui/x-virtualizer": "0.2.7", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.1.0" + "use-sync-external-store": "^1.6.0" }, "engines": { "node": ">=14.0.0" @@ -4422,35 +5293,65 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { - "@types/react": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { "optional": true } } }, - "node_modules/@mui/utils/node_modules/@mui/types": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.1.tgz", - "integrity": "sha512-gUL8IIAI52CRXP/MixT1tJKt3SI6tVv4U/9soFsTtAsHzaJQptZ42ffdHZV3niX1ei0aUgMvOxBBN0KYqdG39g==", + "node_modules/@mui/x-internals": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.17.0.tgz", + "integrity": "sha512-KvmR0PPX1j2i44y0DXwzs45jIPMu/YZYXYy7xvzo+ZNdYebbW5LbVeG4zdEUnKHyOG02oHdI7MM9AxcZE16TBw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.27.0" + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.3", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + "engines": { + "node": ">=14.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", - "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==" + "node_modules/@mui/x-virtualizer": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@mui/x-virtualizer/-/x-virtualizer-0.2.7.tgz", + "integrity": "sha512-xcdo+lvlfwuLE2FVAQtOEg078liB/aiVGjEuiyPv02Vzp8Y50qNH0EtV9lk/E/d/lbkkMGnapnk+JFT5HlUB0w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.3", + "@mui/x-internals": "8.17.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } }, "node_modules/@next/env": { "version": "14.2.33", @@ -4686,6 +5587,7 @@ "version": "0.6.17", "resolved": "https://registry.npmjs.org/@observablehq/plot/-/plot-0.6.17.tgz", "integrity": "sha512-/qaXP/7mc4MUS0s4cPPFASDRjtsWp85/TbfsciqDgU1HwYixbSbbytNuInD8AcTYC3xaxACgVX06agdfQy9W+g==", + "peer": true, "dependencies": { "d3": "^7.9.0", "interval-tree-1d": "^1.0.0", @@ -4699,7 +5601,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", - "peer": true, "funding": { "url": "https://github.com/sponsors/panva" } @@ -4731,6 +5632,7 @@ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "devOptional": true, + "peer": true, "dependencies": { "playwright": "1.56.1" }, @@ -4786,80 +5688,6 @@ "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@swc/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.2.tgz", - "integrity": "sha512-vWgY07R/eqj1/a0vsRKLI9o9klGZfpLNOVEnrv4nrccxBgYPjcf22IWwAoaBJ+wpA7Q4fVjCUM8lP0m01dpxcg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "@swc/counter": "^0.1.2", - "@swc/types": "^0.1.5" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.4.2", - "@swc/core-darwin-x64": "1.4.2", - "@swc/core-linux-arm-gnueabihf": "1.4.2", - "@swc/core-linux-arm64-gnu": "1.4.2", - "@swc/core-linux-arm64-musl": "1.4.2", - "@swc/core-linux-x64-gnu": "1.4.2", - "@swc/core-linux-x64-musl": "1.4.2", - "@swc/core-win32-arm64-msvc": "1.4.2", - "@swc/core-win32-ia32-msvc": "1.4.2", - "@swc/core-win32-x64-msvc": "1.4.2" - }, - "peerDependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.2.tgz", - "integrity": "sha512-LFxn9U8cjmYHw3jrdPNqPAkBGglKE3tCZ8rA7hYyp0BFxuo7L2ZcEnPm4RFpmSCCsExFH+LEJWuMGgWERoktvg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.2.tgz", - "integrity": "sha512-dp0fAmreeVVYTUcb4u9njTPrYzKnbIH0EhH2qvC9GOYNNREUu2GezSIDgonjOXkHiTCvopG4xU7y56XtXj4VrQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -4874,14 +5702,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@tanstack/match-sorter-utils": { "version": "8.19.4", "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", @@ -4902,6 +5722,7 @@ "version": "8.19.2", "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.19.2.tgz", "integrity": "sha512-itoSIAkA/Vsg+bjY23FSemcTyPhc5/1YjYyaMsr9QSH/cdbZnQxHVWrpWn0Sp2BWN71qkzR7e5ye8WuMmwyOjg==", + "peer": true, "dependencies": { "@tanstack/table-core": "8.19.2" }, @@ -4921,6 +5742,7 @@ "version": "3.13.12", "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.12.tgz", "integrity": "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==", + "peer": true, "dependencies": { "@tanstack/virtual-core": "3.13.12" }, @@ -4959,7 +5781,6 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4979,7 +5800,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4995,7 +5815,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5012,7 +5831,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -5022,7 +5840,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -5142,32 +5959,28 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/@types/acorn": { "version": "4.0.6", @@ -5181,8 +5994,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -5305,8 +6117,7 @@ "node_modules/@types/d3-color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "dev": true + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" }, "node_modules/@types/d3-contour": { "version": "3.0.6", @@ -5391,7 +6202,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "dev": true, "dependencies": { "@types/d3-color": "*" } @@ -5399,8 +6209,7 @@ "node_modules/@types/d3-path": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", - "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", - "dev": true + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==" }, "node_modules/@types/d3-polygon": { "version": "3.0.2", @@ -5420,11 +6229,34 @@ "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", "dev": true }, + "node_modules/@types/d3-sankey": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@types/d3-sankey/-/d3-sankey-0.12.4.tgz", + "integrity": "sha512-YTicQNwioitIlvuvlfW2GfO6sKxpohzg2cSQttlXAPjFwoBuN+XpGLhUN3kLutG/dI3GCLC+DUorqiJt7Naetw==", + "license": "MIT", + "dependencies": { + "@types/d3-shape": "^1" + } + }, + "node_modules/@types/d3-sankey/node_modules/@types/d3-path": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.11.tgz", + "integrity": "sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==", + "license": "MIT" + }, + "node_modules/@types/d3-sankey/node_modules/@types/d3-shape": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.12.tgz", + "integrity": "sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "^1" + } + }, "node_modules/@types/d3-scale": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", - "dev": true, "dependencies": { "@types/d3-time": "*" } @@ -5445,7 +6277,6 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", - "dev": true, "dependencies": { "@types/d3-path": "*" } @@ -5453,8 +6284,7 @@ "node_modules/@types/d3-time": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", - "dev": true + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==" }, "node_modules/@types/d3-time-format": { "version": "4.0.3", @@ -5465,8 +6295,7 @@ "node_modules/@types/d3-timer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "dev": true + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" }, "node_modules/@types/d3-transition": { "version": "3.0.9", @@ -5508,6 +6337,12 @@ "@types/estree": "*" } }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "license": "MIT" + }, "node_modules/@types/geojson": { "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", @@ -5640,6 +6475,7 @@ "version": "20.10.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", + "peer": true, "dependencies": { "undici-types": "~5.26.4" } @@ -5650,14 +6486,16 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.5", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "peer": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -5668,6 +6506,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dev": true, + "peer": true, "dependencies": { "@types/react": "*" } @@ -5913,6 +6752,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.18.0", "@typescript-eslint/types": "8.18.0", @@ -6108,7 +6948,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -6117,26 +6956,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "peer": true + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "peer": true + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "peer": true + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -6146,14 +6981,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "peer": true + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -6165,7 +6998,6 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -6174,7 +7006,6 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -6182,14 +7013,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "peer": true + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -6205,7 +7034,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -6218,7 +7046,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -6230,7 +7057,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -6244,7 +7070,6 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "peer": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -6253,14 +7078,12 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/abab": { "version": "2.0.6", @@ -6273,6 +7096,7 @@ "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6303,7 +7127,6 @@ "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peer": true, "peerDependencies": { "acorn": "^8" } @@ -6333,6 +7156,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6448,8 +7272,7 @@ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/argparse": { "version": "1.0.10", @@ -6656,7 +7479,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", - "peer": true, "engines": { "node": ">=4" } @@ -7021,6 +7843,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001669", "electron-to-chromium": "^1.5.41", @@ -7129,9 +7952,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", + "version": "1.0.30001753", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz", + "integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw==", "funding": [ { "type": "opencollective", @@ -7145,7 +7968,20 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvas-sequencer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/canvas-sequencer/-/canvas-sequencer-3.1.0.tgz", + "integrity": "sha512-ldw68WYXpmtb6oklvdMakuYB0py+F2Jeq1slCp0I9/c1sTLM7kTAtSZGssLETpoI3OjbMPd4O039OM6XKUt8wA==", + "license": "MIT" + }, + "node_modules/canvas2svg": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/canvas2svg/-/canvas2svg-1.0.16.tgz", + "integrity": "sha512-r3ryHprzDOtAsFuczw+/DKkLR3XexwIlJWnJ+71I9QF7V9scYaV5JZgYDoCUlYtT3ARnOpDcm/hDNZYbWMRHqA==", + "license": "MIT" }, "node_modules/ccount": { "version": "2.0.1", @@ -7213,6 +8049,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -7253,7 +8098,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "peer": true, "engines": { "node": ">=6.0" } @@ -7401,6 +8245,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -7512,7 +8362,6 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "peer": true, "engines": { "node": ">= 0.6" } @@ -7521,6 +8370,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "peer": true, "dependencies": { "toggle-selection": "^1.0.6" } @@ -7599,6 +8449,23 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/crc": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", + "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "buffer": ">=6.0.3" + }, + "peerDependenciesMeta": { + "buffer": { + "optional": true + } + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -7677,8 +8544,7 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -7694,6 +8560,21 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -7996,6 +8877,46 @@ "node": ">=12" } }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, "node_modules/d3-scale": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", @@ -8027,6 +8948,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "peer": true, "engines": { "node": ">=12" } @@ -8263,7 +9185,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8335,6 +9256,12 @@ "node": ">=8" } }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -8353,7 +9280,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "optional": true, - "peer": true, "engines": { "node": ">=0.3.1" } @@ -8746,6 +9672,12 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -8794,6 +9726,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -8888,6 +9821,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -9009,6 +9943,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -9698,7 +10633,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "peer": true, "engines": { "node": ">=0.8.x" } @@ -9853,11 +10787,16 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", + "license": "MIT" + }, "node_modules/file-selector": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", - "peer": true, "dependencies": { "tslib": "^2.4.0" }, @@ -10047,6 +10986,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generic-filehandle2": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/generic-filehandle2/-/generic-filehandle2-2.0.14.tgz", + "integrity": "sha512-Gg0EQY2Rd3wlusat7wbmAozxADzmsHKcko+b3/hRM/mh6eGheeyyVEpXoYpFbhlov2QTbjnBOSsPCP8gwywJHQ==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10150,6 +11098,24 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-value": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz", + "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gff-nostream": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/gff-nostream/-/gff-nostream-1.3.9.tgz", + "integrity": "sha512-L5BNDHgcGGqksiXSk7IJkiZrcUioz/WwTW4sno/yReR8wtwMKbP4pJ7lUjKw9la6iMAJP1+7SrjB58y6c6Q/Qw==", + "license": "MIT" + }, "node_modules/git-raw-commits": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", @@ -10204,8 +11170,7 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "peer": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.2", @@ -10316,6 +11281,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "peer": true, "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", @@ -11314,11 +12280,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-reference": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", @@ -11491,6 +12478,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isoformat": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/isoformat/-/isoformat-0.2.1.tgz", @@ -11500,6 +12496,7 @@ "version": "2.22.0", "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.22.0.tgz", "integrity": "sha512-A2xsDNST1yB94rErEnwqlzSvGllCJ4e8lDMe1OWBH2hvpfc/2qzgMEiDshTO1HwO+PIDTiYeOc7ZDB7Ds49BOg==", + "peer": true, "dependencies": { "dompurify": "^3.2.4", "jsdom": "^26.0.0" @@ -13529,6 +14526,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jexl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jexl/-/jexl-2.3.0.tgz", + "integrity": "sha512-ecqln4kTWNkMwbFvTukOMDq1jy1GcPzvshhMp/s4pxU86xdLDq7HbDRa87DfMfbSAOS8V6EwvCdfs0S+w/iycA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.2" + } + }, "node_modules/jiti": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", @@ -13542,7 +14548,6 @@ "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", - "peer": true, "funding": { "url": "https://github.com/sponsors/panva" } @@ -13740,6 +14745,7 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/ky/-/ky-1.7.2.tgz", "integrity": "sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==", + "peer": true, "engines": { "node": ">=18" }, @@ -13787,16 +14793,30 @@ "node": ">= 0.8.0" } }, + "node_modules/librpc-web-mod": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/librpc-web-mod/-/librpc-web-mod-1.3.0.tgz", + "integrity": "sha512-5Yy20m+1gC0cy1NXaKCyhHzoB2Gb98G5UtYSScDNNn5k6w3PR25qLPzsAilNKC22JCbIih/GtI9Sqd+wtk6nCw==", + "license": "MIT", + "dependencies": { + "serialize-error": "^8.1.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/load-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-2.0.0.tgz", + "integrity": "sha512-km6cyoPW4rM22JMGb+SHUKPMZVDpUaMpMAKrv8UHWllIxc/qjgMGHD91nY+5hM+/NFs310OZ2pqQeJKs7HqWPA==", + "license": "MIT" + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, "engines": { "node": ">=6.11.5" } @@ -13916,7 +14936,6 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -13926,8 +14945,7 @@ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -13966,6 +14984,23 @@ "node": ">= 0.4" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, "node_modules/mdast-util-definitions": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", @@ -17519,6 +18554,76 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/mobx": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.15.0.tgz", + "integrity": "sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } + }, + "node_modules/mobx-react": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.2.1.tgz", + "integrity": "sha512-WJNNm0FB2n0Z0u+jS1QHmmWyV8l2WiAj8V8I/96kbUEN2YbYCoKW+hbbqKKRUBqElu0llxM7nWKehvRIkhBVJw==", + "license": "MIT", + "dependencies": { + "mobx-react-lite": "^4.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/mobx-react-lite": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.1.1.tgz", + "integrity": "sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18 || ^19" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/mobx-state-tree": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/mobx-state-tree/-/mobx-state-tree-5.4.2.tgz", + "integrity": "sha512-SGXAh2KCBQbWVcxeQbZEr5pchTgcfNZmGVRL2a2Me+pSMH98bZWXD6EOuuijbTGbc0hOoOsbab3JdwJyr+fW7Q==", + "license": "MIT", + "peerDependencies": { + "mobx": "^6.3.0" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -17564,13 +18669,13 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "peer": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/next": { "version": "14.2.33", "resolved": "https://registry.npmjs.org/next/-/next-14.2.33.tgz", "integrity": "sha512-GiKHLsD00t4ACm1p00VgrI0rUFAC9cRDGReKyERlM57aeEZkOQGcZTpIbsGn0b562FTPJWmYfKwplfO9EaT6ng==", + "peer": true, "dependencies": { "@next/env": "14.2.33", "@swc/helpers": "0.5.5", @@ -17657,6 +18762,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-4.4.1.tgz", "integrity": "sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==", + "peer": true, "dependencies": { "@mdx-js/mdx": "^2.2.1", "@mdx-js/react": "^2.2.1", @@ -18739,8 +19845,7 @@ "node_modules/oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", - "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==", - "peer": true + "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -18754,7 +19859,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "peer": true, "engines": { "node": ">= 6" } @@ -18881,7 +19985,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "peer": true, "engines": { "node": "^10.13.0 || >=12.0.0" } @@ -18914,7 +20017,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.7.1.tgz", "integrity": "sha512-jDBPgSVfTnkIh71Hg9pRvtJc6wTwqjRkN88+gCFtYWrlP4Yx2Dsrow8uPi3qLr/aeymPF3o2+dS+wOpglK04ew==", - "peer": true, "dependencies": { "jose": "^4.15.9", "lru-cache": "^6.0.0", @@ -18929,7 +20031,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18940,8 +20041,7 @@ "node_modules/openid-client/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "peer": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/optionator": { "version": "0.9.3", @@ -18999,6 +20099,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -19300,6 +20406,15 @@ "node": ">=18" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -19323,7 +20438,6 @@ "version": "5.2.6", "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.6.tgz", "integrity": "sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==", - "peer": true, "dependencies": { "pretty-format": "^3.8.0" }, @@ -19334,8 +20448,7 @@ "node_modules/preact-render-to-string/node_modules/pretty-format": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", - "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==", - "peer": true + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -19351,6 +20464,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -19394,7 +20508,6 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -19409,7 +20522,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "peer": true, "engines": { "node": ">=10" }, @@ -19421,8 +20533,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "peer": true + "dev": true }, "node_modules/prompts": { "version": "2.4.2", @@ -19522,19 +20633,43 @@ } ] }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "license": "MIT", + "dependencies": { + "quickselect": "^2.0.0" + } + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -19542,10 +20677,20 @@ "node": ">=0.10.0" } }, + "node_modules/react-d3-axis-mod": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/react-d3-axis-mod/-/react-d3-axis-mod-0.1.9.tgz", + "integrity": "sha512-RL5p4hMlPivSZTdQGZKT9dQO6EvEpuJr7TvIZRt3Rn5hCVbCHmQsyfXhrndTa5mn9aQl+X6HgDL6DyJIR2Oj6Q==", + "license": "MIT", + "peerDependencies": { + "react": ">=15.0.0" + } + }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -19554,6 +20699,20 @@ "react": "^18.3.1" } }, + "node_modules/react-draggable": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.5.0.tgz", + "integrity": "sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==", + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">= 16.3.0", + "react-dom": ">= 16.3.0" + } + }, "node_modules/react-dropzone": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", @@ -19593,6 +20752,16 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, + "node_modules/react-merge-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", + "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -19612,6 +20781,7 @@ "version": "1.8.9", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.9.tgz", "integrity": "sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", "memoize-one": ">=3.1.1 <6" @@ -19712,11 +20882,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -19796,6 +20961,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "peer": true, "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", @@ -19810,6 +20976,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-7.2.0.tgz", "integrity": "sha512-MHYyCHka+3TtzBMKtcuvVOBAbI1HrfoYA+XH9m7/rlrQQATCPwtJnPdkxKKcIGF8vc9mxqQja9r9f+FHItQeWg==", + "peer": true, "dependencies": { "@mapbox/hast-util-table-cell-style": "^0.2.0", "@types/hast": "^2.0.0", @@ -19851,6 +21018,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-5.0.1.tgz", "integrity": "sha512-da/jIOjq8eYt/1r9GN6GwxIR3gde7OZ+WV8pheu1tL8K0D9KxM2AyMh+UEfke+FfdM3PvGHeYJU0Td5OWa7L5A==", + "peer": true, "dependencies": { "@types/hast": "^2.0.0", "hast-util-sanitize": "^4.0.0", @@ -19878,6 +21046,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "peer": true, "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-gfm": "^2.0.0", @@ -19919,6 +21088,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "peer": true, "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", @@ -20414,6 +21584,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "peer": true, "dependencies": { "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", @@ -20590,8 +21761,7 @@ "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", - "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", - "peer": true + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" }, "node_modules/require-directory": { "version": "2.1.1", @@ -20617,6 +21787,12 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -20755,6 +21931,15 @@ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", @@ -20801,8 +21986,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/safe-regex-test": { "version": "1.0.3", @@ -20849,7 +22033,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -20883,7 +22066,6 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peer": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -20891,8 +22073,7 @@ "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/scslre": { "version": "0.3.0", @@ -20929,11 +22110,37 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -20970,6 +22177,24 @@ "node": ">= 0.4" } }, + "node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -21040,6 +22265,7 @@ "version": "1.6.6", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -21053,9 +22279,10 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -21481,6 +22708,12 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tabbable": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", + "license": "MIT" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -21493,7 +22726,6 @@ "version": "5.28.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -21511,7 +22743,6 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -21545,7 +22776,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, "engines": { "node": ">=8" } @@ -21554,7 +22784,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -21568,7 +22797,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21582,14 +22810,12 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "peer": true + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -21598,7 +22824,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -21789,7 +23014,6 @@ "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "optional": true, - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -21834,7 +23058,6 @@ "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "optional": true, - "peer": true, "engines": { "node": ">=0.4.0" } @@ -21877,6 +23100,32 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tss-react": { + "version": "4.9.19", + "resolved": "https://registry.npmjs.org/tss-react/-/tss-react-4.9.19.tgz", + "integrity": "sha512-mmeec1wmLJKUpbaEfsQIOgk0ZtaVBt/oMbiWUFzCnxNm7vb6sDEA3ez/5/ll1eg74nrOcy9BjA+qEuF7nUV0bA==", + "license": "MIT", + "dependencies": { + "@emotion/cache": "*", + "@emotion/serialize": "*", + "@emotion/utils": "*" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/server": "^11.4.0", + "@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0", + "@types/react": "^16.8.0 || ^17.0.2 || ^18.0.0 || ^19.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/server": { + "optional": true + }, + "@mui/material": { + "optional": true + } + } + }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -22017,6 +23266,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22113,6 +23363,7 @@ "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "peer": true, "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", @@ -22346,10 +23597,20 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -22392,8 +23653,7 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "node_modules/v8-to-istanbul": { "version": "9.2.0", @@ -22504,7 +23764,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -22580,7 +23839,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "peer": true, "engines": { "node": ">=10.13.0" } @@ -22863,6 +24121,15 @@ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" }, + "node_modules/xz-decompress": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/xz-decompress/-/xz-decompress-0.2.3.tgz", + "integrity": "sha512-O8v6HG8T0PrKBcpyWA13GkSYWFvncwzuzcLx5A7++l3HsE3atmoetXjIxrZ/JV/nbvSZ7WS4+3XvREZuVn+rEA==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -22943,7 +24210,6 @@ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "optional": true, - "peer": true, "engines": { "node": ">=6" } @@ -22964,6 +24230,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "peer": true, "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", diff --git a/package.json b/package.json index fc7a9f768..4306b1c9b 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,8 @@ "@databiosphere/findable-ui": "^46.0.0", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", + "@jbrowse/product-core": "^3.6.5", + "@jbrowse/react-linear-genome-view2": "^3.6.5", "@mdx-js/loader": "^3.0.1", "@mdx-js/react": "^3.0.1", "@mui/icons-material": "^7.0.1", diff --git a/pages/browser/[entityId]/index.tsx b/pages/browser/[entityId]/index.tsx new file mode 100644 index 000000000..3c7dcd4e6 --- /dev/null +++ b/pages/browser/[entityId]/index.tsx @@ -0,0 +1,140 @@ +import { EntityConfig } from "@databiosphere/findable-ui/lib/config/entities"; +import { getEntityConfig } from "@databiosphere/findable-ui/lib/config/utils"; +import { GetStaticPaths, GetStaticProps, GetStaticPropsContext } from "next"; +import { ParsedUrlQuery } from "querystring"; +import { BRCDataCatalogGenome } from "../../../app/apis/catalog/brc-analytics-catalog/common/entities"; +import { GA2AssemblyEntity } from "../../../app/apis/catalog/ga2/entities"; +import { config } from "../../../app/config/config"; +import { StyledBrowserMain } from "../../../app/components/Layout/components/Main/main.styles"; +import { BrowserView } from "../../../app/views/BrowserView/browserView"; +import { getEntity } from "../../../app/utils/entityUtils"; +import { seedDatabase } from "../../../app/utils/seedDatabase"; +import { getEntities } from "../../../app/utils/entityUtils"; +import { EntitiesResponse } from "../../../app/apis/catalog/brc-analytics-catalog/common/entities"; + +interface PageUrl extends ParsedUrlQuery { + entityId: string; +} + +export interface BrowserPageProps { + assembly: BRCDataCatalogGenome | GA2AssemblyEntity; + entityId: string; +} + +/** + * Browser page component for displaying JBrowse genome browser. + * @param props - Browser page props. + * @returns Browser view component. + */ +const BrowserPage = (props: BrowserPageProps): JSX.Element => { + console.log(props); + return ; +}; + +/** + * Generate static paths for all assemblies that have JBrowse configs. + * @returns Promise with paths array. + */ +export const getStaticPaths: GetStaticPaths = async () => { + const appConfig = config(); + const { entities } = appConfig; + + // Find the assemblies entity config + const entityConfig = getEntityConfig(entities, "assemblies"); + + // Seed the database before fetching entities + await seedDatabase("assemblies", entityConfig); + + // Fetch all assemblies + const entitiesResponse: EntitiesResponse< + BRCDataCatalogGenome | GA2AssemblyEntity + > = await getEntities(entityConfig); + + // Build paths only for assemblies with JBrowse configs + const paths = entitiesResponse.hits + .filter((assembly) => assembly.jbrowseConfigUrl) + .map((assembly) => { + const entityId = entityConfig.getId?.(assembly); + return { + params: { + entityId: entityId as string, + }, + }; + }); + + console.log( + `[getStaticPaths....] Generating ${paths.length} browser pages:`, + paths.map((p) => `/browser/${p.params.entityId}`) + ); + + return { + fallback: false, + paths, + }; +}; + +/** + * Get static props for specific assembly browser page. + * @param context - GetStaticPropsContext with params. + * @param context.params - URL parameters containing entityId. + * @returns Props for the page or notFound. + */ +export const getStaticProps: GetStaticProps = async ({ + params, +}: GetStaticPropsContext) => { + if (!params || typeof params.entityId !== "string") { + return { notFound: true }; + } + console.log("PROPS"); + const { entityId } = params as PageUrl; + const appConfig = config(); + const { entities } = appConfig; + + const entityConfig = getEntityConfig(entities, "assemblies"); + + // Process assembly props (conditionally loads data based on staticLoad config) + const assembly = await processAssemblyProps(entityConfig, entityId); + + // Return 404 if assembly not found or has no JBrowse config + if (!assembly || !assembly.jbrowseConfigUrl) { + return { notFound: true }; + } + + return { + props: { + assembly, + entityId, + }, + }; +}; + +/** + * Processes the assembly props for the browser page. + * Only loads data if staticLoad is enabled in entity config. + * @param entityConfig - Entity config for assemblies. + * @param entityId - Assembly ID to fetch. + * @returns The assembly data or null if not found or staticLoad is disabled. + */ +async function processAssemblyProps( + entityConfig: EntityConfig, + entityId: string +): Promise { + const { + detail: { staticLoad }, + } = entityConfig; + // Early exit; return if the entity is not to be statically loaded. + if (!staticLoad) return null; + // Seed database. + await seedDatabase(entityConfig.route, entityConfig); + // Fetch entity detail from database. + const assembly = await getEntity( + entityConfig, + entityId + ); + return assembly; +} + +// Set custom Main component styling +BrowserPage.Main = StyledBrowserMain; + +export default BrowserPage; diff --git a/public/jbrowse-config/test_config.json b/public/jbrowse-config/test_config.json new file mode 100644 index 000000000..53bce8aee --- /dev/null +++ b/public/jbrowse-config/test_config.json @@ -0,0 +1,116 @@ +{ + "assembly": { + "name": "hg38", + "sequence": { + "type": "ReferenceSequenceTrack", + "trackId": "GRCh38-ReferenceSequenceTrack", + "adapter": { + "type": "BgzipFastaAdapter", + "uri": "https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz" + } + }, + "refNameAliases": { + "adapter": { + "type": "RefNameAliasAdapter", + "uri": "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/hg38_aliases.txt" + } + } + }, + "tracks": [ + { + "type": "FeatureTrack", + "trackId": "genes", + "name": "NCBI RefSeq Genes", + "assemblyNames": ["hg38"], + "category": ["Genes"], + "adapter": { + "type": "Gff3TabixAdapter", + "uri": "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/ncbi_refseq/GCA_000001405.15_GRCh38_full_analysis_set.refseq_annotation.sorted.gff.gz" + }, + "textSearching": { + "textSearchAdapter": { + "type": "TrixTextSearchAdapter", + "textSearchAdapterId": "gff3tabix_genes-index", + "uri": "https://jbrowse.org/genomes/GRCh38/ncbi_refseq/trix/GCA_000001405.15_GRCh38_full_analysis_set.refseq_annotation.sorted.gff.gz.ix", + "assemblyNames": ["GRCh38"] + } + } + }, + { + "type": "FeatureTrack", + "trackId": "repeats_hg38", + "name": "Repeats", + "assemblyNames": ["hg38"], + "category": ["Annotation"], + "adapter": { + "type": "BigBedAdapter", + "uri": "https://jbrowse.org/genomes/GRCh38/repeats.bb" + } + }, + { + "type": "AlignmentsTrack", + "trackId": "NA12878.alt_bwamem_GRCh38DH.20150826.CEU.exome", + "name": "NA12878 Exome", + "assemblyNames": ["hg38"], + "category": ["1000 Genomes", "Alignments"], + "adapter": { + "type": "CramAdapter", + "uri": "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/alignments/NA12878/NA12878.alt_bwamem_GRCh38DH.20150826.CEU.exome.cram", + "sequenceAdapter": { + "type": "BgzipFastaAdapter", + "uri": "https://jbrowse.org/genomes/GRCh38/fasta/hg38.prefix.fa.gz" + } + } + }, + { + "type": "VariantTrack", + "trackId": "ALL.wgs.shapeit2_integrated_snvindels_v2a.GRCh38.27022019.sites.vcf", + "name": "1000 Genomes Variant Calls", + "assemblyNames": ["hg38"], + "category": ["1000 Genomes", "Variants"], + "adapter": { + "type": "VcfTabixAdapter", + "uri": "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/variants/ALL.wgs.shapeit2_integrated_snvindels_v2a.GRCh38.27022019.sites.vcf.gz" + } + }, + { + "type": "QuantitativeTrack", + "trackId": "hg38.100way.phyloP100way", + "name": "hg38.100way.phyloP100way", + "category": ["Conservation"], + "assemblyNames": ["hg38"], + "adapter": { + "type": "BigWigAdapter", + "uri": "https://hgdownload.cse.ucsc.edu/goldenpath/hg38/phyloP100way/hg38.phyloP100way.bw" + } + }, + { + "type": "AlignmentsTrack", + "trackId": "skbr3_pacbio", + "name": "SKBR3 pacbio", + "assemblyNames": ["hg38"], + "adapter": { + "type": "BamAdapter", + "uri": "https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/skbr3/SKBR3_Feb17_GRCh38.sorted.bam" + } + } + ], + "defaultSession": { + "name": "this session", + "margin": 0, + "view": { + "id": "linearGenomeView", + "type": "LinearGenomeView", + "init": { + "assembly": "hg38", + "loc": "10:29,838,565..29,838,850", + "tracks": [ + "GRCh38-ReferenceSequenceTrack", + "NA12878.alt_bwamem_GRCh38DH.20150826.CEU.exome", + "hg38.100way.phyloP100way", + "ALL.wgs.shapeit2_integrated_snvindels_v2a.GRCh38.27022019.sites.vcf" + ] + } + } + } +} diff --git a/routes/constants.ts b/routes/constants.ts index 64f644920..a3cb08741 100644 --- a/routes/constants.ts +++ b/routes/constants.ts @@ -1,5 +1,6 @@ export const ROUTES = { ABOUT: "/about", + BROWSER: "/browser/{assemblyId}", CALENDAR: "/calendar", CONFIGURE_WORKFLOW: "/data/assemblies/{entityId}/{trsId}", GENOME: "/data/assemblies/{entityId}", diff --git a/site-config/ga2/local/theme/constants.ts b/site-config/ga2/local/theme/constants.ts index 2b4155605..cc4c5d1c0 100644 --- a/site-config/ga2/local/theme/constants.ts +++ b/site-config/ga2/local/theme/constants.ts @@ -1,4 +1,5 @@ -import { PaletteColorOptions, ThemeOptions, Palette } from "@mui/material"; +import { PaletteColorOptions, ThemeOptions } from "@mui/material"; +import { Palette } from "@mui/material/styles"; /** * Custom Palette "Brand" @@ -35,5 +36,5 @@ export const THEME_OPTIONS: ThemeOptions = { palette: { brand, primary, - }, + } as ThemeOptions["palette"], }; diff --git a/tests/analysisMethodCatalogs.utils.test.ts b/tests/analysisMethodCatalogs.utils.test.ts index 47b704d64..46e6fb797 100644 --- a/tests/analysisMethodCatalogs.utils.test.ts +++ b/tests/analysisMethodCatalogs.utils.test.ts @@ -81,6 +81,7 @@ describe("buildAssemblyWorkflows", () => { gcPercent: null, geneModelUrl: null, isRef: "Yes", + jbrowseConfigUrl: null, length: 0, level: "scaffold", lineageTaxonomyIds: ["999"],