diff --git a/anemui-core/assets/images/banner_logos.png b/anemui-core/assets/images/banner_logos.png new file mode 100644 index 0000000..2824b7d Binary files /dev/null and b/anemui-core/assets/images/banner_logos.png differ diff --git a/anemui-core/css/graphcontainer.scss b/anemui-core/css/graphcontainer.scss index 6ebcb06..5285e7a 100644 --- a/anemui-core/css/graphcontainer.scss +++ b/anemui-core/css/graphcontainer.scss @@ -1,18 +1,37 @@ div.GraphContainer { @include bgFrame(12px); - - position: absolute; + + position: fixed; left: 50%; - top: 30%; - transform: translate(-50%, -30%); + top: 50%; + transform: translate(-50%, -50%); padding: 0.8em 1.5em; - background-color: rgba(255, 255, 255, 1); + background-color: rgba(255, 255, 255, 0.98); background: white; color: #333; box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4); z-index: 2000; width: fit-content; - position: relative; + max-width: 90vw; + max-height: 85vh; + overflow: auto; + cursor: move; + + // Responsive para pantallas pequeñas + @media (max-width: 768px) { + left: 5%; + top: 10%; + transform: none; + max-width: 90vw; + padding: 0.5em 1em; + } + + @media (max-width: 480px) { + left: 2%; + top: 5%; + max-width: 96vw; + padding: 0.3em 0.5em; + } a.popup-close-button { position: absolute; @@ -67,7 +86,8 @@ div.GraphContainer { .dygraph-legend { text-align: center; - width: 1024px; + width: 100% !important; + max-width: 100%; background-color: transparent !important; left: 0px !important; } diff --git a/anemui-core/css/open-layers-map.scss b/anemui-core/css/open-layers-map.scss index 675b019..c6b0158 100644 --- a/anemui-core/css/open-layers-map.scss +++ b/anemui-core/css/open-layers-map.scss @@ -1,5 +1,12 @@ @import "~ol/ol.css"; +// Desactivar suavizado solo para la capa de incertidumbre +.uncertainty-layer canvas { + image-rendering: pixelated; + image-rendering: -moz-crisp-edges; + image-rendering: crisp-edges; +} + // .marker { // width: 20px; // height: 20px; diff --git a/anemui-core/css/sidebar.scss b/anemui-core/css/sidebar.scss index 1b24a93..523170f 100644 --- a/anemui-core/css/sidebar.scss +++ b/anemui-core/css/sidebar.scss @@ -580,16 +580,15 @@ ul .two-columns { /* --------------------------------------------------- SELECTORES DE CAPAS ----------------------------------------------------- */ - div.row.selectDiv{ - width: 260px; - margin: 0.45rem 0rem; + width: 240px; + margin: 0.45rem 0rem; } .uncDiv input.form-check-input { visibility: visible; margin: 0px auto; - width: 4rem !important; + width: 4rem !important; height: 2rem !important; background-color: $color_8; box-shadow: 0.5px 0.5px 3px $color_3; @@ -632,6 +631,11 @@ div.slider.visible { display: none; } +.uncDiv .inputDiv { + background-color: transparent !important; + box-shadow: none !important; +} + .closeDiv .icon { height: 30px; width: 30px; diff --git a/anemui-core/css/topbar.scss b/anemui-core/css/topbar.scss index 7642f12..df7bf5a 100644 --- a/anemui-core/css/topbar.scss +++ b/anemui-core/css/topbar.scss @@ -187,16 +187,22 @@ @include desktop { width: 45%; #title { - font-size: 1.2em; + font-size: 0.95em; padding: 0.7rem 1rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } } @include md-desktop { width: 40%; #title { - font-size: 1.5em; + font-size: 1.1em; font-weight: 600; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } } } @@ -514,6 +520,56 @@ input.selection-param-input { min-width: fit-content; } +// Contenedor del checkbox de incertidumbre +.inputDiv[role^="uncertainty-"] { + background: none !important; + box-shadow: none !important; + padding: 0 !important; + + &:hover { + background: none !important; + color: $color_10 !important; + } +} + +.menu-checkbox { + padding: 0; + margin-left: 15px; + display: flex; + align-items: center; + gap: 8px; + background: none !important; // Eliminar el fondo destacado + + .title { + white-space: nowrap; + font-size: 0.7em; + font-style: italic; + line-height: 1.2; + margin: 0; + padding: 0; + } + + .form-check { + margin: 0; + padding: 0; + display: flex; + align-items: center; + background: none !important; + + .form-check-input { + margin: 0; + cursor: pointer; + width: 2.5em; + height: 1.25em; + + &:focus { + box-shadow: none; + border-color: #0d6efd; + } + } + } +} + .menu-input { width: 150px !important; min-width: 150px !important; diff --git a/anemui-core/env/env.js b/anemui-core/env/env.js index 6a7918f..9ed210a 100644 --- a/anemui-core/env/env.js +++ b/anemui-core/env/env.js @@ -5,7 +5,8 @@ module.exports={ isTileDebugEnabled:false, mapboxMapID:'b0rja/clo334xwq00jn01r28vwe1h6k', mapboxAccessToken:'pk.eyJ1IjoiYjByamEiLCJhIjoiY2s5NjhvYjlkMGRsczNlbDQ3YXhvZTBvZyJ9.S3-_Wjl7BXcCLDOXNSbr_A', - logo:'logo_aemet.png', + // logo:'logo_aemet.png', + logo:'banner_logos.png', initialZoom:6, ncSignif:7, dataSource: 'nc' // 'nc' or 'zarr' diff --git a/anemui-core/package.json b/anemui-core/package.json index ed47290..9ceff35 100644 --- a/anemui-core/package.json +++ b/anemui-core/package.json @@ -1,6 +1,6 @@ { "name": "@lcsc/anemui-core", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3-SNAPSHOT", "description": "Climatic Services Viewer Core", "main": "./src/index.ts", "types": "./src/index.ts", @@ -82,6 +82,6 @@ "zarr": "^0.6.3" }, "devDependencies": { - "@lcsc/anemui-test": ">=0.1.0-20250826" + "@lcsc/anemui-test": ">=0.2.3-202512180942" } } diff --git a/anemui-core/src/BaseApp.ts b/anemui-core/src/BaseApp.ts index d1b3bfe..659a53b 100644 --- a/anemui-core/src/BaseApp.ts +++ b/anemui-core/src/BaseApp.ts @@ -1,10 +1,10 @@ import { addChild, mount } from "tsx-create-element"; import { MainFrame } from "./ui/MainFrame"; -import { MenuBar, MenuBarListener } from './ui/MenuBar'; +import { MenuBar, MenuBarListener } from './ui/MenuBar'; import { CsMap } from "./CsMap"; import { DownloadFrame, DownloadIframe, DownloadOptionsDiv } from "./ui/DownloadFrame"; import LayerFrame from './ui/LayerFrame' -import PaletteFrame from "./ui/PaletteFrame"; +import PaletteFrame from "./ui/PaletteFrame"; import { CsLatLong, CsMapEvent, CsMapListener } from "./CsMapTypes"; import { DateSelectorFrame, DateFrameListener } from "./ui/DateFrame"; import { loadLatLongData } from "./data/CsDataLoader"; @@ -17,13 +17,12 @@ import { downloadTCSVChunked } from "./data/ChunkDownloader"; import { DEF_STYLE_STATIONS, CsOpenLayerGeoJsonLayer, OpenLayerMap } from "./OpenLayersMap"; import { LoginFrame } from "./ui/LoginFrame"; import { PaletteManager } from "./PaletteManager"; -import { ElementManager } from "./ElementManager"; import { fromLonLat } from "ol/proj"; import Dygraph from "dygraphs"; import { Style } from 'ol/style.js'; import { FeatureLike } from "ol/Feature"; -import LeftBar from "./ui/LeftBar"; -import RightBar from "./ui/RightBar"; +import LeftBar from "./ui/LeftBar"; +import RightBar from "./ui/RightBar"; import Language from "./language/language"; import { renderers, folders, defaultRenderer } from "./tiles/Support"; import CsCookies from "./cookies/CsCookies"; @@ -81,7 +80,6 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra protected graph: CsGraph protected infoFrame: InfoFrame protected loginFrame: LoginFrame - protected elementManager: ElementManager protected state: CsViewerData; protected timesJs: CsTimesJsData; @@ -580,7 +578,7 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra //TODO on change let timeSpan = this.getTimeSpan(_timesJs.times[varId]) // let timeIndex = typeof _timesJs.times[varId] === 'string'? 0:_timesJs.times[varId].length - 1 - let timeIndex = timeSpan == CsTimeSpan.Year? 0:_timesJs.times[varId].length - 1 + let timeIndex = timeSpan == CsTimeSpan.Year? 0 : _timesJs.times[varId].length - 1 let legendTitle: string; if (_timesJs.legendTitle[varId] != undefined) { legendTitle = _timesJs.legendTitle[varId] @@ -594,8 +592,8 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra varName = varId } - let uncertainty = _timesJs.times[varId + UNCERTAINTY_LAYER] != undefined - + let uncertainty = _timesJs.times[varId + UNCERTAINTY_LAYER] != undefined + if (this.state == undefined) this.state = INITIAL_STATE; this.state = { ...this.state, @@ -618,6 +616,7 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra public getTimeSpan (time:string[]): CsTimeSpan { if(typeof time === 'string') return CsTimeSpan.Year let number + let yearCount = 1 if (time.length<=12) number = time.length else { const result = time.reduce((acc, curr) => { @@ -627,15 +626,25 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra } return acc; }, []); + yearCount = result.length number = time.length / result.length; } + // Caso especial: si hay exactamente 365 o 366 elementos totales, es día juliano + // independientemente de si las fechas cruzan dos años + if (time.length === 365 || time.length === 366) { + return CsTimeSpan.Day; + } + switch (number) { - case 1: - return CsTimeSpan.Year; + case 1: + return yearCount > 1 ? CsTimeSpan.YearSeries : CsTimeSpan.Year; case 4: return CsTimeSpan.Season; case 12: return CsTimeSpan.Month; + case 365: + case 366: + return CsTimeSpan.Day; default: return CsTimeSpan.Date; } @@ -681,24 +690,25 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra try { this.menuBar.update(); this.leftBar.update(); - this.csMap.updateDate(this.state.selectedTimeIndex, this.state); + await this.csMap.updateDate(this.state.selectedTimeIndex, this.state); this.csMap.updateRender(this.state.support); - + // Wait for data only if we have computed data tiles layer - if (computedDataTilesLayer && this.state.computedLayer) { + if (computedDataTilesLayer && this.state.computedLayer) { await this.waitForDataLoad(); } - + if (!dateChanged) this.dateSelectorFrame.update(); this.paletteFrame.update(); this.layerFrame.update(); this.changeUrl(); - + } catch (error) { console.error('Error during update:', error); // Continue with update even if there's an error if (!dateChanged) this.dateSelectorFrame.update(); this.paletteFrame.update(); + this.layerFrame.update(); this.changeUrl(); } } @@ -777,14 +787,37 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra this.csMap.refreshFeatureLayer() } + /** + * Verifica si estamos en modo climatología con ciclo temporal (mensual o estacional) + */ + protected isClimatologyCyclicMode(): boolean { + return this.state.climatology && + (this.state.timeSpan === CsTimeSpan.Day || this.state.timeSpan === CsTimeSpan.Month || this.state.timeSpan === CsTimeSpan.Season); + } + public dateDateBack(): void { - if (this.state.selectedTimeIndex == 0) return; - this.state.selectedTimeIndex--; + if (this.state.selectedTimeIndex == 0) { + if (this.isClimatologyCyclicMode()) { + this.state.selectedTimeIndex = this.state.times.length - 1; + } else { + return; + } + } else { + this.state.selectedTimeIndex--; + } this.update() } + public dateDateForward(): void { - if (this.state.selectedTimeIndex == this.state.times.length - 1) return; - this.state.selectedTimeIndex++; + if (this.state.selectedTimeIndex == this.state.times.length - 1) { + if (this.isClimatologyCyclicMode()) { + this.state.selectedTimeIndex = 0; + } else { + return; + } + } else { + this.state.selectedTimeIndex++; + } this.update() } @@ -955,6 +988,16 @@ export abstract class BaseApp implements CsMapListener, MenuBarListener, DateFra } public showPercentileClockForPoint(latlng: CsLatLong, currentValue: number, historicalData: number[]): void { - + + } + + /** + * Resetea la capa de incertidumbre: la oculta y desactiva el checkbox + * Útil cuando se cambia de contexto (ej: cambiar horizonte de predicción) + * Usa el método toggleUncertaintyLayer del MenuBar para mantener consistencia + */ + public resetUncertaintyLayer(): void { + // Llamar al método del MenuBar que coordina todo el comportamiento + this.getMenuBar().toggleUncertaintyLayer(false); } } diff --git a/anemui-core/src/CsMap.tsx b/anemui-core/src/CsMap.tsx index 121a3e2..994703d 100644 --- a/anemui-core/src/CsMap.tsx +++ b/anemui-core/src/CsMap.tsx @@ -124,8 +124,8 @@ public onMapClick(event: CsMapEvent): void { this.controller.putMarker(latLong); } - public updateDate(selectedTimeIndex: number, state: CsViewerData) { - this.controller.setDate(selectedTimeIndex,state); + public async updateDate(selectedTimeIndex: number, state: CsViewerData): Promise { + await this.controller.setDate(selectedTimeIndex,state); } public getParent():BaseApp{ diff --git a/anemui-core/src/ElementManager.ts b/anemui-core/src/ElementManager.ts deleted file mode 100644 index 0e97a50..0000000 --- a/anemui-core/src/ElementManager.ts +++ /dev/null @@ -1,348 +0,0 @@ -export type ElementState = 'enabled' | 'disabled' | 'removed'; - -export interface Element { - id: number; - name: string; - state: ElementState; -} - -export interface GenericTitle { - id: string; - title: string; - value: any; - enabled: boolean; - category?: string; -} - -export interface DropdownItem { - id: string; - label: string; - value: any; - disabled?: boolean; - category?: string; -} - -// ******* elementos fijos para soporte temporal. El resto de items del menú tienen elementos configurables -export const initialElements: Element[] = [ - { id: 0, name: "Puntual (estaciones)", state: "removed" }, - { id: 1, name: "Rejilla", state: "enabled" }, - { id: 2, name: "Municipio", state: "removed" }, - { id: 3, name: "Provincia", state: "removed" }, - { id: 4, name: "CCAA", state: "removed" }, - { id: 5, name: "Unidad administrativa", state: "removed" } -]; - -// ******* Carpetas donde se van a buscar los ficheros correspondientes a cada elemento de soporte temporal -export const folders = { - element: [0,2,3,4,5,5,5], - folder: ["estacion","municipio","provincia","autonomia","municipio","provincia","autonomia"], -}; - -export class ElementManager { - private elements: Element[]; - private defaultElement: string; - private genericTitles: Map = new Map(); - - constructor() { - this.elements = JSON.parse(JSON.stringify(initialElements)); - this.defaultElement = this.elements[1].name; // Initialize in constructor - } - - /** - * Habilita, deshabilita o elimina elements. - * @param rd Array de IDs de elements a modificar. - * @param remove Si es true, los elements se eliminan; si es false, se deshabilitan. - */ - public setElements(rd: number[] = [], remove: boolean = false): Element[] { - if (rd.length > 0) { - rd.forEach(id => this.enableElement(id)); - } else { - this.elements.forEach(element => { - if (element.state === 'disabled' || element.state === 'removed') { - if (remove) { - this.removeElement(element.id); - } else { - this.disableElement(element.id); - } - } - }); - } - return this.elements; - } - - /** - * Obtiene todos los elements con su estado actual. - * @returns Array de objetos Element. - */ - public getElements(): Element[] { - return this.elements; - } - - /** - * Obtiene solo los elementos habilitados como objetos Element. - * @returns Array de objetos Element que están habilitados. - */ - public getEnabledElements(): Element[] { - return this.elements.filter(element => element.state === 'enabled'); - } - - /** - * Obtiene el nombre del element por defecto. - * @returns Nombre del element por defecto. - */ - public getDefaultElement(): string { - return this.defaultElement; - } - - /** - * Habilita un element específico por su ID. - * @param id El ID del element a habilitar. - */ - public enableElement(id: number): void { - const element = this.elements.find(r => r.id === id); - if (element && element.state !== 'enabled') { - element.state = 'enabled'; - } - } - - /** - * Deshabilita un element específico por su ID. - * @param id El ID del element a deshabilitar. - */ - public disableElement(id: number): void { - const element = this.elements.find(r => r.id === id); - if (element && element.state !== 'disabled') { - element.state = 'disabled'; - } - } - - /** - * Marca un element específico como eliminado por su ID. - * @param id El ID del element a eliminar. - */ - public removeElement(id: number): void { - const element = this.elements.find(r => r.id === id); - if (element && element.state !== 'removed') { - element.state = 'removed'; - } - } - - /** - * Obtiene los nombres de las carpetas asociadas a un element dado su nombre. - * @param elementName El nombre del element. - * @returns Array de nombres de carpetas. - */ - public getFolders(elementName: string): string[] { - const element = this.elements.find(r => r.name === elementName && r.state !== 'removed'); - if (!element) { - return []; // Element no encontrado o eliminado - } - - const folderIds: string[] = []; - for (let i = 0; i < folders.element.length; i++) { - if (folders.element[i] === element.id) { - folderIds.push(folders.folder[i]); - } - } - return folderIds; - } - - /** - * Registra un título genérico para uso en desplegables. - * @param title Objeto GenericTitle a registrar. - */ - public registerGenericTitle(title: GenericTitle): void { - this.genericTitles.set(title.id, title); - } - - /** - * Actualiza un título genérico existente. - * @param id ID del título a actualizar. - * @param updates Propiedades a actualizar. - */ - public updateGenericTitle(id: string, updates: Partial): boolean { - const title = this.genericTitles.get(id); - if (title) { - Object.assign(title, updates); - this.genericTitles.set(id, title); - return true; - } - return false; - } - - /** - * Elimina un título genérico. - * @param id ID del título a eliminar. - */ - public removeGenericTitle(id: string): boolean { - const removed = this.genericTitles.delete(id); - if (removed) { - } - return removed; - } - - /** - * Habilita o deshabilita un título genérico. - * @param id ID del título. - * @param enabled Estado a establecer. - */ - public setGenericTitleEnabled(id: string, enabled: boolean): boolean { - const title = this.genericTitles.get(id); - if (title) { - title.enabled = enabled; - return true; - } - return false; - } - - /** - * Obtiene todos los títulos genéricos. - * @returns Array de GenericTitle. - */ - public getGenericTitles(): GenericTitle[] { - return Array.from(this.genericTitles.values()); - } - - /** - * Obtiene títulos genéricos habilitados filtrados por categoría. - * @param category Categoría opcional para filtrar. - * @returns Array de GenericTitle habilitados. - */ - public getEnabledGenericTitles(category?: string): GenericTitle[] { - return this.getGenericTitles().filter(title => - title.enabled && (!category || title.category === category) - ); - } - - /** - * Convierte títulos genéricos a elementos de desplegable. - * @param category Categoría opcional para filtrar. - * @returns Array de DropdownItem. - */ - public getDropdownItems(category?: string): DropdownItem[] { - return this.getEnabledGenericTitles(category).map(title => ({ - id: title.id, - label: title.title, - value: title.value, - disabled: !title.enabled, - category: title.category - })); - } - - /** - * Convierte elements habilitados a elementos de desplegable. - * @returns Array de DropdownItem para elements. - */ - public getElementDropdownItems(): DropdownItem[] { - return this.elements - .filter(element => element.state === 'enabled') - .map(element => ({ - id: element.id.toString(), - label: element.name, - value: element.id, - disabled: false, - category: 'element' - })); - } - - /** - * Obtiene un título genérico por su ID. - * @param id ID del título. - * @returns GenericTitle o undefined si no existe. - */ - public getGenericTitleById(id: string): GenericTitle | undefined { - return this.genericTitles.get(id); - } - - /** - * Convierte títulos genéricos a formato compatible con CsMenuItem. - * Usa ~ para disabled y - para removed. - * @param category Categoría opcional para filtrar. - * @returns Array de strings con prefijos para CsMenuItem. - */ - public getCsMenuItemValues(category?: string): string[] { - return this.getGenericTitles() - .filter(title => !category || title.category === category) - .map(title => { - if (!title.enabled) { - return `~${title.title}`; - } - return title.title; - }); - } - - /** - * Convierte elements a formato compatible con CsMenuItem. - * @returns Array de strings con prefijos según el estado del element. - */ - public getCsMenuItemElementValues(): string[] { - return this.elements.map(element => { - switch (element.state) { - case 'disabled': - return `~${element.name}`; - case 'removed': - return `-${element.name}`; - case 'enabled': - default: - return element.name; - } - }); - } - - /** - * Obtiene los nombres de todos los elementos como strings sin filtrar por estado. - * Este método es equivalente a getRenderers() en BaseApp para compatibilidad. - * @returns Array de nombres de elementos sin prefijos de estado. - */ - public getAllElementNames(): string[] { - return this.elements.map(element => element.name); - } - - /** - * Convierte títulos genéricos y elements combinados a formato CsMenuItem. - * @param includeElements Si incluir elements en la lista. - * @param category Categoría opcional para filtrar títulos genéricos. - * @returns Array de strings con prefijos para CsMenuItem. - */ - public getCombinedCsMenuItemValues(includeElements: boolean = true, category?: string): string[] { - const genericValues = this.getCsMenuItemValues(category); - - if (includeElements) { - const elementValues = this.getCsMenuItemElementValues(); - return [...elementValues, ...genericValues]; - } - - return genericValues; - } - - /** - * Obtiene el valor seleccionado sin prefijos de estado. - * @param rawValue Valor con posibles prefijos ~ o -. - * @returns Valor limpio sin prefijos. - */ - public getCleanValue(rawValue: string): string { - if (rawValue.startsWith('~') || rawValue.startsWith('-')) { - return rawValue.substring(1); - } - return rawValue; - } - - /** - * Busca un título genérico por su nombre limpio. - * @param cleanName Nombre sin prefijos. - * @returns GenericTitle o undefined si no existe. - */ - public getGenericTitleByName(cleanName: string): GenericTitle | undefined { - return Array.from(this.genericTitles.values()) - .find(title => title.title === cleanName); - } - - /** - * Busca un element por su nombre limpio. - * @param cleanName Nombre sin prefijos. - * @returns Element o undefined si no existe. - */ - public getElementByName(cleanName: string): Element | undefined { - return this.elements.find(element => element.name === cleanName); - } -} \ No newline at end of file diff --git a/anemui-core/src/Env.ts b/anemui-core/src/Env.ts index 0156c79..afaa701 100644 --- a/anemui-core/src/Env.ts +++ b/anemui-core/src/Env.ts @@ -48,6 +48,7 @@ export const hasClimatology:boolean = typeof ENV.hasClimatology !== 'undefined'? export const logoStyle:string = typeof ENV.logoStyle !== 'undefined'? ENV.logoStyle:'longLogo'; export const maxPaletteValue = ENV.maxPaletteValue !== 'undefined'? ENV.maxPaletteValue:1000; export const maxPaletteSteps = ENV.maxPaletteSteps !== 'undefined'? ENV.maxPaletteSteps:10; +export const globalMap = ENV.globalMap !== 'undefined'? ENV.globalMap:false; // Factory Method Pattern // true = usar factory method (permite override en subclases) diff --git a/anemui-core/src/LayerManager.ts b/anemui-core/src/LayerManager.ts index 5d1c433..ac8eb40 100644 --- a/anemui-core/src/LayerManager.ts +++ b/anemui-core/src/LayerManager.ts @@ -69,6 +69,7 @@ export class LayerManager { private topLayerVector:Layer; private topLayerImage:Image; protected uncertaintyLayer: (Image | WebGLTile)[]; + private uncertaintyLayerVisible: boolean = false; private constructor() { // CAPAS BASE @@ -98,6 +99,7 @@ export class LayerManager { this.topSelected="Límites estatales (mapbox)"; this.uncertaintyLayer = []; + this.uncertaintyLayerVisible = false; } // Base Layer @@ -253,11 +255,19 @@ export class LayerManager { } public getUncertaintyLayer():(Image | WebGLTile)[] { - this.uncertaintyLayer = []; return this.uncertaintyLayer; } + public setUncertaintyLayer(layers: (Image | WebGLTile)[]) { + this.uncertaintyLayer = layers; + } + public showUncertaintyLayer(show: boolean) { - this.uncertaintyLayer[0].setVisible(show); + if (this.uncertaintyLayer && this.uncertaintyLayer.length > 0) { + this.uncertaintyLayer.forEach((layer) => { + layer.setVisible(show); + layer.changed(); // Forzar re-renderizado + }); + } } } \ No newline at end of file diff --git a/anemui-core/src/OpenLayersMap.ts b/anemui-core/src/OpenLayersMap.ts index f1c79e0..f0f90b1 100644 --- a/anemui-core/src/OpenLayersMap.ts +++ b/anemui-core/src/OpenLayersMap.ts @@ -12,7 +12,7 @@ import { PaletteManager } from "./PaletteManager"; import { isTileDebugEnabled, isWmsEnabled, olProjection, initialZoom, computedDataTilesLayer } from "./Env"; import proj4 from 'proj4'; import { register } from 'ol/proj/proj4.js'; -import { buildImages, downloadXYChunk, CsvDownloadDone, downloadXYbyRegion, getPortionForPoint, downloadHistoricalDataForPercentile, calcPixelIndex, downloadTArrayChunked } from "./data/ChunkDownloader"; +import { buildImages, downloadXYChunk, CsvDownloadDone, downloadXYbyRegion, getPortionForPoint, downloadHistoricalDataForPercentile, calcPixelIndex, downloadTArrayChunked, downloadXYbyRegionMultiPortion } from "./data/ChunkDownloader"; import VectorSource from "ol/source/Vector"; import VectorLayer from "ol/layer/Vector"; import { Circle as CircleStyle, Fill, Stroke, Style } from 'ol/style.js'; @@ -118,14 +118,14 @@ protected setExtents(timesJs: CsTimesJsData, varId: string): void { timesJs.portions[varId].forEach((portion: string, index, array) => { let selector = varId + portion; let pxSize: number = (timesJs.lonMax[selector] - timesJs.lonMin[selector]) / (timesJs.lonNum[selector] - 1); - + const dataExtent = [ - timesJs.lonMin[selector] - pxSize / 2, - timesJs.latMin[selector] - pxSize / 2, - timesJs.lonMax[selector] + pxSize / 2, + timesJs.lonMin[selector] - pxSize / 2, + timesJs.latMin[selector] - pxSize / 2, + timesJs.lonMax[selector] + pxSize / 2, timesJs.latMax[selector] + pxSize / 2 ]; - + // Si el mapa está en una proyección diferente, transformar if (timesJs.projection !== olProjection) { const transformedExtent = transformExtent( @@ -140,6 +140,38 @@ protected setExtents(timesJs: CsTimesJsData, varId: string): void { }); } +/** + * Ajusta la vista inicial del mapa para mostrar todo el territorio español + * (Península, Baleares y Canarias) adaptándose al tamaño de la pantalla + */ +protected fitInitialView(timesJs: CsTimesJsData, varId: string): void { + // Calcular el extent combinado de todas las porciones + let combinedExtent: [number, number, number, number] | null = null; + + timesJs.portions[varId].forEach((portion: string) => { + const extent = this.ncExtents[portion]; + if (extent) { + if (!combinedExtent) { + combinedExtent = [...extent] as [number, number, number, number]; + } else { + // Expandir el extent para incluir esta porción + combinedExtent[0] = Math.min(combinedExtent[0], extent[0]); // minX + combinedExtent[1] = Math.min(combinedExtent[1], extent[1]); // minY + combinedExtent[2] = Math.max(combinedExtent[2], extent[2]); // maxX + combinedExtent[3] = Math.max(combinedExtent[3], extent[3]); // maxY + } + } + }); + + // Ajustar la vista para mostrar el extent combinado + if (combinedExtent && this.map) { + this.map.getView().fit(combinedExtent, { + padding: [50, 50, 50, 50], // Padding en píxeles alrededor del extent + duration: 0 // Sin animación en la carga inicial + }); + } +} + init(_parent: CsMap): void { this.parent = _parent; @@ -162,6 +194,9 @@ protected setExtents(timesJs: CsTimesJsData, varId: string): void { }; this.map = new Map(options); + + // Ajustar la vista inicial para mostrar todo el territorio español + this.fitInitialView(timesJs, state.varId); let self = this; this.map.on('movestart', event => { self.onDragStart(event) }) this.map.on('loadend', () => { self.onMapLoaded() }) @@ -187,7 +222,6 @@ protected setExtents(timesJs: CsTimesJsData, varId: string): void { this.buildFeatureLayers(); if (!isWmsEnabled) { this.buildDataTilesLayers(state, timesJs); - if (state.uncertaintyLayer) this.buildUncertaintyLayer(state, timesJs); } } @@ -430,15 +464,22 @@ private shouldShowPercentileClock(state: CsViewerData): boolean { } -public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { +public async buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): Promise { let app = window.CsViewerApp; - + this.safelyRemoveDataLayers(); this.dataTilesLayer = []; + // Si la capa de incertidumbre está activa, reconstruirla con el nuevo varId + if (state.uncertaintyLayer) { + this.safelyRemoveUncertaintyLayers(); + // Esperar a que se construyan las capas de incertidumbre + await this.buildUncertaintyLayer(state, timesJs); + } + if (!timesJs.portions[state.varId]) { console.warn('No portions found for varId:', state.varId); return; @@ -532,14 +573,15 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { } // Fix for uncertainty layer with proper initialization - public buildUncertaintyLayer(state: CsViewerData, timesJs: CsTimesJsData): void { + public async buildUncertaintyLayer(state: CsViewerData, timesJs: CsTimesJsData): Promise { let lmgr = LayerManager.getInstance(); let app = window.CsViewerApp; // Safely remove existing uncertainty layers this.safelyRemoveUncertaintyLayers(); - this.uncertaintyLayer = lmgr.getUncertaintyLayer() || []; + // Siempre empezar con un array limpio + this.uncertaintyLayer = []; const uncertaintyVarId = state.varId + '_uncertainty'; if (!timesJs.portions[uncertaintyVarId]) { @@ -549,10 +591,11 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { timesJs.portions[uncertaintyVarId].forEach((portion: string, index, array) => { let imageLayer: ImageLayer = new ImageLayer({ - visible: true, + visible: false, opacity: 1.0, - zIndex: 100, - source: null + zIndex: 2000, // Entre capas de datos (100) y capa política (5000) + source: null, + className: 'uncertainty-layer' // Agregar clase CSS para la capa de incertidumbre }); if (imageLayer) { @@ -577,7 +620,11 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { }); if (this.uncertaintyLayer.length > 0 && promises.length > 0) { - buildImages(promises, this.uncertaintyLayer, state, timesJs, app, this.ncExtents, true); + // Esperar a que se construyan las imágenes antes de registrar las capas + await buildImages(promises, this.uncertaintyLayer, state, timesJs, app, this.ncExtents, true); + + // Registrar las capas en LayerManager después de construirlas + lmgr.setUncertaintyLayer(this.uncertaintyLayer); lmgr.showUncertaintyLayer(false); } } @@ -601,6 +648,8 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { }); } this.uncertaintyLayer = []; + // Limpiar también el array en LayerManager + LayerManager.getInstance().setUncertaintyLayer([]); } public buildFeatureLayers () { @@ -623,8 +672,7 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { } ) } - // Fix for setDate method - public setDate(dateIndex: number, state: CsViewerData): void { + public async setDate(dateIndex: number, state: CsViewerData): Promise { try { if (isWmsEnabled) { if (this.dataWMSLayer) { @@ -636,14 +684,7 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { this.dataWMSLayer.refresh(); } } else { - this.buildDataTilesLayers(state, this.parent.getParent().getTimesJs()); - - // Safely remove uncertainty layers - this.safelyRemoveUncertaintyLayers(); - - if (state.uncertaintyLayer) { - this.buildUncertaintyLayer(state, this.parent.getParent().getTimesJs()); - } + await this.buildDataTilesLayers(state, this.parent.getParent().getTimesJs()); } } catch (error) { console.error('Error in setDate:', error); @@ -797,31 +838,52 @@ public buildDataTilesLayers(state: CsViewerData, timesJs: CsTimesJsData): void { } } - async initializeFeatureLayer(time: string, timeIndex: number, folder: string, varName: string): Promise { +async initializeFeatureLayer(time: string, timeIndex: number, folder: string, varName: string): Promise { return new Promise((resolve, reject) => { - let openSt: CsvDownloadDone = (data: any, filename: string, type: string) => { - if (this.featureLayer) { - this.featureLayer.indexData = data; - if (this.featureLayer.show) { - this.featureLayer.show(this.renderers.indexOf(this.lastSupport)); - } - resolve(); + let openSt: CsvDownloadDone = (data: any, filename: string, type: string) => { + if (this.featureLayer) { + this.featureLayer.indexData = data; + if (this.featureLayer.show) { + this.featureLayer.show(this.renderers.indexOf(this.lastSupport)); + } + resolve(); + } else { + console.error("featureLayer is undefined in initializeFeatureLayer callback"); + reject("featureLayer is undefined"); + } + }; + + // Detectar si hay múltiples porciones + const timesJs = this.parent.getParent().getTimesJs(); + const portions = timesJs.portions[varName] || []; + + + // Si hay múltiples porciones, usar la función que combina + if (portions.length > 1) { + + // Importar la función desde ChunkDownloader + const { downloadXYbyRegionMultiPortion } = require('./data/ChunkDownloader'); + + downloadXYbyRegionMultiPortion( + time, + timeIndex, + folder, + varName, + portions, + openSt + ); } else { - console.error("featureLayer is undefined in initializeFeatureLayer callback"); - reject("featureLayer is undefined"); + + if (computedDataTilesLayer) { + // Build calculated Layer + this.computeFeatureLayerData(time, folder, varName, openSt); + } else { + // Download and build new data layers + downloadXYbyRegion(time, timeIndex, folder, varName, openSt); + } } - }; - - if (computedDataTilesLayer) { - // Build calculated Layer - this.computeFeatureLayerData(time, folder, varName, openSt); - } else { - // Download and build new data layers - downloadXYbyRegion(time, timeIndex, folder, varName, openSt); - } - }); - } +} private setupInteractions(): void { if (this.selectInteraction) { @@ -1153,44 +1215,73 @@ export class CsOpenLayerGeoJsonLayer extends CsGeoJsonLayer { return new Style({ image: imgStation, }) } - public setFeatureStyle(state: CsViewerData, feature: Feature, timesJs: CsTimesJsData): Style { +public setFeatureStyle(state: CsViewerData, feature: Feature, timesJs: CsTimesJsData): Style { let min: number = Number.MAX_VALUE; let max: number = Number.MIN_VALUE; Object.values(this.indexData).forEach((value) => { - if (!isNaN(value)) { - min = Math.min(min, value); - max = Math.max(max, value); - } + if (!isNaN(value)) { + min = Math.min(min, value); + max = Math.max(max, value); + } }); let color: string = '#fff'; let id = feature.getProperties()['id']; let id_ant = feature.getProperties()['id_ant']; + let name = feature.getProperties()['name']; let ptr = PaletteManager.getInstance().getPainter(); - // Use exact match instead of includes to avoid matching '1' with '10', '11', etc. - // Try with new id first, fallback to old id_ant if not found - let dataValue = this.indexData[id]; - if (dataValue === undefined && id_ant !== undefined) { - dataValue = this.indexData[id_ant]; + if (id === null || id === undefined) { + const isHovered = feature.get('hover'); + if (isHovered) this.map.getTargetElement().style.cursor = 'pointer'; + else this.map.getTargetElement().style.cursor = ''; + + return new Style({ + fill: new Fill({ color: '#ffffff00' }), // Transparente + stroke: new Stroke({ + color: '#999', + }), + }); + } + + let dataValue = undefined; + + if (this.indexData[id] !== undefined) { + dataValue = this.indexData[id]; + } + else if (id_ant && this.indexData[id_ant] !== undefined) { + dataValue = this.indexData[id_ant]; + } + else if (id.length === 1 && this.indexData['0' + id] !== undefined) { + dataValue = this.indexData['0' + id]; + } + else if (id.startsWith('0') && this.indexData[id.substring(1)] !== undefined) { + dataValue = this.indexData[id.substring(1)]; + } + else if (id_ant && id_ant.length >= 2) { + const shortCode = id_ant.substring(0, 2); + if (this.indexData[shortCode] !== undefined) { + dataValue = this.indexData[shortCode]; + } } - if (dataValue !== undefined) { - color = ptr.getColorString(dataValue, min, max); + if (dataValue !== undefined && !isNaN(dataValue)) { + color = ptr.getColorString(dataValue, min, max); } const isHovered = feature.get('hover'); if (isHovered) this.map.getTargetElement().style.cursor = 'pointer'; else this.map.getTargetElement().style.cursor = ''; + return new Style({ - fill: new Fill({ color: isHovered ? this.highLightColor(color, 0.2) : color }), - stroke: new Stroke({ - color: '#999', - }), + fill: new Fill({ color: isHovered ? this.highLightColor(color, 0.2) : color }), + stroke: new Stroke({ + color: '#999', + }), }); - } +} private intersectsExtent(featureExtent: number[], viewExtent: number[]): boolean { return !( @@ -1201,43 +1292,86 @@ export class CsOpenLayerGeoJsonLayer extends CsGeoJsonLayer { ); } - public showFeatureValue(data: any, feature: any, pixel: any, pos: CsLatLong): void { +public showFeatureValue(data: any, feature: any, pixel: any, pos: CsLatLong): void { let state: CsViewerData = this.csMap.getParent().getParent().getState(); let timesJs = this.csMap.getParent().getParent().getTimesJs(); - let value: string; + if (feature) { - if (state.support == this.csMap.renderers[0]) feature.setStyle(this.setStationStyle(state, feature, timesJs)) - else feature.setStyle(this.setFeatureStyle(state, feature, timesJs)); - this.csMap.popupContent.style.left = pixel[0] + 'px'; - this.csMap.popupContent.style.top = pixel[1] + 'px'; - this.csMap.popup.hidden = false - if (feature !== this.currentFeature) { - let id = feature.getProperties()['id'] - let id_ant = feature.getProperties()['id_ant'] - // Use exact match instead of includes to avoid matching '1' with '10', '11', etc. - // Try with new id first, fallback to old id_ant if not found - value = data[id]; - if (value === undefined && id_ant !== undefined) { - value = data[id_ant]; + if (state.support == this.csMap.renderers[0]) { + feature.setStyle(this.setStationStyle(state, feature, timesJs)); + } else { + feature.setStyle(this.setFeatureStyle(state, feature, timesJs)); + } + + this.csMap.popupContent.style.left = pixel[0] + 'px'; + this.csMap.popupContent.style.top = pixel[1] + 'px'; + this.csMap.popup.hidden = false; + + if (feature !== this.currentFeature) { + let id = feature.getProperties()['id']; + let id_ant = feature.getProperties()['id_ant']; + let name = feature.getProperties()['name']; + + let value: any = undefined; + + if (data[id] !== undefined) { + value = data[id]; + } + else if (id_ant && data[id_ant] !== undefined) { + value = data[id_ant]; + } + else if (id && id.length === 1 && data['0' + id] !== undefined) { + value = data['0' + id]; + } + else if (id && id.startsWith('0') && data[id.substring(1)] !== undefined) { + value = data[id.substring(1)]; + } + else if (id_ant && id_ant.length >= 2) { + const shortCode = id_ant.substring(0, 2); + if (data[shortCode] !== undefined) { + value = data[shortCode]; + } + } + + if (value === undefined) { + value = 'N/A'; + } else if (isNaN(parseFloat(value))) { + value = 'N/A'; + } else { + value = parseFloat(value); + } + + this.csMap.popupContent.style.visibility = 'visible'; + this.csMap.popupContent.innerHTML = this.formatFeaturePopupValue(name, id, value); + this.csMap.value.setPosition(proj4('EPSG:4326', olProjection, [pos.lng, pos.lat])); } - this.csMap.popupContent.style.visibility = 'visible'; - this.csMap.popupContent.innerHTML = this.formatFeaturePopupValue(feature.get('name'), id, parseFloat(value)); - this.csMap.value.setPosition(proj4('EPSG:4326', olProjection, [pos.lng, pos.lat])) - } } else { - this.csMap.popupContent.style.visibility = 'hidden'; - this.csMap.popup.hidden = true + this.csMap.popupContent.style.visibility = 'hidden'; + this.csMap.popup.hidden = true; } + if (this.currentFeature instanceof Feature) { - if (state.support == this.csMap.renderers[0]) this.currentFeature.setStyle(this.setStationStyle(state, this.currentFeature, timesJs)) - else this.currentFeature.setStyle(this.setFeatureStyle(state, this.currentFeature, timesJs)); + if (state.support == this.csMap.renderers[0]) { + this.currentFeature.setStyle(this.setStationStyle(state, this.currentFeature, timesJs)); + } else { + this.currentFeature.setStyle(this.setFeatureStyle(state, this.currentFeature, timesJs)); + } } this.currentFeature = feature; - }; +} + +public formatFeaturePopupValue(featureName: string, featureId: any, value: number | string): string { + if (value === 'N/A' || value === undefined || value === null) { + return `${featureName}: Sin datos`; + } + + if (typeof value === 'number') { + return this.csMap.getParent().getParent().formatPopupValue(featureName + ': ', featureId, '', value); + } + + return `${featureName}: ${value}`; +} - public formatFeaturePopupValue(featureName: string, featureId: any, value: number): string { - return this.csMap.getParent().getParent().formatPopupValue(featureName + ': ', featureId, '', value); - } public highLightColor(hex: string, lum: number): string { hex = String(hex).replace(/[^0-9a-f]/gi, ''); @@ -1262,4 +1396,4 @@ export class CsOpenLayerGeoJsonLayer extends CsGeoJsonLayer { // loadThreshold?: number; // source: VectorSource; // geoJSONData: any; // Your GeoJSON data -// } +// } \ No newline at end of file diff --git a/anemui-core/src/PaletteManager.ts b/anemui-core/src/PaletteManager.ts index bf19827..a45dddf 100644 --- a/anemui-core/src/PaletteManager.ts +++ b/anemui-core/src/PaletteManager.ts @@ -15,7 +15,7 @@ type CS_RGBA_Info = { } export interface Painter{ - paintValues(floatArray:number[],width:number,height:number,minArray:number,maxArray:number,pxTransparent:number,uncertaintyLayer:boolean):Promise + paintValues(floatArray:number[],width:number,height:number,minArray:number,maxArray:number,pxTransparent:number,uncertaintyLayer:boolean,zoom?:number):Promise getColorString(val: number, min: number, max: number): string getValIndex(val:number):number } @@ -177,78 +177,103 @@ export class CategoryRangePainter implements Painter { this.ranges = ranges; } - public async paintValues(floatArray: number[], width: number, height: number, minArray: number, maxArray: number, pxTransparent: number, uncertaintyLayer: boolean): Promise { - // Validar y asegurar que width y height sean enteros positivos válidos - width = Math.max(1, Math.floor(width)); - height = Math.max(1, Math.floor(height)); - - if (!isFinite(width) || !isFinite(height)) { - console.error('Invalid canvas dimensions:', width, height); - width = 1; - height = 1; - } - - let canvas: HTMLCanvasElement = document.createElement('canvas'); - let context: CanvasRenderingContext2D = canvas.getContext('2d'); - canvas.width = width; - canvas.height = height; - let imgData: ImageData = context.getImageData(0, 0, width, height); - let gradient = PaletteManager.getInstance().updatePalete32(uncertaintyLayer); +public async paintValues(floatArray: number[], width: number, height: number, minArray: number, maxArray: number, pxTransparent: number, uncertaintyLayer: boolean): Promise { + // Validar dimensiones + width = Math.max(1, Math.floor(width)); + height = Math.max(1, Math.floor(height)); - // VERIFICACIÓN CRÍTICA - if (gradient.length !== this.ranges.length) { - console.error('❌ CRITICAL: Gradient colors (' + gradient.length + ') != Ranges (' + this.ranges.length + ')'); - } - - const bitmap: Uint32Array = new Uint32Array(imgData.data.buffer); - - for (let y: number = 0; y < height; y++) { - for (let x: number = 0; x < width; x++) { - let ncIndex: number = x + y * width; - let value: number = floatArray[ncIndex]; - let pxIndex: number = x + ((height - 1) - y) * width; + if (!isFinite(width) || !isFinite(height)) { + console.error('Invalid canvas dimensions:', width, height); + width = 1; + height = 1; + } - if (!isNaN(value) && isFinite(value)) { + let canvas: HTMLCanvasElement = document.createElement('canvas'); + let context: CanvasRenderingContext2D = canvas.getContext('2d'); + canvas.width = width; + canvas.height = height; + let imgData: ImageData = context.getImageData(0, 0, width, height); + + let gradient = PaletteManager.getInstance().updatePalete32(uncertaintyLayer); + const bitmap: Uint32Array = new Uint32Array(imgData.data.buffer); + + let debugStats = { + transparent: 0, + painted: 0, + byValue: {} as Record, + sampleValues: [] as number[] + }; + + + for (let y: number = 0; y < height; y++) { + for (let x: number = 0; x < width; x++) { + let ncIndex: number = x + y * width; + let value: number = floatArray[ncIndex]; + let pxIndex: number = x + ((height - 1) - y) * width; + + if (!isNaN(value) && isFinite(value)) { + if (uncertaintyLayer) { + if (value > 0) { + // Hay incertidumbre, pintar gris (índice 0 de la paleta) + bitmap[pxIndex] = gradient[0]; + debugStats.painted++; + + if (debugStats.sampleValues.length < 20) { + debugStats.sampleValues.push(value); + } + } else { + // Sin incertidumbre, transparente + bitmap[pxIndex] = pxTransparent; + debugStats.transparent++; + } + + // Contar distribución de valores + const roundedVal = Math.round(value * 10) / 10; + debugStats.byValue[roundedVal] = (debugStats.byValue[roundedVal] || 0) + 1; + + } else { let index: number = this.getValIndex(value); if (index >= 0 && index < gradient.length) { bitmap[pxIndex] = gradient[index]; + debugStats.painted++; } else { bitmap[pxIndex] = pxTransparent; + debugStats.transparent++; } - } else { - bitmap[pxIndex] = pxTransparent; } + } else { + bitmap[pxIndex] = pxTransparent; + debugStats.transparent++; } } - - context.putImageData(imgData, 0, 0); - return canvas; } + + context.putImageData(imgData, 0, 0); + return canvas; +} - getValIndex(val: number): number { - // Buscar el rango apropiado - for (let i = 0; i < this.ranges.length; i++) { - let range = this.ranges[i]; - - // Rango con límite inferior indefinido: val < b - if (range.a === undefined && val < range.b) { - return i; - } - // Rango con límite superior indefinido: val >= a - else if (range.b === undefined && val >= range.a) { - return i; - } - // Rango normal: a <= val < b - else if (range.a !== undefined && range.b !== undefined) { - if (val >= range.a && val < range.b) { - return i; - } - } - } +getValIndex(val: number): number { + if (isNaN(val) || !isFinite(val)) { + return -1; + } + + for (let i = 0; i < this.ranges.length; i++) { + let range = this.ranges[i]; - return -1; // No encontrado + const a = (typeof range.a === 'number') ? range.a : -Infinity; + const b = (typeof range.b === 'number') ? range.b : Infinity; + + const isLastRange = (i === this.ranges.length - 1); + + if (val >= a && (val < b || (isLastRange && val <= b))) { + return i; + } } + + // Si llegamos aquí, el valor no cayó en ningún rango + return -1; +} getColorString(val: number, min: number, max: number): string { let mgr = PaletteManager.getInstance(); @@ -261,6 +286,8 @@ export class CategoryRangePainter implements Painter { return "#000000"; } + + } export class GradientPainter implements Painter{ @@ -273,10 +300,10 @@ export class GradientPainter implements Painter{ .setMidpoint(points) .getColors(); } - - public async paintValues(floatArray: number[], width: number, height: number, minArray: number, maxArray: number, pxTransparent: number,uncertaintyLayer:boolean): Promise { + + public async paintValues(floatArray: number[], width: number, height: number, minArray: number, maxArray: number, pxTransparent: number, uncertaintyLayer: boolean): Promise { let canvas: HTMLCanvasElement = document.createElement('canvas'); - let context: CanvasRenderingContext2D = canvas.getContext('2d'); + let context: CanvasRenderingContext2D = canvas.getContext('2d'); canvas.width = width; canvas.height = height; let imgData: ImageData = context.getImageData(0, 0, width, height); @@ -327,7 +354,33 @@ export class GradientPainter implements Painter{ } export class CsDynamicPainter implements Painter{ - + // Variable privada para almacenar breaks precalculados + private precalculatedBreaks: number[] | null = null; + + /** + * Método para establecer breaks precalculados (usado cuando se necesita calcular breaks + * con datos combinados de múltiples porciones) + */ + public setPrecalculatedBreaks(dataForBreaks: number[]): void { + let niceSteps = new NiceSteps(); + this.precalculatedBreaks = niceSteps.getRegularSteps(dataForBreaks.filter(v => !isNaN(v)), maxPaletteSteps, maxPaletteValue); + } + + /** + * Método para establecer breaks directamente (sin usar getRegularSteps) + * Útil cuando los breaks ya están calculados (ej: getLegendValues) + */ + public setDirectBreaks(breaks: number[]): void { + this.precalculatedBreaks = [...breaks]; + } + + /** + * Método para limpiar los breaks precalculados + */ + public clearPrecalculatedBreaks(): void { + this.precalculatedBreaks = null; + } + public getColorString(val: number, min: number, max: number): string { let mgr = PaletteManager.getInstance() let paletteStr: string[] = mgr.updatePaletteStrings() @@ -351,9 +404,14 @@ export class CsDynamicPainter implements Painter{ let gradient = PaletteManager.getInstance().updatePalete32(uncertaintyLayer); let gradientLength = gradient.length - 1; - // Obtener los breaks de NiceSteps - let niceSteps = new NiceSteps(); - let breaks = niceSteps.getRegularSteps(floatArray.filter(v => !isNaN(v)), maxPaletteSteps, maxPaletteValue); + // Usar breaks precalculados si existen, si no calcularlos con floatArray + let breaks: number[]; + if (this.precalculatedBreaks !== null) { + breaks = this.precalculatedBreaks; + } else { + let niceSteps = new NiceSteps(); + breaks = niceSteps.getRegularSteps(floatArray.filter(v => !isNaN(v)), maxPaletteSteps, maxPaletteValue); + } const bitmap: Uint32Array = new Uint32Array(imgData.data.buffer); @@ -450,10 +508,17 @@ export class PaletteManager { this.addPalette("blue", () => { return ["#FFFFFF", "#FFFFFD", "#FFFFFC", "#FFFFFA", "#FFFFF9", "#FFFFF8", "#FFFFF6", "#FFFFF5", "#FFFFF4", "#FFFFF2", "#FFFFF1", "#FFFFF0", "#FFFFEE", "#FFFFED", "#FFFFEC", "#FFFFEA", "#FFFFE9", "#FFFFE8", "#FFFFE6", "#FFFFE5", "#FFFFE4", "#FFFFE2", "#FFFFE1", "#FFFFE0", "#FFFFDE", "#FFFFDD", "#FFFFDC", "#FFFFDA", "#FFFFD9", "#FEFED8", "#FDFED6", "#FDFED5", "#FCFED3", "#FCFDD2", "#FBFDD1", "#FAFDCF", "#FAFDCE", "#F9FCCC", "#F8FCCB", "#F8FCC9", "#F7FCC8", "#F6FBC7", "#F6FBC5", "#F5FBC4", "#F5FBC2", "#F4FAC1", "#F3FAC0", "#F3FABE", "#F2FABD", "#F1F9BB", "#F1F9BA", "#F0F9B9", "#EFF9B7", "#EFF8B6", "#EEF8B4", "#EEF8B3", "#EDF8B1", "#ECF7B1", "#EBF7B1", "#E9F6B1", "#E8F6B1", "#E7F5B1", "#E5F5B1", "#E4F4B1", "#E3F4B1", "#E1F3B1", "#E0F3B1", "#DFF2B2", "#DDF2B2", "#DCF1B2", "#DBF0B2", "#D9F0B2", "#D8EFB2", "#D7EFB2", "#D5EEB2", "#D4EEB2", "#D3EDB3", "#D1EDB3", "#D0ECB3", "#CFECB3", "#CDEBB3", "#CCEBB3", "#CBEAB3", "#C9EAB3", "#C8E9B3", "#C7E9B4", "#C4E8B4", "#C1E7B4", "#BFE6B4", "#BCE5B4", "#BAE4B5", "#B7E3B5", "#B5E2B5", "#B2E1B5", "#B0E0B6", "#ADDFB6", "#ABDEB6", "#A8DDB6", "#A5DCB7", "#A3DBB7", "#A0DAB7", "#9ED9B7", "#9BD8B8", "#99D7B8", "#96D6B8", "#94D5B8", "#91D4B9", "#8FD3B9", "#8CD2B9", "#8AD1B9", "#87D0BA", "#84CFBA", "#82CEBA", "#7FCDBA", "#7DCCBB", "#7BCBBB", "#79CABB", "#76CABC", "#74C9BC", "#72C8BC", "#70C7BD", "#6EC6BD", "#6CC5BD", "#69C5BE", "#67C4BE", "#65C3BE", "#63C2BF", "#61C1BF", "#5EC1BF", "#5CC0BF", "#5ABFC0", "#58BEC0", "#56BDC0", "#53BDC1", "#51BCC1", "#4FBBC1", "#4DBAC2", "#4BB9C2", "#49B8C2", "#46B8C3", "#44B7C3", "#42B6C3", "#40B5C3", "#3FB4C3", "#3EB2C3", "#3CB1C3", "#3BB0C3", "#3AAFC3", "#38ADC3", "#37ACC2", "#36ABC2", "#35A9C2", "#33A8C2", "#32A7C2", "#31A5C2", "#30A4C2", "#2EA3C1", "#2DA1C1", "#2CA0C1", "#2A9FC1", "#299EC1", "#289CC1", "#279BC1", "#259AC0", "#2498C0", "#2397C0", "#2296C0", "#2094C0", "#1F93C0", "#1E92C0", "#1D91C0", "#1D8FBF", "#1D8DBE", "#1D8BBD", "#1D89BC", "#1D87BB", "#1E86BA", "#1E84BA", "#1E82B9", "#1E80B8", "#1E7FB7", "#1E7DB6", "#1F7BB5", "#1F79B4", "#1F77B4", "#1F75B3", "#1F74B2", "#2072B1", "#2070B0", "#206EAF", "#206CAF", "#206BAE", "#2069AD", "#2167AC", "#2165AB", "#2163AA", "#2162A9", "#2160A9", "#215EA8", "#225DA7", "#225BA6", "#225AA6", "#2258A5", "#2257A4", "#2255A3", "#2254A3", "#2252A2", "#2251A1", "#234FA1", "#234EA0", "#234C9F", "#234B9F", "#23499E", "#23489D", "#23469C", "#23459C", "#23439B", "#23429A", "#24409A", "#243F99", "#243D98", "#243C98", "#243A97", "#243996", "#243795", "#243695", "#243494", "#243393", "#233291", "#22328F", "#21318C", "#20308A", "#1F2F88", "#1E2E86", "#1D2E84", "#1C2D82", "#1B2C80", "#1A2B7E", "#192A7B", "#182979", "#172977", "#162875", "#152773", "#142671", "#13256F", "#12256D", "#11246B", "#102368", "#0F2266", "#0E2164", "#0D2162", "#0C2060", "#0B1F5E", "#0A1E5C", "#091D5A", "#081D58"]; }) + + // Paleta de incertidumbre con puntos (alternativa) + this.addPalette("uncertainty_dots", ()=> { + return ['#65656580', '#00000000'] + }, new DotPatternPainter(1.5, '#000000', 1.0)) + + // Paleta de incertidumbre sólida (backup - comportamiento antiguo) this.addPalette("uncertainty", ()=> { return ['#65656580', '#00000000'] }) - + this.paletteBuffer = new ArrayBuffer(256 * 4); this.palette = new Uint8Array(this.paletteBuffer); this.painter = new CsDynamicPainter(); @@ -588,4 +653,138 @@ export class PaletteManager { public getUncertaintyLayerChecked():string{ return this.uncertaintyLayerChecked; } -} \ No newline at end of file +} + +/** + * DotPatternPainter - Painter especializado para capa de incertidumbre con puntos + * Aplica un patrón de puntos centrados en cada píxel + */ +export class DotPatternPainter implements Painter { + private dotRadius: number = 1; // Radio del punto en píxeles + private dotColor: string = '#656565'; // Color del punto + private dotOpacity: number = 0.8; // Opacidad del punto + private dotSpacing: number = 3; // Espaciado entre puntos (cada N píxeles) + + constructor(radius: number = 1, color: string = '#656565', opacity: number = 0.8, spacing: number = 3) { + this.dotRadius = radius; + this.dotColor = color; + this.dotOpacity = opacity; + this.dotSpacing = spacing; + } + + public async paintValues( + floatArray: number[], + width: number, + height: number, + minArray: number, + maxArray: number, + pxTransparent: number, + uncertaintyLayer: boolean, + zoom?: number + ): Promise { + + // Validar dimensiones + width = Math.max(1, Math.floor(width)); + height = Math.max(1, Math.floor(height)); + + if (!isFinite(width) || !isFinite(height)) { + console.error('Invalid canvas dimensions:', width, height); + width = 1; + height = 1; + } + + let canvas: HTMLCanvasElement = document.createElement('canvas'); + let context: CanvasRenderingContext2D = canvas.getContext('2d'); + canvas.width = width; + canvas.height = height; + + // Desactivar el suavizado de imágenes para mantener píxeles nítidos + context.imageSmoothingEnabled = false; + + // Parsear el color a valores RGB + const rgbaMatch = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(this.dotColor); + let r = 101, g = 101, b = 101; // Valores por defecto para #656565 + if (rgbaMatch) { + r = parseInt(rgbaMatch[1], 16); + g = parseInt(rgbaMatch[2], 16); + b = parseInt(rgbaMatch[3], 16); + } + + // Convertir opacidad (0-1) a alpha (0-255) + const alpha = Math.round(this.dotOpacity * 255); + + // Crear ImageData para manipular píxeles directamente + const imageData = context.createImageData(width, height); + const data = imageData.data; + + // Analizar los valores para debug + let validValues = 0; + let zeroValues = 0; + let nanValues = 0; + let minVal = Infinity; + let maxVal = -Infinity; + let sampleValues: number[] = []; + + for (let i = 0; i < Math.min(floatArray.length, 100); i++) { + const val = floatArray[i]; + if (!isNaN(val) && isFinite(val)) { + validValues++; + if (val === 0) zeroValues++; + if (val < minVal) minVal = val; + if (val > maxVal) maxVal = val; + if (sampleValues.length < 10) sampleValues.push(val); + } else { + nanValues++; + } + } + + // Pintar puntos cuadrados con espaciado solo donde hay incertidumbre + let dotsDrawn = 0; + let skippedDots = 0; + for (let y: number = 0; y < height; y++) { + for (let x: number = 0; x < width; x++) { + // Aplicar patrón de espaciado: solo pintar cada N píxeles + if ((x % this.dotSpacing !== 0) || (y % this.dotSpacing !== 0)) { + continue; + } + + let ncIndex: number = x + y * width; + let value: number = floatArray[ncIndex]; + + // Solo pintar si el valor indica incertidumbre (valor > 0) + if (!isNaN(value) && isFinite(value) && value > 0) { + // Invertir Y para mantener consistencia con otros painters + let canvasY = (height - 1) - y; + + // Calcular índice en el array de ImageData + let pixelIndex = (canvasY * width + x) * 4; + + // Establecer valores RGBA (píxel cuadrado) + data[pixelIndex] = r; // Red + data[pixelIndex + 1] = g; // Green + data[pixelIndex + 2] = b; // Blue + data[pixelIndex + 3] = alpha; // Alpha + + dotsDrawn++; + } else if (!isNaN(value) && isFinite(value)) { + skippedDots++; + } + } + } + + // Escribir los datos de píxeles al canvas + context.putImageData(imageData, 0, 0); + return canvas; + } + + public getColorString(val: number, min: number, max: number): string { + // Para compatibilidad con la interfaz Painter + return this.dotColor; + } + + public getValIndex(val: number): number { + // Para compatibilidad con la interfaz Painter + return 0; + } +} + diff --git a/anemui-core/src/data/ChunkDownloader.ts b/anemui-core/src/data/ChunkDownloader.ts index 239ecbd..9ef42a0 100644 --- a/anemui-core/src/data/ChunkDownloader.ts +++ b/anemui-core/src/data/ChunkDownloader.ts @@ -10,7 +10,7 @@ import { fromLonLat } from "ol/proj"; import { CategoryRangePainter, PaletteManager } from "../PaletteManager"; import { BaseApp } from "../BaseApp"; import Static from "ol/source/ImageStatic"; -import { ncSignif, dataSource, computedDataTilesLayer, olProjection } from "../Env"; +import { ncSignif, dataSource, globalMap, olProjection } from "../Env"; import * as fs from 'fs'; import * as path from 'path'; import { NestedArray, openArray, TypedArray } from 'zarr'; @@ -275,12 +275,12 @@ export async function buildImages(promises: Promise[], dataTilesLayer: const validFloatArrays = floatArrays.filter(arr => arr !== undefined && arr !== null); if (validFloatArrays.length === 0) { + console.warn('No valid float arrays received'); return; } const actualTimeIndex = getActualTimeIndex(status.selectedTimeIndex, status.varId, timesJs); - if (!Array.isArray(timesJs.varMin[status.varId])) { timesJs.varMin[status.varId] = []; } @@ -291,21 +291,59 @@ export async function buildImages(promises: Promise[], dataTilesLayer: const filteredArrays: number[][] = []; for (let i = 0; i < validFloatArrays.length; i++) { - const filteredArray = await app.filterValues(validFloatArrays[i], actualTimeIndex, status.varId, timesJs.portions[status.varId][i]); + + const filteredArray = validFloatArrays[i]; + filteredArrays.push(filteredArray); } let minArray: number = Number.MAX_VALUE; let maxArray: number = Number.MIN_VALUE; - filteredArrays.forEach((filteredArray) => { - filteredArray.forEach((value) => { - if (!isNaN(value) && isFinite(value)) { - minArray = Math.min(minArray, value); - maxArray = Math.max(maxArray, value); - } + // Para datos computados, calcular min/max usando todos los datos (península + canarias) + let allValidNumbers: number[] = []; + if (status.computedLayer) { + // Obtener datos de península y filtrar NaN + const penData = status.computedData['_pen']; + if (Array.isArray(penData)) { + const validNumbersInArray = penData.filter(num => + typeof num === 'number' && !isNaN(num) && isFinite(num) + ); + allValidNumbers.push(...validNumbersInArray); + } + + // Obtener datos de canarias y filtrar NaN + const canData = status.computedData['_can']; + if (Array.isArray(canData)) { + const validNumbersInArray = canData.filter(num => + typeof num === 'number' && !isNaN(num) && isFinite(num) + ); + allValidNumbers.push(...validNumbersInArray); + } + + // Calcular min/max con todos los datos válidos + allValidNumbers.forEach((value) => { + minArray = Math.min(minArray, value); + maxArray = Math.max(maxArray, value); }); - }); + + // Para datos computados con rango muy pequeño (ej: probabilidades todas iguales), + // forzar un rango fijo 0-1 para permitir el pintado + if ((maxArray - minArray) < 0.01) { + minArray = 0; + maxArray = 1; + } + } else { + // Para datos NO computados (leídos de fichero), usar filteredArrays + filteredArrays.forEach((filteredArray) => { + filteredArray.forEach((value) => { + if (!isNaN(value) && isFinite(value)) { + minArray = Math.min(minArray, value); + maxArray = Math.max(maxArray, value); + } + }); + }); + } if (minArray === Number.MAX_VALUE || maxArray === Number.MIN_VALUE) { console.warn('No valid data found, using default ranges'); @@ -313,12 +351,6 @@ export async function buildImages(promises: Promise[], dataTilesLayer: maxArray = 100; } - // Para datos computados con rango muy pequeño (ej: probabilidades todas iguales), - // forzar un rango fijo 0-1 para permitir el pintado - if (status.computedLayer && (maxArray - minArray) < 0.01) { - minArray = 0; - maxArray = 1; - } try { (timesJs.varMin[status.varId] as number[])[actualTimeIndex] = minArray; @@ -333,21 +365,35 @@ export async function buildImages(promises: Promise[], dataTilesLayer: app.notifyMaxMinChanged(); - let painterInstance = PaletteManager.getInstance().getPainter(); + // Si es capa de incertidumbre, usar el painter específico de uncertainty + let painterInstance = uncertaintyLayer + ? PaletteManager.getInstance()['painters']['uncertainty'] || PaletteManager.getInstance().getPainter() + : PaletteManager.getInstance().getPainter(); + // Para datos computados, precalcular breaks con todos los datos combinados + if (status.computedLayer && allValidNumbers.length > 0 && (painterInstance as any).setPrecalculatedBreaks) { + (painterInstance as any).setPrecalculatedBreaks(allValidNumbers); + } + + // Obtener el nivel de zoom actual del mapa + const currentZoom = app.getMap()?.getZoom() || 6; + + // Para capas de incertidumbre, usar el varId con sufijo '_uncertainty' + const uncertaintyVarId = uncertaintyLayer ? status.varId + '_uncertainty' : status.varId; for (let i = 0; i < filteredArrays.length; i++) { const filteredArray = filteredArrays[i]; - const width = timesJs.lonNum[status.varId + timesJs.portions[status.varId][i]]; - const height = timesJs.latNum[status.varId + timesJs.portions[status.varId][i]]; + const width = timesJs.lonNum[uncertaintyVarId + timesJs.portions[uncertaintyVarId][i]]; + const height = timesJs.latNum[uncertaintyVarId + timesJs.portions[uncertaintyVarId][i]]; let canvas: HTMLCanvasElement | null = null; try { - canvas = await painterInstance.paintValues(filteredArray, width, height, minArray, maxArray, pxTransparent, uncertaintyLayer); + canvas = await painterInstance.paintValues(filteredArray, width, height, minArray, maxArray, pxTransparent, uncertaintyLayer, currentZoom); if (canvas) { - const extent = ncExtents[timesJs.portions[status.varId][i]]; + const portionName = timesJs.portions[uncertaintyVarId][i]; + const extent = ncExtents[portionName]; const imageSource = new Static({ url: canvas.toDataURL('image/png'), @@ -359,11 +405,14 @@ export async function buildImages(promises: Promise[], dataTilesLayer: dataTilesLayer[i].setSource(imageSource); - // zIndex menor que 5000 para que los labels queden por encima - dataTilesLayer[i].setZIndex(4000 + i); - dataTilesLayer[i].setVisible(true); + // zIndex diferenciado: incertidumbre (2000) por encima de datos (100) pero debajo de política (5000) + if (uncertaintyLayer) { + dataTilesLayer[i].setZIndex(2000 + i); // Capas de incertidumbre + } else { + dataTilesLayer[i].setZIndex(100 + i); // Capas de datos + } + dataTilesLayer[i].setVisible(uncertaintyLayer ? false : true); dataTilesLayer[i].setOpacity(1.0); - dataTilesLayer[i].changed(); await new Promise(resolve => setTimeout(resolve, 50)); @@ -387,19 +436,21 @@ export async function buildImages(promises: Promise[], dataTilesLayer: } } + // Limpiar breaks precalculados después de pintar todas las porciones + if (status.computedLayer && (painterInstance as any).clearPrecalculatedBreaks) { + (painterInstance as any).clearPrecalculatedBreaks(); + } + try { if (window.CsViewerApp && (window.CsViewerApp as any).csMap) { const map = (window.CsViewerApp as any).csMap.map; if (map) { - map.render(); - await new Promise(resolve => setTimeout(resolve, 100)); - if (map.renderSync) { map.renderSync(); } - } else { + } else { console.warn('Map not available'); } } @@ -436,7 +487,6 @@ let xyCache: { } = undefined async function downloadXYChunkNC(t: number, varName: string, portion: string, timesJs: CsTimesJsData): Promise { - let app = window.CsViewerApp; const actualTimeIndex = getActualTimeIndex(t, varName, timesJs); @@ -473,19 +523,30 @@ async function downloadXYChunkNC(t: number, varName: string, portion: string, ti const chunk = await rangeRequest(ncUrl, BigInt(chunkOffset), BigInt(chunkOffset) + BigInt(chunkSize) - BigInt(1)); const uncompressedArray = inflate(chunk); - const floatArray = Array.from(chunkStruct.iter_unpack(uncompressedArray.buffer), x => x[0]); if (!Array.isArray(floatArray) || floatArray.length === 0) { throw new Error(`Invalid float array: length=${floatArray.length}, isArray=${Array.isArray(floatArray)}`); } + const validCount = floatArray.filter(v => !isNaN(v) && isFinite(v)).length; + console.log('🔍 downloadXYChunkNC OUTPUT:', { + varName, + portion, + actualTimeIndex, + total: floatArray.length, + valid: validCount, + validPercent: (validCount / floatArray.length * 100).toFixed(2) + '%', + samples: floatArray.slice(0, 20), + min: Math.min(...floatArray.filter(v => !isNaN(v) && isFinite(v))), + max: Math.max(...floatArray.filter(v => !isNaN(v) && isFinite(v))) + }); + xyCache = { t: actualTimeIndex, varName, portion, data: [...floatArray] }; let ret = [...floatArray]; app.transformDataXY(ret, actualTimeIndex, varName, portion); - return ret; } catch (error) { @@ -596,7 +657,7 @@ export function extractValueChunkedFromT(latlng: CsLatLong, functionValue: TileA export function extractValueChunkedFromXY(latlng: CsLatLong, functionValue: TileArrayCB, errorCb: DownloadErrorCB, status: CsViewerData, times: CsTimesJsData, int: boolean = false): void { let ncCoords: number[] = fromLonLat([latlng.lng, latlng.lat], times.projection); let portion: string = getPortionForPoint(ncCoords, times, status.varId); - if (portion != '') { + if (portion != '' || globalMap) { const chunkIndex: number = calcPixelIndex(ncCoords, portion); if (status.computedLayer) { @@ -719,6 +780,62 @@ export function downloadXYbyRegion(time: string, timeIndex: number, folder: stri }, undefined, 'text'); } +export function downloadXYbyRegionMultiPortion( + time: string, + timeIndex: number, + folder: string, + varName: string, + portions: string[], + doneCb: (mergedData: any, filename: string, type: string) => void +) { + + const promises = portions.map(portion => { + return new Promise((resolve, reject) => { + const csvPath = `./regData/${folder}/${varName}${portion}.csv`; + console.log(" 📥 Downloading:", csvPath); + + downloadUrl(csvPath, (status: number, response) => { + if (status == 200) { + try { + const records = parse(response as Buffer, { + columns: true, + skip_empty_lines: true + }); + resolve({ portion, data: records[timeIndex] || {} }); + } catch (e) { + console.error(`Error parsing CSV ${varName}${portion}:`, e); + reject(e); + } + } else { + console.error(`HTTP ${status} for ${csvPath}`); + reject(new Error(`HTTP ${status}`)); + } + }, undefined, 'text'); + }); + }); + + Promise.all(promises) + .then((results: any[]) => { + + const mergedData: any = {}; + results.forEach(({ portion, data }) => { + Object.keys(data).forEach(key => { + if (key !== 'times_ini' && key !== 'times_end' && key !== 'times_mean') { + if (!mergedData[key] || isNaN(mergedData[key])) { + mergedData[key] = data[key]; + } + } + }); + }); + + doneCb(mergedData, varName, 'text/plain'); + }) + .catch(error => { + console.error("Error loading region portions:", error); + doneCb({}, varName, 'text/plain'); + }); +} + export function downloadHistoricalDataForPercentile( latlng: CsLatLong, varId: string, diff --git a/anemui-core/src/data/CsDataTypes.ts b/anemui-core/src/data/CsDataTypes.ts index 6c36f0a..a22eb19 100644 --- a/anemui-core/src/data/CsDataTypes.ts +++ b/anemui-core/src/data/CsDataTypes.ts @@ -121,7 +121,9 @@ export type CsGeoJsonData={ export enum CsTimeSpan{ Date, + Day, // 365/366 días del año (climatología diaria) Month, Season, - Year + Year, + YearSeries } \ No newline at end of file diff --git a/anemui-core/src/index.ts b/anemui-core/src/index.ts index e077c36..ee9e279 100644 --- a/anemui-core/src/index.ts +++ b/anemui-core/src/index.ts @@ -4,20 +4,19 @@ export * from './PaletteManager'; export * from './ServiceApp'; export { BaseApp } from './BaseApp'; export { InfoDiv } from './ui/InfoPanel'; +export { default as Language } from './language/language'; // Export Support.ts items for backward compatibility export { renderers, getFolders, defaultRenderer } from './tiles/Support'; -export const defaultElement = "Rejilla"; -export type { Element } from "./ElementManager"; -export { ElementManager } from "./ElementManager"; export { tpRenderers } from "./tiles/tpSupport" export * from './data/CsDataTypes'; export { hasSubVars } from './Env'; -export {enableRenderer } from './tiles/Support'; +export { enableRenderer } from './tiles/Support'; // public APIs -export { CsGraph, type GraphType } from './ui/Graph'; -export { MenuBar, MenuBarListener } from './ui/MenuBar'; -export { DateFrameMode } from "./ui/DateFrame"; +export { CsGraph, type GraphType, ColorLegendConfig } from './ui/Graph'; +export { MenuBar, MenuBarListener, simpleDiv } from './ui/MenuBar'; +export { DateSelectorFrame, DateFrameListener, DateFrameMode } from "./ui/DateFrame"; +export { default as PaletteFrame } from './ui/PaletteFrame'; export { fromLonLat } from 'ol/proj'; @@ -25,4 +24,4 @@ export { fromLonLat } from 'ol/proj'; export type { CsvDownloadDone } from './data/ChunkDownloader'; export { CsLatLong } from './CsMapTypes'; export { downloadUrl } from './data/UrlDownloader'; -export { downloadXYArrayChunked, downloadXYChunk, downloadTCSVChunked, getPortionForPoint, downloadXYbyRegion, downloadCSVbyRegion, downloadCSVbySt, downloadTimebyRegion, calcPixelIndex, downloadTArrayChunked } from './data/ChunkDownloader'; +export { downloadXYArrayChunked, downloadXYChunk, downloadTCSVChunked, getPortionForPoint, downloadXYbyRegion, downloadCSVbyRegion, downloadCSVbySt, downloadTimebyRegion, calcPixelIndex, downloadTArrayChunked, downloadXYbyRegionMultiPortion } from './data/ChunkDownloader'; diff --git a/anemui-core/src/language/language.ts b/anemui-core/src/language/language.ts index 845b40d..88106e5 100644 --- a/anemui-core/src/language/language.ts +++ b/anemui-core/src/language/language.ts @@ -65,40 +65,14 @@ export default class Language { 'duracion_ola_frio':'Cold wave duration', 'duracion_ola_calor':'Heat wave duration', 'precipitacion_24':'Precipitation in 24 hours', - 'month': { - 1: "January", - 2: "February", - 3: "March", - 4: "April", - 5: "May", - 6: "June", - 7: "July", - 8: "August", - 9: "September", - 10: "October", - 11: "November", - 12: "December" - }, - 'month_short': { - 0: "Jan", - 1: "Feb", - 2: "Mar", - 3: "Apr", - 4: "May", - 5: "Jun", - 6: "Jul", - 7: "Aug", - 8: "Sep", - 9: "Oct", - 10: "Nov", - 11: "Dec" - }, - 'season': { - 1: 'Dec - Feb', - 2: 'Mar - May', - 3: 'Jun - Aug', - 4:' Sep - Nov' - } + 'season': ['Dec - Feb', 'Mar - May', 'Jun - Aug', 'Sep - Nov'], + 'days': ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + 'daysShort': ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + 'daysMin': ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], + 'months': ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + 'monthsShort': ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + 'today': "Today", + 'clear': "Clear" }, es: { "descargar_nc": "Descargar Archivo", @@ -153,40 +127,14 @@ export default class Language { 'duracion_ola_frio':'Duración de la ola de frio', 'duracion_ola_calor':'Duración de la ola de calor', 'precipitacion_24':'Precipitación en 24h', - 'month': { - 0: "Enero", - 1: "Febrero", - 2: "Marzo", - 3: "Abril", - 4: "Mayo", - 5: "Junio", - 6: "Julio", - 7: "Agosto", - 8: "Septiembre", - 9: "Octubre", - 10: "Noviembre", - 11: "Diciembre" - }, - 'month_short': { - 0: "Ene", - 1: "Feb", - 2: "Mar", - 3: "Abr", - 4: "May", - 5: "Jun", - 6: "Jul", - 7: "Ago", - 8: "Sep", - 9: "Oct", - 10: "Nov", - 11: "Dic" - }, - 'season': { - 1: 'Dic - Feb', - 2: 'Mar - May', - 3: 'Jun - Aug', - 4:' Sep - Nov' - } + 'season': ['Dic - Feb', 'Mar - May', 'Jun - Ago', 'Sep - Nov'], + 'days': ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"], + 'daysShort': ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"], + 'daysMin': ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sá"], + 'months': ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], + 'monthsShort': ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], + 'today': "Hoy", + 'clear': "Borrar" } } @@ -215,9 +163,10 @@ export default class Language { } public getMonthName(monthIndex: number, short: boolean = false): string { - const key = short ? 'month_short' : 'month'; - if (this.locales[this.defaultLocale][key] && this.locales[this.defaultLocale][key][monthIndex] !== undefined) { - return this.locales[this.defaultLocale][key][monthIndex]; + const key = short ? 'monthsShort' : 'months'; + const monthsArray = this.locales[this.defaultLocale][key]; + if (monthsArray && Array.isArray(monthsArray) && monthsArray[monthIndex] !== undefined) { + return monthsArray[monthIndex]; } return monthIndex.toString(); } diff --git a/anemui-core/src/ui/CsMenuItem.tsx b/anemui-core/src/ui/CsMenuItem.tsx index d8028e8..66b345e 100644 --- a/anemui-core/src/ui/CsMenuItem.tsx +++ b/anemui-core/src/ui/CsMenuItem.tsx @@ -32,28 +32,30 @@ export class CsMenuItem extends BaseUiElement { this.values = _values; let count = 0; for (let i = 0; i < this.values.length; i++) { - if (!this.values[i].startsWith("~")) { + if (!this.values[i].startsWith("-")) { count++; } } if (this.container != undefined) { //alert("needs Update") let ul = this.container.getElementsByTagName("ul")[0] - ul.innerHTML = ""; - this.values.map((val, index) => { - var popOverAttrs = { - id: val.startsWith("~") ? val.substring(1) : val, - 'data-toggle': 'popover' - }; - if (!val.startsWith("-") && !val.startsWith("~")) { - /* if (val.startsWith("~")) { - addChild(ul, (
  • {val.substring(1)}
  • )) - } else { */ - addChild(ul, (
  • { this.select(index) }} href="#"> {val}
  • )) - // } - } - }); - this.drop.update() + if (ul) { + ul.innerHTML = ""; + this.values.map((val, index) => { + var popOverAttrs = { + id: val.startsWith("~") ? val.substring(1) : val, + 'data-toggle': 'popover' + }; + if (!val.startsWith("-") && !val.startsWith("~")) { + /* if (val.startsWith("~")) { + addChild(ul, (
  • {val.substring(1)}
  • )) + } else { */ + addChild(ul, (
  • { this.select(index) }} href="#"> {val}
  • )) + // } + } + }); + this.drop.update() + } } } @@ -182,6 +184,80 @@ export class CsMenuItem extends BaseUiElement { } +export interface CsMenuCheckboxListener { + checkboxChanged(origin: CsMenuCheckbox, checked: boolean): void; +} + +export class CsMenuCheckbox extends BaseUiElement { + public id: string; + private title: string; + private checked: boolean; + private listener: CsMenuCheckboxListener; + + constructor(_id: string, _title: string, _listener: CsMenuCheckboxListener, _checked: boolean = false) { + super(); + this.id = _id; + this.title = _title; + this.checked = _checked; + this.listener = _listener; + } + + public setTitle(_title: string) { + this.title = _title; + if (this.container != undefined) { + const titleSpan = this.container.querySelector(".title"); + if (titleSpan) { + titleSpan.innerHTML = this.title; + } + } + } + + public setChecked(_checked: boolean) { + this.checked = _checked; + if (this.container) { + const inputElement = this.container.querySelector(`#${this.id}`) as HTMLInputElement; + if (inputElement) { + inputElement.checked = _checked; + } + } + } + + public getChecked(): boolean { + return this.checked; + } + + public render(): JSX.Element { + return ( +
    + {this.title} +
    + ) => { + this.checked = e.target.checked; + this.listener.checkboxChanged(this, this.checked); + }} + /> +
    +
    + ); + } + + public build(_container?: HTMLDivElement) { + this.container = _container; + } + + public config(hidden: boolean) { + if (this.container) { + this.container.hidden = hidden; + } + } +} + export class CsMenuInput extends BaseUiElement { public id: string; private title: string @@ -249,6 +325,17 @@ export class CsMenuInput extends BaseUiElement { return this.title } + public setValue(_value: number) { + this.value = _value; + // Actualizar también el valor del input HTML renderizado + if (this.container) { + const inputElement = this.container.querySelector(`#${this.id}`) as HTMLInputElement; + if (inputElement) { + inputElement.value = _value.toString(); + } + } + } + private validateValue(inputValue: number): number | null { /* if (isNaN(inputValue)) { return null; // Permitir campo vacío diff --git a/anemui-core/src/ui/DateFrame.tsx b/anemui-core/src/ui/DateFrame.tsx index 219321f..fde9cd8 100644 --- a/anemui-core/src/ui/DateFrame.tsx +++ b/anemui-core/src/ui/DateFrame.tsx @@ -4,10 +4,12 @@ import 'bootstrap-datepicker' // import * as $ from "jquery"; import $ from "jquery"; import 'bootstrap-slider' -import { default as Slider } from 'bootstrap-slider'; +import { default as Slider } from 'bootstrap-slider'; import { BaseFrame, BaseUiElement, mouseOverFrame } from './BaseFrame'; import { BaseApp } from '../BaseApp'; import { CsDropdown, CsDropdownListener } from './CsDropdown'; +import { CsTimeSpan } from "../data/CsDataTypes"; +import { locale } from '../Env'; export interface DateFrameListener { @@ -29,9 +31,12 @@ type yearHashMap = { export enum DateFrameMode{ DateFrameDate, + DateFrameDay, DateFrameSeason, DateFrameMonth, DateFrameYear, + DateFrameYearSeries, + ClimFrameDay, ClimFrameSeason, ClimFrameMonth, ClimFrameYear, @@ -44,9 +49,9 @@ export class DateSelectorFrame extends BaseFrame { protected datepicker: JQuery protected seasonButton: HTMLElement; protected monthButton: HTMLElement; - private climatologyFrame: HTMLElement - private climTitle: HTMLElement - private timeSeriesFrame: HTMLElement + protected climatologyFrame: HTMLElement + protected climTitle: HTMLElement + protected timeSeriesFrame: HTMLElement protected dateIndex: dateHashMap; protected monthIndex: monthHashMap; protected seasonIndex: monthHashMap; @@ -71,6 +76,79 @@ export class DateSelectorFrame extends BaseFrame { let self = this } + /** + * Configura el locale del datepicker según el idioma del sistema + * Añade traducciones personalizadas si bootstrap-datepicker no las tiene nativas + */ + private configureDatepickerLocale(): void { + // bootstrap-datepicker tiene soporte nativo para 'es' e 'en' + // pero vamos a asegurar que estén correctamente configurados + + // Cast a any para acceder a la propiedad dates que existe en runtime pero no en los tipos + const datepicker = $.fn.datepicker as any; + + if (locale === 'es' && datepicker && datepicker.dates) { + // Configuración española personalizada + datepicker.dates['es'] = { + days: this.parent.getTranslation('days'), + daysShort: this.parent.getTranslation('daysShort'), + daysMin: this.parent.getTranslation('daysMin'), + months: this.parent.getTranslation('months'), + monthsShort: this.parent.getTranslation('monthsShort'), + today: this.parent.getTranslation('today'), + clear: this.parent.getTranslation('clear'), + titleFormat: "MM yyyy", + weekStart: 1 + }; + } else if (locale === 'en' && datepicker && datepicker.dates) { + // Configuración inglesa (bootstrap-datepicker tiene 'en' por defecto, pero lo aseguramos) + datepicker.dates['en'] = { + days: this.parent.getTranslation('days'), + daysShort: this.parent.getTranslation('daysShort'), + daysMin: this.parent.getTranslation('daysMin'), + months: this.parent.getTranslation('months'), + monthsShort: this.parent.getTranslation('monthsShort'), + today: this.parent.getTranslation('today'), + clear: this.parent.getTranslation('clear'), + titleFormat: "MM yyyy", + weekStart: 0 + }; + } + } + + /** + * Obtiene el código de idioma para bootstrap-datepicker según el locale configurado + */ + private getDatepickerLanguage(): string { + // bootstrap-datepicker acepta 'es' o 'en' + return locale === 'en' ? 'en' : 'es'; + } + + /** + * Obtiene el formato de fecha para visualización según el locale + */ + private getDateFormat(): string { + // Español: dd/mm/yyyy (formato europeo con barras) + // Inglés: yyyy-mm-dd (formato ISO) + return locale === 'en' ? 'yyyy-mm-dd' : 'dd/mm/yyyy'; + } + + /** + * Convierte una fecha del formato yyyy-mm-dd (interno) al formato de visualización + */ + private formatDateForDisplay(dateStr: string): string { + if (!dateStr || locale === 'en') { + return dateStr; // En inglés no hay conversión necesaria + } + + // Convertir yyyy-mm-dd a dd/mm/yyyy para español + const parts = dateStr.split('-'); + if (parts.length === 3) { + return `${parts[2]}/${parts[1]}/${parts[0]}`; + } + return dateStr; + } + public setValidDates(_dates: string[], _varChanged: boolean = false): void { // Handle the case where _dates is actually a single string (annual data) const times = this.parent.getState().times; @@ -144,6 +222,7 @@ export class DateSelectorFrame extends BaseFrame { } break; case DateFrameMode.DateFrameYear: + case DateFrameMode.DateFrameYearSeries: if (_varChanged) { this.yearIndex = {}; this.years = []; @@ -155,7 +234,7 @@ export class DateSelectorFrame extends BaseFrame { } this.updateDatepicker(); break; - default: + default: break; } } @@ -188,18 +267,20 @@ export class DateSelectorFrame extends BaseFrame { switch(this.mode) { case DateFrameMode.DateFrameDate: - this.datepicker.datepicker('setDate', this.dates[safeIndex]); + // Convertir formato para visualización en español + const displayDate = this.formatDateForDisplay(this.dates[safeIndex]); + this.datepicker.datepicker('setDate', displayDate); if (this.dates.length > 1) { - this.datepicker.datepicker('setStartDate', this.dates[0]); - this.datepicker.datepicker('setEndDate', this.dates[this.dates.length - 1]); + this.datepicker.datepicker('setStartDate', this.formatDateForDisplay(this.dates[0])); + this.datepicker.datepicker('setEndDate', this.formatDateForDisplay(this.dates[this.dates.length - 1])); } break; case DateFrameMode.DateFrameMonth: if (this.months && this.months.length > 0) { - this.datepicker.datepicker('setDate', this.months[safeIndex]); + this.datepicker.datepicker('setDate', this.formatDateForDisplay(this.months[safeIndex])); if (this.months.length > 1) { - this.datepicker.datepicker('setStartDate', this.months[0]); - this.datepicker.datepicker('setEndDate', this.months[this.months.length - 1]); + this.datepicker.datepicker('setStartDate', this.formatDateForDisplay(this.months[0])); + this.datepicker.datepicker('setEndDate', this.formatDateForDisplay(this.months[this.months.length - 1])); } } break; @@ -213,6 +294,7 @@ export class DateSelectorFrame extends BaseFrame { } break; case DateFrameMode.DateFrameYear: + case DateFrameMode.DateFrameYearSeries: if (this.years && this.years.length > 0) { const currentYear = this.years[Math.min(safeIndex, this.years.length - 1)]; const startYear = this.years[0]; @@ -265,6 +347,7 @@ export class DateSelectorFrame extends BaseFrame { if (this.seasonIndex[year][season] == undefined) season = (lastDate.getMonth() + 1) + "" return this.seasonIndex[year][season]; case DateFrameMode.DateFrameYear: + case DateFrameMode.DateFrameYearSeries: if (this.yearIndex == undefined) return -1; if (this.yearIndex[year] == undefined) return -1; return this.yearIndex[year]; @@ -289,11 +372,11 @@ export class DateSelectorFrame extends BaseFrame { } private isYearValid(date:Date):boolean{ - if (this.mode === DateFrameMode.DateFrameYear) { + if (this.mode === DateFrameMode.DateFrameYear || this.mode === DateFrameMode.DateFrameYearSeries) { const year = date.getFullYear().toString(); return this.yearIndex && this.yearIndex[year] !== undefined; } - + if (this.dateIndex == undefined) return false; let year: string; year = date.getFullYear() + "" @@ -325,36 +408,36 @@ export class DateSelectorFrame extends BaseFrame { }; private getSeason(season: string): string { - const translations: any = this.parent.getTranslation('season'); - + const translations: any = this.parent.getTranslation('season'); + switch (season.trim()) { - case translations[2]: + case translations[1]: return '04' - case translations[3]: - return '07' - case translations[4]: + case translations[2]: + return '07' + case translations[3]: return '10' default: - return '01' + return '01' } } public setSeason (seasonId: string) { - const translations: any = this.parent.getTranslation('season'); + const translations: any = this.parent.getTranslation('season'); let season: string; switch (seasonId) { case '04': - season = translations[2]; + season = translations[1]; break; case '07': - season = translations[3]; - break; + season = translations[2]; + break; case '10': - season = translations[4]; + season = translations[3]; break; default: - season = translations[1]; - break; + season = translations[0]; + break; } this.season.config(true, season); } @@ -379,17 +462,21 @@ export class DateSelectorFrame extends BaseFrame { } let options: DatepickerOptions; let pickerId: string + const datepickerLang = this.getDatepickerLanguage(); + const dateFormat = this.getDateFormat(); + const weekStart = locale === 'en' ? 0 : 1; // Inglés: domingo=0, Español: lunes=1 + switch(this.mode) { case DateFrameMode.DateFrameDate: options = { - format: "yyyy-mm-dd", + format: dateFormat, autoclose: true, beforeShowDay: (date: Date) => this.isDateValid(date), beforeShowMonth:(date: Date) => this.isMonthValid(date), beforeShowYear:(date: Date) => this.isYearValid(date), maxViewMode:'years', - language:'es-ES', - weekStart:1, + language: datepickerLang, + weekStart: weekStart, } pickerId = 'datePicker' break; @@ -400,7 +487,7 @@ export class DateSelectorFrame extends BaseFrame { startView: 'months', minViewMode: 'months', maxViewMode:'years', - language:'es-ES' + language: datepickerLang } pickerId = 'monthPicker' break; @@ -410,18 +497,19 @@ export class DateSelectorFrame extends BaseFrame { autoclose: true, minViewMode: "years", maxViewMode: "years", - language: "es" + language: datepickerLang } pickerId = 'seasonPicker' this.pickerNotClicked = true; break; case DateFrameMode.DateFrameYear: + case DateFrameMode.DateFrameYearSeries: options = { format: "yyyy", autoclose: true, minViewMode: "years", maxViewMode: "years", - language: "es", + language: datepickerLang, beforeShowYear: (date: Date) => { const year = date.getFullYear().toString(); const isValid = this.yearIndex && this.yearIndex[year] !== undefined; @@ -548,6 +636,9 @@ export class DateSelectorFrame extends BaseFrame { this.sliderFrame = document.getElementById("sliderFrame") as HTMLElement; this.periods = [1,4,12] + // Configurar locale del datepicker ahora que parent está completamente inicializado + this.configureDatepickerLocale(); + let self = this this.updateMode(); this.updatePicker(); @@ -562,21 +653,21 @@ export class DateSelectorFrame extends BaseFrame { }) // @ts-ignore this.slider._setText = function (element: any, text: any) {} - this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.dates[endDate] + this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.formatDateForDisplay(this.dates[endDate]) this.slider.on('slideStop',(val:number)=>{ if(val==this.parent.getState().selectedTimeIndex)return; this.parent.getState().selectedTimeIndex=val; - this.datepicker.datepicker('setDate', this.dates[val]) + this.datepicker.datepicker('setDate', this.formatDateForDisplay(this.dates[val])) if (this.mode == DateFrameMode.DateFrameSeason) { - let season = this.getSeason(this.dates[val]) + let season = this.getSeason(this.dates[val]) } this.parent.update(); }) this.slider.on('slide',(val)=>{ - this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.dates[val] + this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.formatDateForDisplay(this.dates[val]) }) this.slider.on('slideStop',(val)=>{ - this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.dates[val] + this.container.getElementsByClassName("tooltip-inner")[0].textContent=this.formatDateForDisplay(this.dates[val]) }) } @@ -634,68 +725,51 @@ export class DateSelectorFrame extends BaseFrame { this.sliderFrame.hidden = false; switch (timeSpan) { - case 3: - this.mode = DateFrameMode.DateFrameYear; - this.sliderFrame.hidden = true; + case CsTimeSpan.YearSeries: + this.mode = DateFrameMode.DateFrameYearSeries; break; - case 2: - this.mode = DateFrameMode.DateFrameSeason; - break; - case 1: - this.mode = DateFrameMode.DateFrameMonth; - break; - default: - this.mode = DateFrameMode.DateFrameDate; - break; - } - - /* switch (time) { - case 1: + case CsTimeSpan.Year: this.mode = DateFrameMode.DateFrameYear; this.sliderFrame.hidden = true; break; - case 4: + case CsTimeSpan.Season: this.mode = DateFrameMode.DateFrameSeason; break; - case 12: + case CsTimeSpan.Month: this.mode = DateFrameMode.DateFrameMonth; break; - default: + case CsTimeSpan.Day: + this.mode = DateFrameMode.DateFrameDay; + break; + default: // CsTimeSpan.Date (0) this.mode = DateFrameMode.DateFrameDate; break; - } */ + } } } else { this.timeSeriesFrame.hidden = true; switch (timeSpan) { - case 3: + case CsTimeSpan.Year: this.mode = DateFrameMode.ClimFrameYear; this.sliderFrame.hidden = true; this.climatologyFrame.hidden = true; break; - default: - this.mode = timeSpan == 2? DateFrameMode.ClimFrameSeason:DateFrameMode.ClimFrameMonth; - let period = this.getPeriods(); - this.climTitle.innerHTML = period[this.parent.getState().selectedTimeIndex]; + case CsTimeSpan.Day: + this.mode = DateFrameMode.ClimFrameDay; + let periodDay = this.getPeriods(); + this.climTitle.innerHTML = periodDay[this.parent.getState().selectedTimeIndex]; this.sliderFrame.hidden = false; this.climatologyFrame.hidden = false; break; - } - /* switch (time) { - case 1: - this.mode = DateFrameMode.ClimFrameYear; - this.sliderFrame.hidden = true; - this.climatologyFrame.hidden = true; - break; - default: - this.mode = time==4? DateFrameMode.ClimFrameSeason:DateFrameMode.ClimFrameMonth; - let period = this.getPeriods(time); + default: // CsTimeSpan.Season (3) or CsTimeSpan.Month (2) + this.mode = timeSpan == 3? DateFrameMode.ClimFrameSeason:DateFrameMode.ClimFrameMonth; + let period = this.getPeriods(); this.climTitle.innerHTML = period[this.parent.getState().selectedTimeIndex]; this.sliderFrame.hidden = false; this.climatologyFrame.hidden = false; break; - } */ + } } } @@ -714,8 +788,15 @@ export class DateSelectorFrame extends BaseFrame { public getPeriods(): string[] { const timeSpan = this.getTimeSpan() - let period = timeSpan==2? this.parent.getTranslation('season'):this.parent.getTranslation('month') - return Object.values(period); + if (timeSpan == CsTimeSpan.Season) { + // Para estaciones, devolver los valores del objeto season + const season = this.parent.getTranslation('season'); + return Object.values(season); + } else { + // Para meses, devolver directamente el array de meses + const months = this.parent.getTranslation('months'); + return Array.isArray(months) ? months : Object.values(months); + } } public getTime (time:string[]): number { diff --git a/anemui-core/src/ui/Graph.tsx b/anemui-core/src/ui/Graph.tsx index 0b6ffa9..4682821 100644 --- a/anemui-core/src/ui/Graph.tsx +++ b/anemui-core/src/ui/Graph.tsx @@ -3,12 +3,12 @@ import { BaseApp } from "../BaseApp"; import { BaseFrame } from "./BaseFrame"; import Dygraph, { dygraphs } from 'dygraphs'; import { dateText } from "../data/CsPConstans"; -import { CsLatLongData } from "../data/CsDataTypes"; +import { CsTimeSpan } from "../data/CsDataTypes"; import { CsLatLong } from '../CsMapTypes'; require("dygraphs/dist/dygraph.css") -export type GraphType = "Serial" | "Area" | "Linear" | "Cummulative" | "MgFr" | "WindRose" | "PercentileClock" | "ECDF" | "DailyEvolution" | "Bar" | "StackedBar" | "ScatterPlot" +export type GraphType = "Serial" | "Area" | "Linear" | "Cummulative" | "MgFr" | "WindRose" | "PercentileClock" | "ECDF" | "DailyEvolution" interface MeanLineConfig { show: boolean; @@ -25,12 +25,24 @@ interface MeanLineConfig { labelPadding: number; } +export interface ColorLegendRange { + min: number; + max: number; + color: string; + label: string; +} + +export interface ColorLegendConfig { + title: string; + ranges: ColorLegendRange[]; +} + export class CsGraph extends BaseFrame { - private graphTitle: string; - private graphSubTitle: string; - private yLabel: string; - private xLabel: string; + protected graphTitle: string; + protected graphSubTitle: string; + protected yLabel: string; + protected xLabel: string; public graphType: GraphType; public byPoint: boolean; public scaleSelectors: boolean = false; @@ -48,6 +60,9 @@ export class CsGraph extends BaseFrame { // Tipo de ola (calor o frío) public waveType: string = "heat"; // "heat" o "cold" + // Contador para climatología + protected climatologyIndex: number = 0; + // Propiedades para manejo de escalas logarítmicas protected originalGraphData: string | null = null; protected currentXLogScale: boolean = false; @@ -66,7 +81,7 @@ export class CsGraph extends BaseFrame { labelText: 'Media' }; - private currentMeanValue: number = 0; + protected currentMeanValue: number = 0; private eventDataCSV: string = ''; // CSV data for event-based visualization private drawnPoints: Array<{cx: number, cy: number, radius: number, row: number, dygraph: any}> = []; // Store drawn point positions @@ -95,8 +110,11 @@ export class CsGraph extends BaseFrame { public render(): JSX.Element { let self = this; - let graphWidth = screen.width > 1200 ? screen.width * 0.4 : screen.width * 0.55; - let graphHeight = screen.height > 1200 ? screen.height * 0.4 : screen.height * 0.50; + // Calcular tamaño responsivo del gráfico + const maxWidth = Math.min(screen.width * 0.85, 900); + const maxHeight = Math.min(screen.height * 0.65, 500); + let graphWidth = screen.width > 1200 ? Math.min(screen.width * 0.4, maxWidth) : Math.min(screen.width * 0.55, maxWidth); + let graphHeight = screen.height > 900 ? Math.min(screen.height * 0.4, maxHeight) : Math.min(screen.height * 0.50, maxHeight); let element = (
    -
    -
    -
    - Superficie afectada: -
    0-10%
    -
    10-20%
    -
    20-30%
    -
    30-40%
    -
    40-50%
    -
    50-60%
    -
    60-70%
    -
    70-80%
    -
    80-90%
    -
    90-100%
    +
    +
    -
    - {uncertaintyLayer && -
    -
    this.toggleSelect('uncDiv')}> - - - {this.parent.getTranslation('uncertainty')}: {mgr.getUncertaintyLayerChecked()} - -
    -
    -
    this.toggleSelect('uncDiv')}> - -
    -
    - self.toggleUncertaintyLayer(event.target.checked)} /> -
    -
    -
    - } -
    ); return element; @@ -153,38 +129,6 @@ export default class LayerFrame extends BaseFrame { // this.container.querySelector("div.layerFrame").classList.remove("visible") } - public toggleUncertaintyLayer (checked: boolean) { - let ptMgr=PaletteManager.getInstance(); - ptMgr.setUncertaintyLayerChecked(checked) - let uncertaintyText = document.querySelector("#uncertainty-text") - uncertaintyText.innerHTML = this.parent.getTranslation('uncertainty') + ': ' + ptMgr.getUncertaintyLayerChecked() - let mgr=LayerManager.getInstance(); - mgr.showUncertaintyLayer(checked) - } - - public renderUncertaintyFrame():JSX.Element { - let mgr=PaletteManager.getInstance(); - mgr.setUncertaintyLayerChecked(false) - return ( -
    -
    this.toggleSelect('uncDiv')}> - - - {this.parent.getTranslation('uncertainty')}: {mgr.getUncertaintyLayerChecked()} - -
    -
    -
    this.toggleSelect('uncDiv')}> - -
    -
    - this.toggleUncertaintyLayer(event.target.checked)} /> -
    -
    -
    - ); - } - public build(){ this.container = document.getElementById("layer-frame") as HTMLDivElement this.baseDiv = document.getElementById('base-div') as HTMLElement; @@ -233,21 +177,5 @@ export default class LayerFrame extends BaseFrame { this.container.querySelector(".layerFrame span[aria-label=base]").textContent= this.parent.getTranslation('base_layer') +": "+lmgr.getBaseSelected(); this.container.querySelector(".layerFrame span[aria-label=transparency]").textContent= this.parent.getTranslation('transparency') +": "+mgr.getTransparency(); this.container.querySelector(".layerFrame span[aria-label=top]").textContent= this.parent.getTranslation('top_layer') +": "+lmgr.getTopSelected(); - let uncertaintyLayer = this.parent.getState().uncertaintyLayer; - - this.uncertaintyFrame = this.container.querySelector("#unc-div") - if (uncertaintyLayer) { - this.uncertaintyFrame.hidden = false; - if (this.uncertaintyFrame.children.length == 0) { - addChild(this.uncertaintyFrame,this.renderUncertaintyFrame()) - } - } else { - this.uncertaintyFrame.hidden = true; - if (this.uncertaintyFrame.children.length > 0) { - while (this.uncertaintyFrame.firstChild) { - this.uncertaintyFrame.removeChild(this.uncertaintyFrame.firstChild); - } - } - } } } \ No newline at end of file diff --git a/anemui-core/src/ui/MenuBar.tsx b/anemui-core/src/ui/MenuBar.tsx index 418fc1f..f92b4c0 100644 --- a/anemui-core/src/ui/MenuBar.tsx +++ b/anemui-core/src/ui/MenuBar.tsx @@ -1,6 +1,6 @@ import { createElement, addChild } from 'tsx-create-element'; import "../../css/anemui-core.scss" -import { CsMenuItem, CsMenuInput, CsMenuItemListener } from './CsMenuItem'; +import { CsMenuItem, CsMenuInput, CsMenuCheckbox, CsMenuItemListener, CsMenuCheckboxListener } from './CsMenuItem'; import { BaseFrame, BaseUiElement, mouseOverFrame } from './BaseFrame'; import { BaseApp } from '../BaseApp'; import { logo, logoStyle, hasButtons, hasSpSupport, hasSubVars, hasTpSupport, hasClimatology, hasVars, hasSelection, hasSelectionParam, hasUnits, varHasPopData, sbVarHasPopData } from "../Env"; @@ -86,6 +86,13 @@ export class MenuBar extends BaseFrame { private displayUnits: HTMLDivElement; private units: CsMenuItem; + private displayUncertainty: HTMLDivElement; + private uncertaintyCheckbox: CsMenuCheckbox; + private uncertaintyAssociatedRole: string; // Role del botón al que está asociado + private uncertaintyCssClass: string; // Clase CSS del botón asociado + private uncertaintyRole: string; // Role dinámico del uncertainty basado en el botón asociado + private uncertaintyId: string; // ID dinámico del uncertainty basado en el botón asociado + constructor(_parent: BaseApp, _listener: MenuBarListener) { super(_parent) @@ -145,6 +152,9 @@ export class MenuBar extends BaseFrame { }, }); + // El uncertainty checkbox se creará dinámicamente en setUncertaintyAssociation() + // con un id y role basados en el botón asociado + this.extraMenuItems = [] this.extraMenuInputs = [] this.extraBtns = [] @@ -367,6 +377,7 @@ export class MenuBar extends BaseFrame { addChild(this.displayUnits, this.units.render(this.parent.getState().subVarName, false)); this.units.build(this.displayUnits); } + if (hasClimatology) { this.extraDisplays.forEach((dsp) => { addChild(this.inputsFrame, this.renderDisplay(dsp, 'climBtn')); @@ -516,6 +527,38 @@ export class MenuBar extends BaseFrame { this.displayVar.classList.add('display:none') } + /** + * Maneja el cambio de estado del checkbox de incertidumbre + * @param checked - Estado del checkbox (true = mostrar capa, false = ocultar capa) + */ + public toggleUncertaintyLayer(checked: boolean): void { + const PaletteManager = require('../PaletteManager').PaletteManager; + const LayerManager = require('../LayerManager').LayerManager; + + const ptMgr = PaletteManager.getInstance(); + const lmgr = LayerManager.getInstance(); + + // Actualizar el estado en PaletteManager + ptMgr.setUncertaintyLayerChecked(checked); + + // Actualizar el checkbox solo si existe + if (this.uncertaintyCheckbox) { + this.uncertaintyCheckbox.setChecked(checked); + } + + // Mostrar/ocultar la capa si existe + const uncertaintyLayer = lmgr.getUncertaintyLayer(); + if (uncertaintyLayer && uncertaintyLayer.length > 0) { + lmgr.showUncertaintyLayer(checked); + + // Forzar renderizado del mapa + const csMap = this.parent.getMap(); + if (csMap && (csMap as any).controller && (csMap as any).controller.map) { + (csMap as any).controller.map.render(); + } + } + } + public update(): void { if (!hasButtons) return @@ -548,6 +591,71 @@ export class MenuBar extends BaseFrame { } else { this.hideClimFrame() } + + // Gestionar checkbox de incertidumbre dinámicamente + const uncertaintyLayer = this.parent.getState().uncertaintyLayer; + + if (uncertaintyLayer && this.uncertaintyAssociatedRole && this.uncertaintyCssClass) { + const PaletteManager = require('../PaletteManager').PaletteManager; + const ptMgr = PaletteManager.getInstance(); + + // Si no existe el checkbox, crearlo + const isNewCheckbox = !this.displayUncertainty; + if (isNewCheckbox) { + // Activar la capa de incertidumbre por defecto ANTES de crear el checkbox + ptMgr.setUncertaintyLayerChecked(true); + + // Encontrar el botón asociado + const associatedButton = this.container.querySelector(`[role="${this.uncertaintyAssociatedRole}"]`) as HTMLElement; + if (associatedButton) { + // Crear el display del checkbox con la clase CSS del botón asociado + // Usar el role dinámico basado en el botón asociado + let dspUncertainty: simpleDiv = { role: this.uncertaintyRole, title: 'Incertidumbre', subTitle: '' }; + const uncertaintyElement = this.renderDisplay(dspUncertainty, this.uncertaintyCssClass); + + // Agregar el elemento al DOM + addChild(this.inputsFrame, uncertaintyElement); + + // Obtener el elemento recién agregado y reposicionarlo después del botón asociado + this.displayUncertainty = this.container.querySelector(`[role="${this.uncertaintyRole}"]`) as HTMLDivElement; + if (this.displayUncertainty && associatedButton.nextSibling) { + this.inputsFrame.insertBefore(this.displayUncertainty, associatedButton.nextSibling); + } + + // Configurar el checkbox - establecer checked=true ANTES de renderizar + this.uncertaintyCheckbox.setChecked(true); + addChild(this.displayUncertainty, this.uncertaintyCheckbox.render()); + this.uncertaintyCheckbox.build(this.displayUncertainty); + + // Activar la visualización de la capa de incertidumbre con un pequeño delay + // para dar tiempo a que la capa se cargue en el LayerManager + setTimeout(() => { + this.toggleUncertaintyLayer(true); + }, 200); + } + } + + // Mostrar y actualizar el estado del checkbox + if (this.displayUncertainty) { + this.displayUncertainty.hidden = false; + // Si no es nuevo, mantener el estado actual del PaletteManager + if (!isNewCheckbox) { + const isChecked = ptMgr.getUncertaintyLayerChecked(); + this.uncertaintyCheckbox.setChecked(isChecked); + + // Si el checkbox está activo, reactivar la capa con delay + // para dar tiempo a que se cargue la nueva capa de uncertainty + if (isChecked) { + setTimeout(() => { + this.toggleUncertaintyLayer(true); + }, 200); + } + } + } + } else if (this.displayUncertainty) { + // Si no hay capa de incertidumbre, ocultar el checkbox + this.displayUncertainty.hidden = true; + } } public showMenusForClimatology(): void { if (!this.climBtnArray || this.climBtnArray.length === 0) { @@ -621,7 +729,7 @@ export class MenuBar extends BaseFrame { } } - public setExtraDisplay(type: number, id: string, displayTitle: string, options: string[]) { + public setExtraDisplay(type: number, id: string, displayTitle: string, options: string[], cssClass?: string, hasUncertainty?: boolean) { this.extraDisplays.push({ role: id, title: displayTitle, subTitle: options[0] }) let listener = this.listener @@ -645,6 +753,11 @@ export class MenuBar extends BaseFrame { break; } + // Si este botón debe tener un checkbox de incertidumbre asociado, configurarlo automáticamente + // La clase CSS es necesaria para saber qué tipo de botón es (predBtn, climBtn, etc.) + if (hasUncertainty && cssClass) { + this.setUncertaintyAssociation(id, cssClass); + } } public hideExtraMenuItem(role: string): void { @@ -682,7 +795,7 @@ export class MenuBar extends BaseFrame { if (options && options.length > 0 && options[0] !== undefined && options[0] !== '') { const newValue = parseFloat(options[0]); if (!isNaN(newValue)) { - inp.value = newValue; + inp.setValue(newValue); } } // Controlar visibilidad usando el método config @@ -807,39 +920,61 @@ export class MenuBar extends BaseFrame { } public setUnits(_units: string[]) { - this.units.setValues(_units); -} + this.units.setValues(_units); + } -public updateUnitsDisplay(value: string) { - if (this.displayUnits) { - const subtitle = this.displayUnits.querySelector('.sub-title'); - if (subtitle) { - subtitle.innerHTML = value; + public updateUnitsDisplay(value: string) { + if (this.displayUnits) { + const subtitle = this.displayUnits.querySelector('.sub-title'); + if (subtitle) { + subtitle.innerHTML = value; + } } } -} -public hideUnits() { - if (this.displayUnits) { - this.displayUnits.hidden = true; + public hideUnits() { + if (this.displayUnits) { + this.displayUnits.hidden = true; + } } -} -public showUnits() { - if (this.displayUnits) { - this.displayUnits.hidden = false; + public showUnits() { + if (this.displayUnits) { + this.displayUnits.hidden = false; + } } -} -private getLegendTitleForUnit(unit: string): string { - switch(unit) { - case 'Km/h': return 'Km/h'; - case 'm/s': return 'm/s'; - case 'Nudos': return 'Nudos'; - case 'Escala WMO/Beaufort': return 'Beaufort'; - default: return unit; + /** + * Configura el checkbox de incertidumbre para que se cree asociado a un botón específico + * @param associatedRole - Role del botón al que se asociará (ej: 'horizontePred') + * @param cssClass - Clase CSS del botón (ej: 'predBtn', 'climBtn') + */ + public setUncertaintyAssociation(associatedRole: string, cssClass: string): void { + let self = this; + this.uncertaintyAssociatedRole = associatedRole; + this.uncertaintyCssClass = cssClass; + + // Generar role e id dinámicos basados en el botón asociado + this.uncertaintyRole = `uncertainty-${associatedRole}`; + this.uncertaintyId = `UncertaintyCheckbox-${associatedRole}`; + + // Crear el checkbox con el id dinámico + this.uncertaintyCheckbox = new CsMenuCheckbox(this.uncertaintyId, "Incertidumbre", { + checkboxChanged(origin, checked) { + self.toggleUncertaintyLayer(checked); + }, + }, false); // Inicialmente no marcado + } + + private getLegendTitleForUnit(unit: string): string { + switch(unit) { + case 'Km/h': return 'Km/h'; + case 'm/s': return 'm/s'; + case 'Nudos': return 'Nudos'; + case 'Escala WMO/Beaufort': return 'Beaufort'; + default: return unit; + } } -} // public selectFirstSpatialSupportValue(): void { // this.spatialSupport.selectFirstValidValue(); diff --git a/anemui-core/src/ui/PaletteFrame.tsx b/anemui-core/src/ui/PaletteFrame.tsx index b5ae90c..0e9ac68 100644 --- a/anemui-core/src/ui/PaletteFrame.tsx +++ b/anemui-core/src/ui/PaletteFrame.tsx @@ -296,7 +296,7 @@ public render(): JSX.Element { } // Función para determinar si un color de fondo es claro u oscuro - private isLightColor(hexColor: string): boolean { + protected isLightColor(hexColor: string): boolean { if (hexColor == undefined) return false; // Remover el # si existe diff --git a/anemui-demo/package.json b/anemui-demo/package.json index 3013640..4f0773f 100644 --- a/anemui-demo/package.json +++ b/anemui-demo/package.json @@ -1,6 +1,6 @@ { "name": "@lcsc/anemui-demo", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3-SNAPSHOT", "description": "Reference Evapotranspiration Monitor", "main": "src/index.ts", "devDependencies": {}, diff --git a/anemui-test/package.json b/anemui-test/package.json index 76e9f93..8c65f2b 100644 --- a/anemui-test/package.json +++ b/anemui-test/package.json @@ -1,6 +1,6 @@ { "name": "@lcsc/anemui-test", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3-SNAPSHOT", "description": "Climatic Services Test Suite", "main": "src/index.ts", "devDependencies": {}, diff --git a/package-lock.json b/package-lock.json index e23fb64..5eb2304 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@lcsc/anemui-parent", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@lcsc/anemui-parent", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3", "license": "GPL-3.0", "workspaces": [ "anemui-core", @@ -23,7 +23,7 @@ }, "anemui-core": { "name": "@lcsc/anemui-core", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3", "license": "GPL-3.0", "dependencies": { "@types/bootstrap": "^5.2.6", @@ -79,28 +79,12 @@ "zlibjs": "^0.3.1" }, "devDependencies": { - "@lcsc/anemui-test": ">=0.1.0-20250826" - } - }, - "anemui-core/node_modules/@lcsc/anemui-test": { - "version": "0.2.0", - "resolved": "https://mirror.lcsc.csic.es/repository/anemui/@lcsc/anemui-test/-/anemui-test-0.2.0.tgz", - "integrity": "sha512-HYxA3Y5H5uGKRLuJ16tZuWr9gbPmChUa7RmHw53nL0+JGk6hw2qw7GaV2AtQEnGsy7LCqOP2oCZeX3wX8Vdnug==", - "dev": true, - "license": "GPL-3.0" - }, - "anemui-core/node_modules/@types/node": { - "version": "20.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", - "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + "@lcsc/anemui-test": ">=0.2.3" } }, "anemui-demo": { "name": "@lcsc/anemui-demo", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3", "license": "GPL-3.0", "dependencies": { "@lcsc/anemui-core": "*" @@ -109,113 +93,37 @@ }, "anemui-test": { "name": "@lcsc/anemui-test", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3", "license": "GPL-3.0", "devDependencies": {} }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@bazel/runfiles": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-5.8.1.tgz", - "integrity": "sha512-NDdfpdQ6rZlylgv++iMn5FkObC/QlBQvipinGLSOguTYpRywmieOyJ29XHvUilspwTFSILWpoE9CqMGkHXug1g==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.5.0.tgz", + "integrity": "sha512-RzahvqTkfpY2jsDxo8YItPX+/iZ6hbiikw1YhE0bA9EKBR5Og8Pa6FHn9PO9M0zaXRVsr0GFQLKbB/0rzy9SzA==", "license": "Apache-2.0" }, "node_modules/@colors/colors": { @@ -335,6 +243,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": "^14 || ^16 || >=18" }, @@ -357,6 +266,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": "^14 || ^16 || >=18" } @@ -404,6 +314,36 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@csstools/postcss-color-function": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-2.2.3.tgz", @@ -586,6 +526,36 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@csstools/postcss-logical-float-and-clear": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-1.0.1.tgz", @@ -833,6 +803,19 @@ "postcss": "^8.4" } }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@csstools/postcss-stepped-value-functions": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-2.1.1.tgz", @@ -936,22 +919,6 @@ "postcss": "^8.4" } }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "license": "CC0-1.0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, "node_modules/@csstools/utilities": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-1.0.0.tgz", @@ -975,9 +942,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", + "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", @@ -986,16 +953,16 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.4", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "~6.14.1", "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -1003,20 +970,6 @@ "node": ">= 6" } }, - "node_modules/@cypress/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/@cypress/xvfb": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", @@ -1046,17 +999,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1068,19 +1017,10 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1088,15 +1028,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1176,32 +1116,341 @@ "node": ">= 8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.4.tgz", + "integrity": "sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.4", + "@parcel/watcher-darwin-arm64": "2.5.4", + "@parcel/watcher-darwin-x64": "2.5.4", + "@parcel/watcher-freebsd-x64": "2.5.4", + "@parcel/watcher-linux-arm-glibc": "2.5.4", + "@parcel/watcher-linux-arm-musl": "2.5.4", + "@parcel/watcher-linux-arm64-glibc": "2.5.4", + "@parcel/watcher-linux-arm64-musl": "2.5.4", + "@parcel/watcher-linux-x64-glibc": "2.5.4", + "@parcel/watcher-linux-x64-musl": "2.5.4", + "@parcel/watcher-win32-arm64": "2.5.4", + "@parcel/watcher-win32-ia32": "2.5.4", + "@parcel/watcher-win32-x64": "2.5.4" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz", + "integrity": "sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz", + "integrity": "sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz", + "integrity": "sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz", + "integrity": "sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz", + "integrity": "sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz", + "integrity": "sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz", + "integrity": "sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz", + "integrity": "sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz", + "integrity": "sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz", + "integrity": "sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz", + "integrity": "sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz", + "integrity": "sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz", + "integrity": "sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/@petamoriken/float16": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.7.tgz", - "integrity": "sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA==", + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.9.3.tgz", + "integrity": "sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==", "license": "MIT" }, "node_modules/@popperjs/core": { @@ -1209,6 +1458,7 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -1221,9 +1471,9 @@ "license": "MIT" }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "license": "MIT", "dependencies": { "@types/connect": "*", @@ -1286,18 +1536,18 @@ } }, "node_modules/@types/dygraphs": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@types/dygraphs/-/dygraphs-2.1.10.tgz", - "integrity": "sha512-dYDQcAZaxhyOYjpqGea9yCjDSdAt3iP50kP28zNt4Rry2646ZFd8JePcIJ7mlhgf9URrNWJO6fH4+8h/EFlTWg==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@types/dygraphs/-/dygraphs-2.1.11.tgz", + "integrity": "sha512-fvZfvNHZwpbplADVYlfyYnAds9fRtyte38uUEdd10q+fXhzjQtrJs8ewpVyyo0CWH9Te4ji8l8TW4dDueUSUvA==", "license": "MIT", "dependencies": { "@types/google.visualization": "*" } }, "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "license": "MIT", "dependencies": { "@types/estree": "*", @@ -1315,27 +1565,39 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -1345,9 +1607,9 @@ } }, "node_modules/@types/geojson": { - "version": "7946.0.14", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", "license": "MIT" }, "node_modules/@types/google.visualization": { @@ -1369,15 +1631,15 @@ "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -1391,9 +1653,9 @@ "license": "MIT" }, "node_modules/@types/jquery": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", - "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "version": "3.5.33", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.33.tgz", + "integrity": "sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==", "license": "MIT", "dependencies": { "@types/sizzle": "*" @@ -1412,58 +1674,45 @@ "license": "MIT" }, "node_modules/@types/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "20.19.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.29.tgz", + "integrity": "sha512-YrT9ArrGaHForBaCNwFjoqJWmn8G1Pr7+BH/vwyLHciA9qT/wSiuOhxGCT50JA5xLvFBd6PIiGkE3afxcPE1nw==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, "node_modules/@types/pako": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.3.tgz", - "integrity": "sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", "license": "MIT" }, "node_modules/@types/proj4": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.5.tgz", - "integrity": "sha512-y4tHUVVoMEOm2nxRLQ2/ET8upj/pBmoutGxFw2LZJTQWPgWXI+cbxVEUFFmIzr/bpFR83hGDOTSXX6HBeObvZA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@types/proj4/-/proj4-2.5.6.tgz", + "integrity": "sha512-zfMrPy9fx+8DchqM0kIUGeu2tTVB5ApO1KGAYcSGFS8GoqRIkyL41xq2yCx/iV3sOLzo7v4hEgViSLTiPI1L0w==", "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "license": "MIT", - "peer": true - }, "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -1473,14 +1722,13 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz", + "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "license": "MIT", "peer": true, "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/retry": { @@ -1490,12 +1738,11 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -1509,14 +1756,24 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sinonjs__fake-timers": { @@ -1526,9 +1783,9 @@ "license": "MIT" }, "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", + "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==", "license": "MIT" }, "node_modules/@types/sockjs": { @@ -1547,9 +1804,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -1566,148 +1823,148 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "license": "MIT" }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "license": "MIT" }, "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==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "license": "MIT" }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "license": "MIT" }, "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==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "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==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "license": "MIT" }, "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==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -1786,11 +2043,21 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1798,13 +2065,16 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "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==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/agent-base": { @@ -1837,6 +2107,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2010,9 +2281,9 @@ } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/asynckit": { @@ -2031,9 +2302,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "funding": [ { "type": "opencollective", @@ -2050,11 +2321,10 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -2077,19 +2347,19 @@ } }, "node_modules/aws4": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", - "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "license": "MIT" }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -2119,6 +2389,15 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", + "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -2159,38 +2438,29 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2206,25 +2476,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2238,9 +2493,9 @@ "license": "ISC" }, "node_modules/bootstrap": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", - "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", "funding": [ { "type": "github", @@ -2257,18 +2512,18 @@ } }, "node_modules/bootstrap-datepicker": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/bootstrap-datepicker/-/bootstrap-datepicker-1.10.0.tgz", - "integrity": "sha512-lWxtSYddAQOpbAO8UhYhHLcK6425eWoSjb5JDvZU3ePHEPF6A3eUr51WKaFy4PccU19JRxUG6wEU3KdhtKfvpg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/bootstrap-datepicker/-/bootstrap-datepicker-1.10.1.tgz", + "integrity": "sha512-GIe+fsLp9Hi30oW7L2v2Q9/a4+aojrIA2p4ZagtLuKw2lpfQgjJjM0L6vl/lYQydGXWUbpoKbEC/O5tzWIkEKQ==", "license": "Apache-2.0", "dependencies": { "jquery": ">=3.4.0 <4.0.0" } }, "node_modules/bootstrap-icons": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", - "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz", + "integrity": "sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw==", "funding": [ { "type": "github", @@ -2288,12 +2543,13 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -2315,9 +2571,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "funding": [ { "type": "opencollective", @@ -2333,11 +2589,13 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2386,9 +2644,9 @@ "license": "MIT" }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -2403,17 +2661,27 @@ "node": ">=6" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -2454,9 +2722,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001764", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz", + "integrity": "sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==", "funding": [ { "type": "opencollective", @@ -2517,39 +2785,18 @@ } }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, "funding": { "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" } }, "node_modules/chrome-trace-event": { @@ -2584,9 +2831,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "funding": [ { "type": "github", @@ -2760,17 +3007,17 @@ } }, "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", "vary": "~1.1.2" }, "engines": { @@ -2792,12 +3039,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2835,18 +3076,18 @@ } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, "node_modules/copy-webpack-plugin": { @@ -2906,9 +3147,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2938,6 +3179,19 @@ "postcss": "^8.4" } }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/css-has-pseudo": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-5.0.2.tgz", @@ -2959,6 +3213,36 @@ "postcss": "^8.4" } }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/css-loader": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", @@ -3027,9 +3311,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -3073,11 +3357,10 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT", - "peer": true + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, "node_modules/csv": { "version": "6.4.1", @@ -3113,13 +3396,13 @@ "license": "MIT" }, "node_modules/cypress": { - "version": "13.13.3", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.3.tgz", - "integrity": "sha512-hUxPrdbJXhUOTzuML+y9Av7CKoYznbD83pt8g3klgpioEha0emfx4WNIuVRx0C76r0xV2MIwAW9WYiXfVJYFQw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", + "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@cypress/request": "^3.0.1", + "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -3130,6 +3413,7 @@ "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", "commander": "^6.2.1", @@ -3144,7 +3428,6 @@ "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", - "is-ci": "^3.0.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", @@ -3159,6 +3442,7 @@ "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.3", + "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, @@ -3227,18 +3511,18 @@ } }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "license": "MIT" }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3332,23 +3616,6 @@ "node": ">=10.17.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -3382,8 +3649,18 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" } }, "node_modules/detect-node": { @@ -3499,6 +3776,20 @@ "tslib": "^2.0.3" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/dygraphs": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dygraphs/-/dygraphs-2.2.1.tgz", @@ -3528,9 +3819,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.8.tgz", - "integrity": "sha512-4Nx0gP2tPNBLTrFxBMHpkQbtn2hidPVr/+/FTtcCiBYTucqc70zRyVZiOLj17Ui3wTO7SQ1/N+hkHYzJjBzt6A==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -3540,27 +3831,27 @@ "license": "MIT" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -3575,6 +3866,7 @@ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "license": "MIT", + "peer": true, "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -3593,9 +3885,9 @@ } }, "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "license": "MIT", "bin": { "envinfo": "dist/cli.js" @@ -3605,22 +3897,19 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -3635,15 +3924,42 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -3773,45 +4089,49 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -3829,21 +4149,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3886,16 +4191,16 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -3920,10 +4225,20 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "license": "MIT" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", @@ -3935,9 +4250,9 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -3992,17 +4307,17 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -4050,9 +4365,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -4110,6 +4425,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4130,31 +4446,6 @@ "ajv": "^6.9.1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -4175,31 +4466,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -4219,13 +4485,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -4242,15 +4510,15 @@ } }, "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "license": "MIT", "engines": { "node": "*" }, "funding": { - "type": "patreon", + "type": "github", "url": "https://github.com/sponsors/rawify" } }, @@ -4264,9 +4532,9 @@ } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -4278,9 +4546,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", "license": "Unlicense" }, "node_modules/fs.realpath": { @@ -4341,16 +4609,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4359,6 +4632,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -4430,6 +4716,27 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -4465,12 +4772,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4497,22 +4804,10 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -4521,11 +4816,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -4567,9 +4865,9 @@ } }, "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "funding": [ { "type": "github", @@ -4612,19 +4910,10 @@ "node": ">= 12" } }, - "node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", + "integrity": "sha512-4xynFbKNNk+WlzXeQQ+6YYsH2g7mpfPszQZUi3ovKlj+pDmngQ7vRXjrrmGROabmKwyQkcgcX5hqfOwHbFmK5g==", "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -4679,25 +4968,29 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "license": "MIT" }, "node_modules/http-proxy": { @@ -4715,9 +5008,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -4739,14 +5032,14 @@ } }, "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -4834,15 +5127,15 @@ "license": "MIT" }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "license": "MIT" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -4928,9 +5221,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "license": "MIT", "engines": { "node": ">= 10" @@ -4954,22 +5247,10 @@ "node": ">=8" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -5194,9 +5475,9 @@ } }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -5221,9 +5502,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -5269,9 +5550,9 @@ "license": "ISC" }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -5333,13 +5614,13 @@ } }, "node_modules/launch-editor": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", - "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/lazy-ass": { @@ -5400,12 +5681,16 @@ } }, "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==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -5515,6 +5800,15 @@ "integrity": "sha512-VJ6nB8emkO9VODI0Fk+TQ/0zKBTqmf/Pkt8Xv0kHstoc0iXRajA00DAid4Kc3K5xeFIOoiZrVxijEzj0GLVO2w==", "license": "BSD-2-Clause" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5537,10 +5831,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -5573,9 +5870,9 @@ "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -5628,9 +5925,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", @@ -5654,15 +5951,15 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, "node_modules/minimist": { @@ -5675,9 +5972,9 @@ } }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", @@ -5706,7 +6003,40 @@ "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 14.0.0" + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/mocha/node_modules/escape-string-regexp": { @@ -5721,18 +6051,48 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/ms": { + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -5747,9 +6107,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -5765,9 +6125,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5795,19 +6155,26 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "license": "MIT" }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, "node_modules/normalize-path": { @@ -5819,15 +6186,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5862,9 +6220,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -5920,9 +6278,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6105,9 +6463,9 @@ } }, "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", + "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==", "license": "MIT" }, "node_modules/parse-json": { @@ -6181,9 +6539,9 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { @@ -6221,9 +6579,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -6312,9 +6670,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -6330,10 +6688,11 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6364,6 +6723,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-clamp": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", @@ -6535,6 +6907,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-dir-pseudo-class": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-7.0.2.tgz", @@ -6554,6 +6939,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-double-position-gradients": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-4.0.4.tgz", @@ -6599,6 +6997,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-focus-within": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-7.0.2.tgz", @@ -6618,6 +7029,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-font-variant": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", @@ -6759,13 +7183,13 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -6776,12 +7200,12 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -6831,6 +7255,36 @@ "postcss": "^8.4" } }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-opacity-percentage": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz", @@ -6999,6 +7453,19 @@ "postcss": "^8.4" } }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-replace-overflow-wrap": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", @@ -7033,7 +7500,7 @@ "postcss": "^8.4" } }, - "node_modules/postcss-selector-parser": { + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", @@ -7046,6 +7513,19 @@ "node": ">=4" } }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -7090,13 +7570,16 @@ "license": "MIT" }, "node_modules/proj4": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.12.0.tgz", - "integrity": "sha512-cQJxcVX7+fmAhOxoazKgk76GkGYQ5HcLod4rdy2MizhPvLdrZQJThxsHoz/TjjdxUvTm/rbozMgE0q9mdXKWIw==", + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.20.2.tgz", + "integrity": "sha512-ipfBRfQly0HhHTO7hnC1GfaX8bvroO7VV4KH889ehmADSE8C/qzp2j+Jj6783S9Tj6c2qX/hhYm7oH0kgXzBAA==", "license": "MIT", "dependencies": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.3" + "wkt-parser": "^1.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/ahocevar" } }, "node_modules/protocol-buffers-schema": { @@ -7133,16 +7616,10 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "license": "MIT" - }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -7159,12 +7636,12 @@ } }, "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -7173,12 +7650,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7236,29 +7707,20 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rbush": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", @@ -7290,15 +7752,16 @@ "license": "MIT" }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/rechoir": { @@ -7369,18 +7832,21 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7447,9 +7913,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -7478,16 +7944,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7509,18 +7965,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7551,9 +7995,9 @@ "license": "BSD-3-Clause" }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "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" @@ -7586,13 +8030,14 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.77.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", - "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "version": "1.97.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.2.tgz", + "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", "license": "MIT", + "peer": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -7600,6 +8045,9 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { @@ -7640,9 +8088,9 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -7651,7 +8099,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -7665,18 +8113,28 @@ "license": "MIT" }, "node_modules/selenium-webdriver": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.23.0.tgz", - "integrity": "sha512-DdvtInpnMt95Td8VApvmAw7oSydBD9twIRXqoMyRoGMvL1dAnMFxdrwnW6L0d/pF/uoNTjbVUarwGZ9wIGNStA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.39.0.tgz", + "integrity": "sha512-NAs9jCU+UeZ/ZmRb8R6zOp7N8eMklefdBYASnaRmCNXdgFE8w3OCxxZmLixkwqnGDHY5VF7hCulfw1Mls43N/A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/SeleniumHQ" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/selenium" + } + ], "license": "Apache-2.0", "dependencies": { - "@bazel/runfiles": "^5.8.1", + "@bazel/runfiles": "^6.5.0", "jszip": "^3.10.1", - "tmp": "^0.2.3", - "ws": "^8.17.1" + "tmp": "^0.2.5", + "ws": "^8.18.3" }, "engines": { - "node": ">= 14.21.0" + "node": ">= 20.0.0" } }, "node_modules/selfsigned": { @@ -7693,9 +8151,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7705,24 +8163,24 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -7743,12 +8201,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -7837,37 +8289,20 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -7914,24 +8349,81 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -8021,9 +8513,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "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" @@ -8109,9 +8601,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8228,18 +8720,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" - }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tcp-port-used": { @@ -8269,14 +8760,20 @@ } } }, + "node_modules/tcp-port-used/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, "node_modules/terser": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -8288,16 +8785,16 @@ } }, "node_modules/terser-webpack-plugin": { - "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==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -8321,55 +8818,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "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==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -8403,10 +8851,28 @@ "integrity": "sha512-xV4F2j7+QMxDfzuX59KhxiWKeAgI/QSC8o7k9rQu8hZD8TZefMTViq7l07DIcVDb30IlAPlyFRs6SnD1Fup6hA==", "license": "MIT" }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "license": "MIT" + }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "engines": { "node": ">=14.14" @@ -8434,33 +8900,30 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" + "node": ">=16" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "bin": { + "tree-kill": "cli.js" } }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -8478,29 +8941,25 @@ } }, "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsx-create-element": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/tsx-create-element/-/tsx-create-element-2.2.9.tgz", - "integrity": "sha512-js7JYdOGlGKvMnzsP02G+d0k3G1vxBJ61X7mgc2IUbntjf060fUCX/J2IQtK/vK4NO9LU4mwyw/eJH81hWW+xQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tsx-create-element/-/tsx-create-element-2.3.0.tgz", + "integrity": "sha512-BMRK11fA8dQSqufL7u5HpqVSIzHBrXJldT3VNKJ1677fJ9NwEWEL7vRfA1ue6rtRnkKA99dwiLk1TR6Ox+erJw==", "license": "MIT", - "dependencies": { - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - }, "peerDependencies": { "@types/react": "*" } @@ -8549,10 +9008,11 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8562,9 +9022,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/universalify": { @@ -8595,9 +9055,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "funding": [ { "type": "opencollective", @@ -8614,8 +9074,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -8633,16 +9093,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8703,9 +9153,9 @@ "license": "MIT" }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.0.tgz", + "integrity": "sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -8725,41 +9175,43 @@ } }, "node_modules/web-worker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", - "integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", "license": "Apache-2.0" }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -8913,76 +9365,75 @@ } } }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=10.0.0" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/webpack-sources": { - "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==", - "license": "MIT", + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "picomatch": "^2.2.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/webpack/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==", - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "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==", + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=10.13.0" } }, "node_modules/websocket-driver": { @@ -9030,9 +9481,9 @@ "license": "MIT" }, "node_modules/wkt-parser": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.3.3.tgz", - "integrity": "sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.5.2.tgz", + "integrity": "sha512-1ZUiV1FTwSiSrgWzV9KXJuOF2BVW91KY/mau04BhnmgOdroRQea7Q0s5TVqwGLm0D2tZwObd/tBYXW49sSxp3Q==", "license": "MIT" }, "node_modules/workerpool": { @@ -9065,9 +9516,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -9086,9 +9537,9 @@ } }, "node_modules/xml-utils": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.1.tgz", - "integrity": "sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.2.tgz", + "integrity": "sha512-RqM+2o1RYs6T8+3DzDSoTRAUfrvaejbVHcp3+thnAtDKo8LskR+HomLajEy5UjTz24rpka7AxVBRR3g2wTUkJA==", "license": "CC0-1.0" }, "node_modules/y18n": { diff --git a/package.json b/package.json index 98616d0..c200879 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lcsc/anemui-parent", - "version": "0.2.1-SNAPSHOT", + "version": "0.2.3-SNAPSHOT", "description": "Climatic Services Viewer", "scripts": { "test": "mocha --timeout 10000", diff --git a/version.dev b/version.dev index b8e2ce4..70899e7 100644 --- a/version.dev +++ b/version.dev @@ -1 +1 @@ -0.2.1-SNAPSHOT +0.2.3-SNAPSHOT diff --git a/version.main b/version.main index 0ea3a94..ee1372d 100644 --- a/version.main +++ b/version.main @@ -1 +1 @@ -0.2.0 +0.2.2