diff --git a/standalone_app/package-lock.json b/standalone_app/package-lock.json index 6906ea0b..8c4a2211 100644 --- a/standalone_app/package-lock.json +++ b/standalone_app/package-lock.json @@ -24,6 +24,7 @@ "react-router-dom": "^6.22.3" }, "devDependencies": { + "@optuna/types": "../tslib/types", "@types/plotly.js": "^2.29.2", "@types/react": "^18.2.64", "@types/react-dom": "^18.2.21", @@ -68,6 +69,7 @@ "@storybook/react": "^8.0.4", "@storybook/react-vite": "^8.0.4", "@storybook/test": "^8.0.4", + "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.2.2", "@types/plotly.js-dist-min": "^2.3.4", "@types/react": "^18.2.55", @@ -91,6 +93,12 @@ "@optuna/types": "../types/" } }, + "../tslib/types": { + "name": "@optuna/types", + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -1338,6 +1346,10 @@ "resolved": "../tslib/storage", "link": true }, + "node_modules/@optuna/types": { + "resolved": "../tslib/types", + "link": true + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", diff --git a/standalone_app/package.json b/standalone_app/package.json index 9af17831..a9f26a7f 100644 --- a/standalone_app/package.json +++ b/standalone_app/package.json @@ -8,6 +8,7 @@ "build:vscode": "webpack" }, "devDependencies": { + "@optuna/types": "../tslib/types", "@types/plotly.js": "^2.29.2", "@types/react": "^18.2.64", "@types/react-dom": "^18.2.21", diff --git a/standalone_app/src/components/StudyDetail.tsx b/standalone_app/src/components/StudyDetail.tsx index 866c477e..4c60e0e5 100644 --- a/standalone_app/src/components/StudyDetail.tsx +++ b/standalone_app/src/components/StudyDetail.tsx @@ -13,11 +13,16 @@ import { useTheme, } from "@mui/material" import Grid2 from "@mui/material/Unstable_Grid2" -import { PlotHistory, TrialTable } from "@optuna/react" +import { + PlotHistory, + PlotImportance, + PlotIntermediateValues, + TrialTable, +} from "@optuna/react" +import * as Optuna from "@optuna/types" +import init, { wasm_fanova_calculate } from "optuna" import React, { FC, useContext, useState, useEffect } from "react" import { Link, useParams } from "react-router-dom" -import { PlotImportance } from "./PlotImportance" -import { PlotIntermediateValues } from "./PlotIntermediateValues" import { StorageContext } from "./StorageProvider" export const StudyDetail: FC<{ @@ -40,6 +45,68 @@ export const StudyDetail: FC<{ fetchStudy() }, [storage, idxNumber]) + const [importance, setImportance] = useState([]) + const filterFunc = (trial: Optuna.Trial, objectiveId: number): boolean => { + if (trial.state !== "Complete" && trial.state !== "Pruned") { + return false + } + if (trial.values === undefined) { + return false + } + return ( + trial.values.length > objectiveId && + trial.values[objectiveId] !== Infinity && + trial.values[objectiveId] !== -Infinity + ) + } + // biome-ignore lint/correctness/useExhaustiveDependencies: + useEffect(() => { + async function run_wasm() { + if (study === null) { + return + } + + await init() + + const x: Optuna.ParamImportance[][] = study.directions.map( + (_d, objectiveId) => { + const filteredTrials = study.trials.filter((t) => + filterFunc(t, objectiveId) + ) + if (filteredTrials.length === 0) { + return study.union_search_space.map((s) => { + return { + name: s.name, + importance: 0.5, + } + }) + } + + const features = study.intersection_search_space.map((s) => + filteredTrials + .map( + (t) => + t.params.find((p) => p.name === s.name) as Optuna.TrialParam + ) + .map((p) => p.param_internal_value) + ) + const values = filteredTrials.map( + (t) => t.values?.[objectiveId] as number + ) + // TODO: handle errors thrown by wasm_fanova_calculate + const importance = wasm_fanova_calculate(features, values) + return study.intersection_search_space.map((s, i) => ({ + name: s.name, + importance: importance[i], + })) + } + ) + setImportance(x) + } + + run_wasm() + }, [study]) + return ( <> @@ -113,7 +180,9 @@ export const StudyDetail: FC<{ - {!!study && } + {!!study && ( + + )} diff --git a/tslib/react/.gitignore b/tslib/react/.gitignore index 076f41b4..97623394 100644 --- a/tslib/react/.gitignore +++ b/tslib/react/.gitignore @@ -24,3 +24,6 @@ types # sample db !public/sample_db.sqlite3 + +# test assets +test/asset \ No newline at end of file diff --git a/tslib/react/package-lock.json b/tslib/react/package-lock.json index c0fba30b..071582ba 100644 --- a/tslib/react/package-lock.json +++ b/tslib/react/package-lock.json @@ -43,7 +43,6 @@ } }, "../storage": { - "name": "@optuna/storage", "version": "0.0.1", "license": "MIT", "dependencies": { @@ -54,7 +53,6 @@ } }, "../types": { - "name": "@optuna/types", "version": "0.0.1", "dev": true, "license": "MIT" @@ -103,27 +101,27 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", - "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", + "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.1", + "@babel/generator": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.1", - "@babel/parser": "^7.24.1", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", @@ -148,9 +146,9 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", + "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", "dev": true, "dependencies": { "@babel/types": "^7.24.0", @@ -203,9 +201,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", + "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -465,9 +463,9 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", + "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", "dev": true, "dependencies": { "@babel/template": "^7.24.0", @@ -493,9 +491,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", + "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -504,6 +502,22 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz", + "integrity": "sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", @@ -910,9 +924,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz", + "integrity": "sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" @@ -941,12 +955,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1569,13 +1583,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz", - "integrity": "sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz", + "integrity": "sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-create-class-features-plugin": "^7.24.4", "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-typescript": "^7.24.1" }, @@ -1650,15 +1664,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.3.tgz", - "integrity": "sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.4.tgz", + "integrity": "sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.24.1", + "@babel/compat-data": "^7.24.4", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.4", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", @@ -1685,9 +1700,9 @@ "@babel/plugin-transform-async-generator-functions": "^7.24.3", "@babel/plugin-transform-async-to-generator": "^7.24.1", "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.4", "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", "@babel/plugin-transform-classes": "^7.24.1", "@babel/plugin-transform-computed-properties": "^7.24.1", "@babel/plugin-transform-destructuring": "^7.24.1", @@ -1928,9 +1943,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", - "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2723,161 +2738,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@mapbox/node-pre-gyp/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==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/@mdx-js/react": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", @@ -2927,18 +2787,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.14.tgz", - "integrity": "sha512-on75VMd0XqZfaQW+9pGjSNiqW+ghc5E2ZSLRBXwcXl/C4YzjfyjrLPhrEpKnR9Uym9KXBvxrhoHfPcczYHweyA==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.15.tgz", + "integrity": "sha512-aXnw29OWQ6I5A47iuWEI6qSSUfH6G/aCsW9KmW3LiFqr7uXZBK4Ks+z8G+qeIub8k0T5CMqlT2q0L+ZJTMrqpg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.14.tgz", - "integrity": "sha512-vj/51k7MdFmt+XVw94sl30SCvGx6+wJLsNYjZRgxhS6y3UtnWnypMOsm3Kmg8TN+P0dqwsjy4/fX7B1HufJIhw==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.15.tgz", + "integrity": "sha512-kkeU/pe+hABcYDH6Uqy8RmIsr2S/y5bP2rp+Gat4CcRjCcVne6KudS1NrZQhUCRysrTDCAhcbcf9gt+/+pGO2g==", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -2961,14 +2821,14 @@ } }, "node_modules/@mui/material": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.14.tgz", - "integrity": "sha512-kEbRw6fASdQ1SQ7LVdWR5OlWV3y7Y54ZxkLzd6LV5tmz+NpO3MJKZXSfgR0LHMP7meKsPiMm4AuzV0pXDpk/BQ==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.15.tgz", + "integrity": "sha512-3zvWayJ+E1kzoIsvwyEvkTUKVKt1AjchFFns+JtluHCuvxgKcLSRJTADw37k0doaRtVAsyh8bz9Afqzv+KYrIA==", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.14", - "@mui/system": "^5.15.14", + "@mui/core-downloads-tracker": "^5.15.15", + "@mui/system": "^5.15.15", "@mui/types": "^7.2.14", "@mui/utils": "^5.15.14", "@types/react-transition-group": "^4.4.10", @@ -3062,9 +2922,9 @@ } }, "node_modules/@mui/system": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.14.tgz", - "integrity": "sha512-auXLXzUaCSSOLqJXmsAaq7P96VPRXg2Rrz6OHNV7lr+kB8lobUF+/N84Vd9C4G/wvCXYPs5TYuuGBRhcGbiBGg==", + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", + "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/private-theming": "^5.15.14", @@ -3279,9 +3139,9 @@ "dev": true }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz", - "integrity": "sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz", + "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==", "cpu": [ "arm" ], @@ -3292,9 +3152,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz", - "integrity": "sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz", + "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==", "cpu": [ "arm64" ], @@ -3305,9 +3165,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz", - "integrity": "sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz", + "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==", "cpu": [ "arm64" ], @@ -3318,9 +3178,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz", - "integrity": "sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz", + "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==", "cpu": [ "x64" ], @@ -3331,9 +3191,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz", - "integrity": "sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz", + "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==", "cpu": [ "arm" ], @@ -3344,9 +3204,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz", - "integrity": "sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz", + "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==", "cpu": [ "arm64" ], @@ -3357,9 +3217,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz", - "integrity": "sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz", + "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==", "cpu": [ "arm64" ], @@ -3370,9 +3230,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz", - "integrity": "sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz", + "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==", "cpu": [ "ppc64le" ], @@ -3383,9 +3243,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz", - "integrity": "sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz", + "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==", "cpu": [ "riscv64" ], @@ -3396,9 +3256,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz", - "integrity": "sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz", + "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==", "cpu": [ "s390x" ], @@ -3409,9 +3269,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz", - "integrity": "sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz", + "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==", "cpu": [ "x64" ], @@ -3422,9 +3282,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz", - "integrity": "sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz", + "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==", "cpu": [ "x64" ], @@ -3435,9 +3295,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz", - "integrity": "sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz", + "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==", "cpu": [ "arm64" ], @@ -3448,9 +3308,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz", - "integrity": "sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz", + "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==", "cpu": [ "ia32" ], @@ -3461,9 +3321,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz", - "integrity": "sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz", + "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==", "cpu": [ "x64" ], @@ -3480,12 +3340,12 @@ "dev": true }, "node_modules/@storybook/addon-actions": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.5.tgz", - "integrity": "sha512-l1UBvD61DRcfuBTkdqMp2K+60M1QpvhNpYxMmJ/JEYQjzWTg/s9gLmX8eSjgA5bi0sjjJ5i1ddr9d8nHrmwfPA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.0.8.tgz", + "integrity": "sha512-F3qpN0n53d058EroW1A2IlzrsFNR5p2srLY4FmXB80nxAKV8oqoDI4jp15zYlf8ThcJoQl36plT8gx3r1BpANA==", "dev": true, "dependencies": { - "@storybook/core-events": "8.0.5", + "@storybook/core-events": "8.0.8", "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", "dequal": "^2.0.2", @@ -3498,9 +3358,9 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.0.5.tgz", - "integrity": "sha512-XKSnJm6bGVkG9hv6VSK+djz7ZbxEHwVpsSEUKtOEt/ScLFxU0mlsH8dd5aMy9/MAYuB93Y+bJ2SR5kyOjmi1zQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.0.8.tgz", + "integrity": "sha512-lrAJjVxDeXSK116rDajb56TureZiT76ygraP22/IvU3IcWCEcRiKYwlay8WgCTbJHtFmdBpelLBapoT46+IR9Q==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -3513,12 +3373,12 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.0.5.tgz", - "integrity": "sha512-iUL89OJQse9DlZkwY8jhyl12L/qziUkwbdSgQJxRIEceW6vrHAmc5VGwneS7N3pBuiOIKQQmMhAQ660JXHM7eQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.0.8.tgz", + "integrity": "sha512-7xANN18CLYsVthuSXwxKezqpelEKJlT9xaYLtw5vvD00btW5g3vxq+Z/A31OkS2OuaH2bE0GfRCoG2OLR8yQQA==", "dev": true, "dependencies": { - "@storybook/blocks": "8.0.5", + "@storybook/blocks": "8.0.8", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, @@ -3528,24 +3388,24 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.0.5.tgz", - "integrity": "sha512-FMlJLPjyNpqY68/9SJH7350/ncySKMGBQQAQnPrMtGVBld8eeOo3DB+GSffOSbmitomq+t16HOprvPSekTMlPw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.0.8.tgz", + "integrity": "sha512-HNiY4ESH9WxGS6QpIpURzdSbyDxbRh7VIgbvUrePSKajlsL4RFN/gdnn5TnSL00tOP/w+Cy/fXcbljMUKy7Ivg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/components": "8.0.5", - "@storybook/csf-plugin": "8.0.5", - "@storybook/csf-tools": "8.0.5", + "@storybook/blocks": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/components": "8.0.8", + "@storybook/csf-plugin": "8.0.8", + "@storybook/csf-tools": "8.0.8", "@storybook/global": "^5.0.0", - "@storybook/node-logger": "8.0.5", - "@storybook/preview-api": "8.0.5", - "@storybook/react-dom-shim": "8.0.5", - "@storybook/theming": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/node-logger": "8.0.8", + "@storybook/preview-api": "8.0.8", + "@storybook/react-dom-shim": "8.0.8", + "@storybook/theming": "8.0.8", + "@storybook/types": "8.0.8", "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "fs-extra": "^11.1.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", @@ -3560,24 +3420,24 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.0.5.tgz", - "integrity": "sha512-1yjwf9ibKn2rVqv+fqxACoIjsaUsimSEx8QwjIl2krDNhMULXzFeVubTQ09gXSVEnHUR1nKX3X9qOXJQ2bOFlQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.0.8.tgz", + "integrity": "sha512-bc9KJk7SPM2I5CCJEAP8R5leP+74IYxhWPiTN8Y1YFmf3MA1lpDJbwy+RfuRZ2ZKnSKszCXCVzU/T10HKUHLZw==", "dev": true, "dependencies": { - "@storybook/addon-actions": "8.0.5", - "@storybook/addon-backgrounds": "8.0.5", - "@storybook/addon-controls": "8.0.5", - "@storybook/addon-docs": "8.0.5", - "@storybook/addon-highlight": "8.0.5", - "@storybook/addon-measure": "8.0.5", - "@storybook/addon-outline": "8.0.5", - "@storybook/addon-toolbars": "8.0.5", - "@storybook/addon-viewport": "8.0.5", - "@storybook/core-common": "8.0.5", - "@storybook/manager-api": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/preview-api": "8.0.5", + "@storybook/addon-actions": "8.0.8", + "@storybook/addon-backgrounds": "8.0.8", + "@storybook/addon-controls": "8.0.8", + "@storybook/addon-docs": "8.0.8", + "@storybook/addon-highlight": "8.0.8", + "@storybook/addon-measure": "8.0.8", + "@storybook/addon-outline": "8.0.8", + "@storybook/addon-toolbars": "8.0.8", + "@storybook/addon-viewport": "8.0.8", + "@storybook/core-common": "8.0.8", + "@storybook/manager-api": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/preview-api": "8.0.8", "ts-dedent": "^2.0.0" }, "funding": { @@ -3586,9 +3446,9 @@ } }, "node_modules/@storybook/addon-highlight": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.0.5.tgz", - "integrity": "sha512-z4Aad6Dcf9gQIEPkR8WVIdRj/5RARI6SeIX3JRJoZ4l6fu7AvTZKDWPRpwLXSpEQqdeOb7l7FrZHISmXdrPoiQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.0.8.tgz", + "integrity": "sha512-KKD7xiNhxZQM4fdDidtcla6jSzgN1f9qe1AwFSHLXwIW22+4c97Vgf+AookN7cJvB77HxRUnvQH//zV1CJEDug==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -3599,15 +3459,15 @@ } }, "node_modules/@storybook/addon-interactions": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.0.5.tgz", - "integrity": "sha512-o0wcWAeQR8pN5T1l87i+CH/xSp70/0uyQAmJ9xPxg/60dHbDgjTvn/pwg+hhKu+olrFVpt85yQPzQ4pNhAFlUw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.0.8.tgz", + "integrity": "sha512-UOPKOe97uV4psH1O1YeE0oFuUQgD1Vkv95JjHjQG8KiPWvwdiezV7rrjPvw8RApnSKUopjFETs8F5D59i4eARw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.0.5", - "@storybook/test": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/instrumenter": "8.0.8", + "@storybook/test": "8.0.8", + "@storybook/types": "8.0.8", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -3617,9 +3477,9 @@ } }, "node_modules/@storybook/addon-links": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.0.5.tgz", - "integrity": "sha512-B5EAs0+LxgYH59GSVVAfgW8rAzGUmzdAAR3XJKbTXp3/d9e27uXwpLVYhi/VQHKLIsshDQRbc0s109APHs/SjQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.0.8.tgz", + "integrity": "sha512-iRI/W9I6fOom5zfZvsu53gfJtuhBSMmhgI/u5uZbAbfEoNL5D1PqpDXD4ygM8Vvlx90AZNZ2W5slEe7gCZOMyA==", "dev": true, "dependencies": { "@storybook/csf": "^0.1.2", @@ -3640,9 +3500,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.0.5.tgz", - "integrity": "sha512-B5c33aREHbTA+An7Q5Q1yEXUB0ETE5yPnGgsXuxVl6LyYqyqjai1qE48vcmkA7S+vt5MR6Sf9Lmy3UL+kkyYzQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.0.8.tgz", + "integrity": "sha512-akyoa+1F2ripV6ELF2UbxiSHv791LWSAVK7gsD/a5eJfKZMm5yoHjcY7Icdkc/ctE+pyjAQNhkXTixUngge09w==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -3654,9 +3514,9 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.0.5.tgz", - "integrity": "sha512-ouQ4IOBw7AAyukkaQwNe2MRTpDbCv+j4z76BRE7qvu9PckifsWsm00pTQwvbNdjiogS8c3EPMV5aBGIPoK/zAQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.0.8.tgz", + "integrity": "sha512-8Gxs095ekpa5YZolLSs5cWbWK94GZTevEUX8GFeLGIz9sf1KO3kmEO3eC5ogzDoB0cloqvbmVAJvYJ3FWiUx8w==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0", @@ -3668,9 +3528,9 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.0.5.tgz", - "integrity": "sha512-1QrvHtsQI1RNzDrkTMUFaEzZRRKHYrkj/rYpf6B2QyFvaZ6XY4urxSrmssLENuPsoDF4ABU2j6j4BAUgWjIe4A==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.0.8.tgz", + "integrity": "sha512-PZxlK+/Fwk2xcrpr5kkXYjCbBaEjAWcEHWq7mhQReMFaAs5AJE8dvmeQ7rmPDOHnlg4+YsARDFKz5FJtthRIgg==", "dev": true, "funding": { "type": "opencollective", @@ -3678,9 +3538,9 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.0.5.tgz", - "integrity": "sha512-Y2sTsNeQctfLBPQYuOjMGSQY4lUycZRZblToU0q6siJ030QjgpuEMcu1yDt654T6jnp/s4VwRS6yaZHnqZ97Mw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.0.8.tgz", + "integrity": "sha512-nOuc6DquGvm24c/A0HFTgeEN/opd58ebs1KLaEEq1f6iYV0hT2Gpnk0Usg/seOiFtJnj3NyAM46HSkZz06T8Sw==", "dev": true, "dependencies": { "memoizerific": "^1.11.3" @@ -3691,23 +3551,23 @@ } }, "node_modules/@storybook/blocks": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.0.5.tgz", - "integrity": "sha512-zfcwJ0yE5HM28BxZeNU4SYF8zxq2PEqLP1aWCdRuZT9k8lgnBwAKzlvt50LtPzOfGtKuGnvIEriELx/i+Qh4Sw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.0.8.tgz", + "integrity": "sha512-kwsjhvnmFEaIl51QHJt/83G7mZ5YbzFKnWCwy8WUpi0xvVcyoFQSGGgwR3XRrzGfUEPK8P2FDHeKw1bLzyIejA==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/components": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/channels": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/components": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/csf": "^0.1.2", - "@storybook/docs-tools": "8.0.5", + "@storybook/docs-tools": "8.0.8", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/manager-api": "8.0.5", - "@storybook/preview-api": "8.0.5", - "@storybook/theming": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/manager-api": "8.0.8", + "@storybook/preview-api": "8.0.8", + "@storybook/theming": "8.0.8", + "@storybook/types": "8.0.8", "@types/lodash": "^4.14.167", "color-convert": "^2.0.1", "dequal": "^2.0.2", @@ -3739,15 +3599,15 @@ } }, "node_modules/@storybook/builder-manager": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.0.5.tgz", - "integrity": "sha512-63gIHfgdhpL3rcHkOcGm29PbIkgx2bLRxi2RYa0osGMtfBIePFXJh7nol+4KpaRkNR8RZg+N9omVGjyhLj7IWg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-8.0.8.tgz", + "integrity": "sha512-0uihNTpTou0RFMM6PQLlfCxDxse9nIDEb83AmWE/OUnpKDDY9+WFupVWGaZc9HfH9h4Yqre2fiuK1b7KNYe7AQ==", "dev": true, "dependencies": { "@fal-works/esbuild-plugin-global-externals": "^2.1.2", - "@storybook/core-common": "8.0.5", - "@storybook/manager": "8.0.5", - "@storybook/node-logger": "8.0.5", + "@storybook/core-common": "8.0.8", + "@storybook/manager": "8.0.8", + "@storybook/node-logger": "8.0.8", "@types/ejs": "^3.1.1", "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", "browser-assert": "^1.2.1", @@ -3765,20 +3625,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.0.5.tgz", - "integrity": "sha512-tKNxobC9tlYyUAayxoiOOnoMbg4RxoAwPOpPLnQYUfHLw1ecp/g8sGD6tisyFONyOIv7uF9gbzWLUfMjn9F2sw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.0.8.tgz", + "integrity": "sha512-ibWOxoHczCc6ttMQqiSXv29m/e44sKVoc1BJluApQcjCXl9g6QXyN45zV70odjCxMfNy7EQgUjCA0mgAgMHSIw==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/core-common": "8.0.5", - "@storybook/core-events": "8.0.5", - "@storybook/csf-plugin": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/preview": "8.0.5", - "@storybook/preview-api": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/channels": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/core-common": "8.0.8", + "@storybook/core-events": "8.0.8", + "@storybook/csf-plugin": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/preview": "8.0.8", + "@storybook/preview-api": "8.0.8", + "@storybook/types": "8.0.8", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -3811,13 +3671,13 @@ } }, "node_modules/@storybook/channels": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.5.tgz", - "integrity": "sha512-UWzjt4STzBgg28Q6FxqyJWwXLWYM6oSz9gGKMUJbn2vRAlEJaG3XwvpT39YFVDUIuiFSHguV5cisXY5Be4nOZw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.8.tgz", + "integrity": "sha512-L3EGVkabv3fweXnykD/GlNUDO5HtwlIfSovC7BF4MmP7662j2/eqlZrJxDojGtbv11XHjWp/UJHUIfKpcHXYjQ==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/client-logger": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/global": "^5.0.0", "telejson": "^7.2.0", "tiny-invariant": "^1.3.1" @@ -3828,22 +3688,22 @@ } }, "node_modules/@storybook/cli": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.0.5.tgz", - "integrity": "sha512-6t0d2ILXonC7bsq6Dx6tFTls2a/JeOR7lr3UgoVaiFu5l1M5pOB6uI9JG14F+UmsCifXGJdvxR38CBwVSKtg/Q==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-8.0.8.tgz", + "integrity": "sha512-RnSdgykh2i7es1rQ7CNGpDrKK/PN1f0xjwpkAHXCEB6T9KpHBmqDquzZp+N127a1HBHHXy018yi4wT8mSQyEoA==", "dev": true, "dependencies": { "@babel/core": "^7.23.0", "@babel/types": "^7.23.0", "@ndelangen/get-tarball": "^3.0.7", - "@storybook/codemod": "8.0.5", - "@storybook/core-common": "8.0.5", - "@storybook/core-events": "8.0.5", - "@storybook/core-server": "8.0.5", - "@storybook/csf-tools": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/telemetry": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/codemod": "8.0.8", + "@storybook/core-common": "8.0.8", + "@storybook/core-events": "8.0.8", + "@storybook/core-server": "8.0.8", + "@storybook/csf-tools": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/telemetry": "8.0.8", + "@storybook/types": "8.0.8", "@types/semver": "^7.3.4", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", @@ -3965,9 +3825,9 @@ "dev": true }, "node_modules/@storybook/client-logger": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.5.tgz", - "integrity": "sha512-6D7zvPPnLuTVlBNpZSdzEbk5xfWKhEG0gejtPnhjG9R5YzC/dFckdUI0gtvwGWUVMWhL3H/0gjRjhKujUMRY1Q==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.8.tgz", + "integrity": "sha512-a4BKwl9NLFcuRgMyI7S4SsJeLFK0LCQxIy76V6YyrE1DigoXz4nA4eQxdjLf7JVvU0EZFmNSfbVL/bXzzWKNXA==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -3978,18 +3838,18 @@ } }, "node_modules/@storybook/codemod": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.0.5.tgz", - "integrity": "sha512-1ub3RRT+/ziJUdS2rz5UkQWu6teGULxHDMDRFhTrGYHVOgkc/lLnFuF0rgrLxsFdTmKIBTKN2xFfSE7z9Palsg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.0.8.tgz", + "integrity": "sha512-ufEBLciLmLlAh+L6lGgBObTiny6odXMKqiJOewQ9XfIN0wdWdyRUf5QdZIPOdfgHhWF2Q2HeswiulsoHm8Z/hA==", "dev": true, "dependencies": { "@babel/core": "^7.23.2", "@babel/preset-env": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/csf-tools": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/types": "8.0.8", "@types/cross-spawn": "^6.0.2", "cross-spawn": "^7.0.3", "globby": "^11.0.2", @@ -4005,18 +3865,18 @@ } }, "node_modules/@storybook/components": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.0.5.tgz", - "integrity": "sha512-trBWV9gc4YhFhMKUevkBY9Mdk9WmYmthpBfmF0Y2vgrJQidUqkkQqfAMQThSJ0KLpV8k3fB27s5d93rgrr50Rg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.0.8.tgz", + "integrity": "sha512-EpBExH4kHWQJSfA8QXJJ5AsLRUGi5X/zWY7ffiYW8rtnBmEnk3T9FpmnyJlY1A8sdd3b1wQ07JGBDHfL1mdELw==", "dev": true, "dependencies": { "@radix-ui/react-slot": "^1.0.2", - "@storybook/client-logger": "8.0.5", + "@storybook/client-logger": "8.0.8", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/theming": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/theming": "8.0.8", + "@storybook/types": "8.0.8", "memoizerific": "^1.11.3", "util-deprecate": "^1.0.2" }, @@ -4030,15 +3890,15 @@ } }, "node_modules/@storybook/core-common": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.5.tgz", - "integrity": "sha512-WCu2ZPMq1FuO33tYuCPb9joWaZGtJgfKvXXVGLYYg6LufpbWOI+IB7OWmHahtEdKuaNoIr3CEf1p3zm12NNiYA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.8.tgz", + "integrity": "sha512-CL15M2oeQW+Rb1l7ciunLDI2Re+ojL2lX1ZFAiDedcOU+JHsdq43zAuXoZVzp8icUi2AUSwEjZIxGCSingj+JQ==", "dev": true, "dependencies": { - "@storybook/core-events": "8.0.5", - "@storybook/csf-tools": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/core-events": "8.0.8", + "@storybook/csf-tools": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/types": "8.0.8", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -4155,9 +4015,9 @@ "dev": true }, "node_modules/@storybook/core-events": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.5.tgz", - "integrity": "sha512-26c0m7P7qt9zUKcD1noWLPJmZ+iS6MKXNngUgNBSxTtG20NFV3nxD0/tx9FzNfDVZDF6cHINkWj+FVBAaVuBVQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.8.tgz", + "integrity": "sha512-PtuvR7vS4glDEdCfKB4f1k3Vs1C3rTWP2DNbF+IjjPhNLMBznCdzTAPcz+NUIBvpjjGnhKwWikJ0yj931YjSVg==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -4168,28 +4028,28 @@ } }, "node_modules/@storybook/core-server": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.0.5.tgz", - "integrity": "sha512-aQGHRQZF4jbMqBT0sGptql+S3hiNksi4n6pPJPxGf6TE8TyRA1x7USjmvXHwv59vpmMm9HaRpGWzWCo4SqwNqw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-8.0.8.tgz", + "integrity": "sha512-tSEueEBttbSohzhZVN2bFNlFx3eoqQ7p57cjQLKXXwKygS2qKxISKnFy+Y0nj20APz68Wj51kx0rN0nGALeegw==", "dev": true, "dependencies": { "@aw-web-design/x-default-browser": "1.4.126", "@babel/core": "^7.23.9", "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-manager": "8.0.5", - "@storybook/channels": "8.0.5", - "@storybook/core-common": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/builder-manager": "8.0.8", + "@storybook/channels": "8.0.8", + "@storybook/core-common": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/csf": "^0.1.2", - "@storybook/csf-tools": "8.0.5", + "@storybook/csf-tools": "8.0.8", "@storybook/docs-mdx": "3.0.0", "@storybook/global": "^5.0.0", - "@storybook/manager": "8.0.5", - "@storybook/manager-api": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/preview-api": "8.0.5", - "@storybook/telemetry": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/manager": "8.0.8", + "@storybook/manager-api": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/preview-api": "8.0.8", + "@storybook/telemetry": "8.0.8", + "@storybook/types": "8.0.8", "@types/detect-port": "^1.3.0", "@types/node": "^18.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -4317,12 +4177,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.5.tgz", - "integrity": "sha512-R6VjQl+I9k4oc3OfOHOFzz5T20WROHOZ5/zkkFKM/1YUa6QNpMcuStOtr/qcAx+QizmQqmxgJwTFapFBP5yWjg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.8.tgz", + "integrity": "sha512-x9WspjZGcqXENj/Vn4Qmn0oTW93KN2V9wqpflWwCUJTByl2MugQsh5xRuDbs2yM7dD6zKcqRyPaTY+GFZBW+Vg==", "dev": true, "dependencies": { - "@storybook/csf-tools": "8.0.5", + "@storybook/csf-tools": "8.0.8", "unplugin": "^1.3.1" }, "funding": { @@ -4331,9 +4191,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.5.tgz", - "integrity": "sha512-fW2hAO57ayq7eHjpS5jXy/AKm3oZxApngd9QU/bC800EyTWENwLPxFnHLAE86N57Dc3bcE4PTFCyqpxzE4Uc7g==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.8.tgz", + "integrity": "sha512-Ji5fpoGym/MSyHJ6ALghVUUecwhEbN0On+jOZ2VPkrkATi9UDtryHQPdF60HKR63Iv53xRuWRzudB6zm43RTzw==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -4341,7 +4201,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "8.0.5", + "@storybook/types": "8.0.8", "fs-extra": "^11.1.0", "recast": "^0.23.5", "ts-dedent": "^2.0.0" @@ -4358,14 +4218,14 @@ "dev": true }, "node_modules/@storybook/docs-tools": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.5.tgz", - "integrity": "sha512-IzQMlsumiBgHAh5TTZTinNcedU98l0S0hczbTgjXQWgTp3//RHO36LYowAeFrB6V9SACYs/Q47iB15K4b2dqUg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.8.tgz", + "integrity": "sha512-p/MIrDshXMl/fiCRlfG9StkRYI1QlUyUSQQ/YDBFlBfWcJYARIt3TIvQyvs3Q/apnQNcDXIW663W57s7WHTO2w==", "dev": true, "dependencies": { - "@storybook/core-common": "8.0.5", - "@storybook/preview-api": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/core-common": "8.0.8", + "@storybook/preview-api": "8.0.8", + "@storybook/types": "8.0.8", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -4396,16 +4256,16 @@ } }, "node_modules/@storybook/instrumenter": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.0.5.tgz", - "integrity": "sha512-ccGFGSquIPZBcf3dP+I5kwSblAOlQNH7+4vunYJtUrlXN+VROS9LAf87W/btwxQVI1Zj17BUH9CoBrDxWbJ2VA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.0.8.tgz", + "integrity": "sha512-bCu9Tu48WOQ8ZNUed+FCSMr3Uw81b4yW/knD2goqx15nD33B7xXBNSI2GTHH5YaEHVyIFFggQcKHLkELXWlsoA==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/channels": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.0.5", + "@storybook/preview-api": "8.0.8", "@vitest/utils": "^1.3.1", "util": "^0.12.4" }, @@ -4415,9 +4275,9 @@ } }, "node_modules/@storybook/manager": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.0.5.tgz", - "integrity": "sha512-eJtf2SaAzOmRV03zn/pFRTqBua8/qy+VDtgaaCFmAyrjsUHO/bcHpbu9vnwP8a+C8ojJnthooi3yz755UTDYYg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-8.0.8.tgz", + "integrity": "sha512-pWYHSDmgT8p/XbQMKuDPdgB6KzjePI6dU5KQ5MERYfch1UiuGPVm1HHDlxxSfHW0IIXw9Qnwq4L0Awe4qhvJKQ==", "dev": true, "funding": { "type": "opencollective", @@ -4425,20 +4285,20 @@ } }, "node_modules/@storybook/manager-api": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.0.5.tgz", - "integrity": "sha512-2Q+DI9XU1U4EBrihnyfo+kuRK7T3Ce2eSlWEHHkTZ3OYSf+EhFxLUA6AOfMoA1B0nzNEr6SUkW8DBvMrtdTQMA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.0.8.tgz", + "integrity": "sha512-1HU4nfLRi0sD2uw229gb8EQyufNWrLvMNpg013kBsBXRd+Dj4dqF3v+KrYFNtteY7riC4mAJ6YcQ4tBUNYZDug==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/channels": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", "@storybook/icons": "^1.2.5", - "@storybook/router": "8.0.5", - "@storybook/theming": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/router": "8.0.8", + "@storybook/theming": "8.0.8", + "@storybook/types": "8.0.8", "dequal": "^2.0.2", "lodash": "^4.17.21", "memoizerific": "^1.11.3", @@ -4452,9 +4312,9 @@ } }, "node_modules/@storybook/node-logger": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.5.tgz", - "integrity": "sha512-ssT8YCcCqgc89ee+EeExCxcOpueOsU05iek2roR+NCZnoCL1DmzcUp8H9t0utLaK/ngPV8zatlzSDVgKTHSIJw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.8.tgz", + "integrity": "sha512-ymps3MMTxtMWq0eDiXk1iO7iv0Eg0PuUvOpPPohEJauGzU9THv81xx01aaHKSprFFJYD2LMQr1aFuUplItO12g==", "dev": true, "funding": { "type": "opencollective", @@ -4462,9 +4322,9 @@ } }, "node_modules/@storybook/preview": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.5.tgz", - "integrity": "sha512-D2uY0LTjkGbpNwJJeqtv1NieBTtvt0IEEKH+srMNXOOM+KascTYGbBlEPkYSf5bZdMft5c1GXglVIhJIqTZntg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.8.tgz", + "integrity": "sha512-J/ooKcvDV1s7ROH7lF/0vOyWDOgDB7bN6vS67J1WK0HLvMGaqUzU+q3ndakGzu0LU/jvUBqEFSZd1ALWyZINDQ==", "dev": true, "funding": { "type": "opencollective", @@ -4472,17 +4332,17 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.5.tgz", - "integrity": "sha512-BSDVTR9/X6DHVA4rIhN6d/SB6PiaRdns8ky/TKTzwFEyO3NOASHe8051O+uNtXzgCtMUj/8imNrTdMTYgUm1LA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.8.tgz", + "integrity": "sha512-khgw2mNiBrSZS3KNGQPzjneL3Csh3BOq0yLAtJpT7CRSrI/YjlE7jjcTkKzoxW+UCgvNTnLvsowcuzu82e69fA==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", - "@storybook/client-logger": "8.0.5", - "@storybook/core-events": "8.0.5", + "@storybook/channels": "8.0.8", + "@storybook/client-logger": "8.0.8", + "@storybook/core-events": "8.0.8", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "8.0.5", + "@storybook/types": "8.0.8", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -4498,17 +4358,17 @@ } }, "node_modules/@storybook/react": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.5.tgz", - "integrity": "sha512-Vwq4xt8eSKE/PLPvunOFDlzBki6L3mP7LNVWCLkQba7vzuCOPjSZ0+95v/K8XQn3jVRXAMUnlPW1SKg21aKJdw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.8.tgz", + "integrity": "sha512-pPTlQntl09kv7qkAFYsxUq6qCLeeZC/K3yGFBGMy2Dc+PFjBYdT6mt2I8GB3twK0Cq5gJESlLj48QnYLQ/9PbA==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.5", - "@storybook/docs-tools": "8.0.5", + "@storybook/client-logger": "8.0.8", + "@storybook/docs-tools": "8.0.8", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.0.5", - "@storybook/react-dom-shim": "8.0.5", - "@storybook/types": "8.0.5", + "@storybook/preview-api": "8.0.8", + "@storybook/react-dom-shim": "8.0.8", + "@storybook/types": "8.0.8", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^18.0.0", @@ -4544,9 +4404,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.5.tgz", - "integrity": "sha512-KIcLkCml5dIiVeChMyudz8Q/pZ/T86Y1LrHZvYD/t3iXH+HOOvg6KNsY6TZFM93Rqhk10AIEUNCgYzj2/QjddA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.8.tgz", + "integrity": "sha512-vOMlAz2HH/xfgZmSO28fCEmp5/tPxINDEdBDVLdZeYG6R1j5jlMRyaNcXt4cPNDkyc///PkB/K767hg4goca/Q==", "dev": true, "funding": { "type": "opencollective", @@ -4558,16 +4418,16 @@ } }, "node_modules/@storybook/react-vite": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.0.5.tgz", - "integrity": "sha512-VXxoyb3Zw5ReQwWoP64qMIy/iIS6B9PuLIEPDt7wM/5IMFljQozvNaarPQf0mNJxPkGT6zmiBn9WS06wPLPF0w==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.0.8.tgz", + "integrity": "sha512-3xN+/KgcjEAKJ0cM8yFYk8+T59kgKSMlQaavoIgQudbEErSubr9l7jDWXH44afQIEBVs++ayYWrbEN2wyMGoug==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.0", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "8.0.5", - "@storybook/node-logger": "8.0.5", - "@storybook/react": "8.0.5", + "@storybook/builder-vite": "8.0.8", + "@storybook/node-logger": "8.0.8", + "@storybook/react": "8.0.8", "find-up": "^5.0.0", "magic-string": "^0.30.0", "react-docgen": "^7.0.0", @@ -4621,12 +4481,12 @@ "dev": true }, "node_modules/@storybook/router": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.0.5.tgz", - "integrity": "sha512-1d4CqNJB5sA25HCd7jZ4eVqMsdlD4r4SuFA/eR6fas0lk7yjVCpG1zWfvSSk5tKoVcNLSptc/TYBiSr2rcGRvw==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-8.0.8.tgz", + "integrity": "sha512-wdFdNsEKweigU9VkGZtpb7GhBJLWzbABcwOuEy2h0d5m7egB97hy9BxhANdqkC+PbAHrabxC99Ca3wTj50MoDg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.5", + "@storybook/client-logger": "8.0.8", "memoizerific": "^1.11.3", "qs": "^6.10.0" }, @@ -4636,14 +4496,14 @@ } }, "node_modules/@storybook/telemetry": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.0.5.tgz", - "integrity": "sha512-KTt6wP78dn9hfsc0sR2CcFT/DWJgYqYuFBhc3NDgtT41ATLGgGniCQW9PtKLQc+FMofKejz1S+XXk0W322Pjxg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-8.0.8.tgz", + "integrity": "sha512-Uvj4nN01vQgjXZYKF/GKTFE85//Qm4ZTlJxTFWid+oYWc8NpAyJvlsJkj/dsEn4cLrgnJx2e4xvnx0Umr2ck+A==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.5", - "@storybook/core-common": "8.0.5", - "@storybook/csf-tools": "8.0.5", + "@storybook/client-logger": "8.0.8", + "@storybook/core-common": "8.0.8", + "@storybook/csf-tools": "8.0.8", "chalk": "^4.1.0", "detect-package-manager": "^2.0.1", "fetch-retry": "^5.0.2", @@ -4708,15 +4568,15 @@ } }, "node_modules/@storybook/test": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.0.5.tgz", - "integrity": "sha512-XpiRLsmZlkjoAGf3d7zcInByR25evYIzm3W4ST8+EPoI4Tcd/U+dGUQ9A6aNUuC6fJQ8Jh0M+EqNAZtcDT8lrA==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.0.8.tgz", + "integrity": "sha512-YXgwgg1e8ggDg2BlgeExwdN3MjeExnDvybQIUugADgun87tRIujJFCdjh0PAxg0Qvln6+lU3w+3Y2aryvX42RA==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.5", - "@storybook/core-events": "8.0.5", - "@storybook/instrumenter": "8.0.5", - "@storybook/preview-api": "8.0.5", + "@storybook/client-logger": "8.0.8", + "@storybook/core-events": "8.0.8", + "@storybook/instrumenter": "8.0.8", + "@storybook/preview-api": "8.0.8", "@testing-library/dom": "^9.3.4", "@testing-library/jest-dom": "^6.4.2", "@testing-library/user-event": "^14.5.2", @@ -4731,13 +4591,13 @@ } }, "node_modules/@storybook/theming": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.0.5.tgz", - "integrity": "sha512-Hy4hJaKg6UUyivkUM77nCHccv4/lO++ZG9F88qBFVPdBlCwMHHnUrR7Hgje5cCVAy0jK6LyYlD3cWO6nS9OR8w==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.0.8.tgz", + "integrity": "sha512-43hkNz7yo8Bl97AO2WbxIGprUqMhUZyK9g8383bd30gSxy9nfND/bdSdcgmA8IokDn8qp37Q4QmxtUZdhjMzZQ==", "dev": true, "dependencies": { "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@storybook/client-logger": "8.0.5", + "@storybook/client-logger": "8.0.8", "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3" }, @@ -4759,12 +4619,12 @@ } }, "node_modules/@storybook/types": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.5.tgz", - "integrity": "sha512-lYXwYF9qooQhYJkg3HWr6PD/vnQK+iO8fSKS8jtntwgJUKJvTbGZKAhNnS8WzNEI9jIp5QXFsSA367NjIDPaeQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.8.tgz", + "integrity": "sha512-NGsgCsXnWlaZmHenHDgHGs21zhweZACkqTNsEQ7hvsiF08QeiKAdgJLQg3YeGK73h9mFDRP9djprUtJYab6vnQ==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.5", + "@storybook/channels": "8.0.8", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -4774,9 +4634,9 @@ } }, "node_modules/@swc/core": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.11.tgz", - "integrity": "sha512-WKEakMZxkVwRdgMN4AMJ9K5nysY8g8npgQPczmjBeNK5In7QEAZAJwnyccrWwJZU0XjVeHn2uj+XbOKdDW17rg==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.13.tgz", + "integrity": "sha512-rOtusBE+2gaeRkAJn5E4zp5yzZekZOypzSOz5ZG6P1hFbd+Cc26fWEdK6sUSnrkkvTd0Oj33KXLB/4UkbK/UHA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -4791,16 +4651,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.4.11", - "@swc/core-darwin-x64": "1.4.11", - "@swc/core-linux-arm-gnueabihf": "1.4.11", - "@swc/core-linux-arm64-gnu": "1.4.11", - "@swc/core-linux-arm64-musl": "1.4.11", - "@swc/core-linux-x64-gnu": "1.4.11", - "@swc/core-linux-x64-musl": "1.4.11", - "@swc/core-win32-arm64-msvc": "1.4.11", - "@swc/core-win32-ia32-msvc": "1.4.11", - "@swc/core-win32-x64-msvc": "1.4.11" + "@swc/core-darwin-arm64": "1.4.13", + "@swc/core-darwin-x64": "1.4.13", + "@swc/core-linux-arm-gnueabihf": "1.4.13", + "@swc/core-linux-arm64-gnu": "1.4.13", + "@swc/core-linux-arm64-musl": "1.4.13", + "@swc/core-linux-x64-gnu": "1.4.13", + "@swc/core-linux-x64-musl": "1.4.13", + "@swc/core-win32-arm64-msvc": "1.4.13", + "@swc/core-win32-ia32-msvc": "1.4.13", + "@swc/core-win32-x64-msvc": "1.4.13" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -4812,9 +4672,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.11.tgz", - "integrity": "sha512-C1j1Qp/IHSelVWdEnT7f0iONWxQz6FAqzjCF2iaL+0vFg4V5f2nlgrueY8vj5pNNzSGhrAlxsMxEIp4dj1MXkg==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.13.tgz", + "integrity": "sha512-36P72FLpm5iq85IvoEjBvi22DiqkkEIanJ1M0E8bkxcFHUbjBrYfPY9T6cpPyK5oQqkaTBvNAc3j1BlVD6IH6w==", "cpu": [ "arm64" ], @@ -4828,9 +4688,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.11.tgz", - "integrity": "sha512-0TTy3Ni8ncgaMCchSQ7FK8ZXQLlamy0FXmGWbR58c+pVZWYZltYPTmheJUvVcR0H2+gPAymRKyfC0iLszDALjg==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.13.tgz", + "integrity": "sha512-ye7OgKpDdyA8AMIVVdmD1ICDaFXgoEXORnVO8bBHyul0WN71yUBZMX+YxEx2lpWtiftA2vY/1MAuOR80vHkBCw==", "cpu": [ "x64" ], @@ -4844,9 +4704,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.11.tgz", - "integrity": "sha512-XJLB71uw0rog4DjYAPxFGAuGCBQpgJDlPZZK6MTmZOvI/1t0+DelJ24IjHIxk500YYM26Yv47xPabqFPD7I2zQ==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.13.tgz", + "integrity": "sha512-+x593Jlmu4c3lJtZUKRejWpV2MAij1Js5nmQLLdjo6ChR2D4B2rzj3iMiKn5gITew7fraF9t3fvXALdWh7HmUg==", "cpu": [ "arm" ], @@ -4860,9 +4720,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.11.tgz", - "integrity": "sha512-vYQwzJvm/iu052d5Iw27UFALIN5xSrGkPZXxLNMHPySVko2QMNNBv35HLatkEQHbQ3X+VKSW9J9SkdtAvAVRAQ==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.13.tgz", + "integrity": "sha512-0x8OVw4dfyNerrs/9eZX9wNnmvwbwXSMCi+LbE6Xt1pXOIwvoLtFIXcV3NsrlkFboO3sr5UAQIwDxKqbIZA9pQ==", "cpu": [ "arm64" ], @@ -4876,9 +4736,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.11.tgz", - "integrity": "sha512-eV+KduiRYUFjPsvbZuJ9aknQH9Tj0U2/G9oIZSzLx/18WsYi+upzHbgxmIIHJ2VJgfd7nN40RI/hMtxNsUzR/g==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.13.tgz", + "integrity": "sha512-Z9c4JiequtZvngPcxbCuAOkmWBxi2vInZbjjhD5I+Q9oiJdXUz1t2USGwsGPS41Xvk1BOA3ecK2Sn1ilY3titg==", "cpu": [ "arm64" ], @@ -4892,9 +4752,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.11.tgz", - "integrity": "sha512-WA1iGXZ2HpqM1OR9VCQZJ8sQ1KP2or9O4bO8vWZo6HZJIeoQSo7aa9waaCLRpkZvkng1ct/TF/l6ymqSNFXIzQ==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.13.tgz", + "integrity": "sha512-ChatHtk+vX0Ke5QG+jO+rIapw/KwZsi9MedCBHFXHH6iWF4z8d51cJeN68ykcn+vAXzjNeFNdlNy5Vbkd1zAqg==", "cpu": [ "x64" ], @@ -4908,9 +4768,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.11.tgz", - "integrity": "sha512-UkVJToKf0owwQYRnGvjHAeYVDfeimCEcx0VQSbJoN7Iy0ckRZi7YPlmWJU31xtKvikE2bQWCOVe0qbSDqqcWXA==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.13.tgz", + "integrity": "sha512-0Pz39YR530mXpsztwQkmEKdkkZy4fY4Smdh4pkm6Ly8Nndyo0te/l4bcAGqN24Jp7aVwF/QSy14SAtw4HRjU9g==", "cpu": [ "x64" ], @@ -4924,9 +4784,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.11.tgz", - "integrity": "sha512-35khwkyly7lF5NDSyvIrukBMzxPorgc5iTSDfVO/LvnmN5+fm4lTlrDr4tUfTdOhv3Emy7CsKlsNAeFRJ+Pm+w==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.13.tgz", + "integrity": "sha512-LVZfhlD+jHcAbz5NN+gAJ1BEasB0WpcvUzcsJt0nQSRsojgzPzFjJ+fzEBnvT7SMtqKkrnVJ0OmDYeh88bDRpw==", "cpu": [ "arm64" ], @@ -4940,9 +4800,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.11.tgz", - "integrity": "sha512-Wx8/6f0ufgQF2pbVPsJ2dAmFLwIOW+xBE5fxnb7VnEbGkTgP1qMDWiiAtD9rtvDSuODG3i1AEmAak/2HAc6i6A==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.13.tgz", + "integrity": "sha512-78hxHWUvUZtWsnhcf8DKwhBcNFJw+j4y4fN2B9ioXmBWX2tIyw+BqUHOrismOtjPihaZmwe/Ok2e4qmkawE2fw==", "cpu": [ "ia32" ], @@ -4956,9 +4816,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.11.tgz", - "integrity": "sha512-0xRFW6K9UZQH2NVC/0pVB0GJXS45lY24f+6XaPBF1YnMHd8A8GoHl7ugyM5yNUTe2AKhSgk5fJV00EJt/XBtdQ==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.13.tgz", + "integrity": "sha512-WSfy1u2Xde6jU7UpHIInCUMW98Zw9iZglddKUAvmr1obkZji5U6EX0Oca3asEJdZPFb+2lMLjt0Mh5a1YisROg==", "cpu": [ "x64" ], @@ -5158,9 +5018,9 @@ } }, "node_modules/@testing-library/react": { - "version": "14.2.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.2.2.tgz", - "integrity": "sha512-SOUuM2ysCvjUWBXTNfQ/ztmnKDmqaiPV3SvoIuyxMUca45rbSWWAT/qB8CUs/JQ/ux/8JFs9DNdFQ3f6jH3crA==", + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", @@ -5312,9 +5172,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -5361,9 +5221,9 @@ "dev": true }, "node_modules/@types/mdx": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.12.tgz", - "integrity": "sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "dev": true }, "node_modules/@types/mime": { @@ -5379,9 +5239,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.19.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.29.tgz", - "integrity": "sha512-5pAX7ggTmWZdhUrhRWLPf+5oM7F80bcKVCBbr0zwEkTNzTJL2CWQjznpFgHYy6GrzkYi2Yjy7DHKoynFxqPV8g==", + "version": "18.19.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", + "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -5437,18 +5297,18 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.74", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", - "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", + "version": "18.2.77", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.77.tgz", + "integrity": "sha512-CUT9KUUF+HytDM7WiXKLF9qUSg4tGImwy4FXTlfEDPEkkNUzJ7rVFolYweJ9fS1ljoIaP7M7Rdjc5eUm/Yu5AA==", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.23", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", - "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", + "version": "18.2.25", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.25.tgz", + "integrity": "sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==", "dev": true, "dependencies": { "@types/react": "*" @@ -5608,12 +5468,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", - "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.5.0.tgz", + "integrity": "sha512-7HWwdxXP5yDoe7DTpbif9l6ZmDwCzcSIK38kTSIt6CFEpMjX4EpCgT6wUmS0xTXqMI6E/ONmfgRKmaujpabjZQ==", "dev": true, "dependencies": { - "@vitest/utils": "1.4.0", + "@vitest/utils": "1.5.0", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -5649,9 +5509,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", - "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.5.0.tgz", + "integrity": "sha512-qpv3fSEuNrhAO3FpH6YYRdaECnnRjg9VxbhdtPwPRnzSfHVXnNzzrpX4cJxqiwgRMo7uRMWDFBlsBq4Cr+rO3A==", "dev": true, "dependencies": { "magic-string": "^0.30.5", @@ -5689,9 +5549,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", - "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.5.0.tgz", + "integrity": "sha512-vu6vi6ew5N5MMHJjD5PoakMRKYdmIrNJmyfkhRpQt5d9Ewhw9nZ5Aqynbi3N61bvk9UvZ5UysMT6ayIrZ8GA9w==", "dev": true, "dependencies": { "tinyspy": "^2.2.0" @@ -5701,9 +5561,9 @@ } }, "node_modules/@vitest/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.5.0.tgz", + "integrity": "sha512-BDU0GNL8MWkRkSRdNFvCUCAVOeHaUlVJ9Tx0TYBZyXaaOTmGtUFObzchCivIBrIwKzvZA7A9sCejVhXM2aY98A==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", @@ -5803,14 +5663,6 @@ "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5940,29 +5792,6 @@ "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", "dev": true }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -6412,9 +6241,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", + "version": "1.0.30001608", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz", + "integrity": "sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==", "dev": true, "funding": [ { @@ -6431,23 +6260,6 @@ } ] }, - "node_modules/canvas": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", - "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.17.0", - "simple-get": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/chai": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", @@ -6682,17 +6494,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6795,14 +6596,6 @@ "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -6960,20 +6753,6 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -7183,14 +6962,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -7228,17 +6999,6 @@ "node": ">=8" } }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-package-manager": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", @@ -7410,9 +7170,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.724", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz", - "integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA==", + "version": "1.4.734", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.734.tgz", + "integrity": "sha512-pYfGUc+ll8AOzLbLC0lfgwkvCZIV+sKGuFFsSNuF3K3ujrmem8jIjg/t6DNq0J7biTSS1hCt/Hts0nmA3ZyprQ==", "dev": true }, "node_modules/emoji-regex": { @@ -7452,9 +7212,9 @@ } }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -7996,9 +7756,9 @@ } }, "node_modules/flow-parser": { - "version": "0.232.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.232.0.tgz", - "integrity": "sha512-U8vcKyYdM+Kb0tPzfPJ5JyPMU0uXKwHxp0L6BcEc+wBlbTW9qRhOqV5DeGXclgclVvtqQNGEG8Strj/b6c/IxA==", + "version": "0.233.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.233.0.tgz", + "integrity": "sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -8160,66 +7920,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -8510,14 +8210,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -9747,9 +9439,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.9.tgz", + "integrity": "sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -9894,20 +9586,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -10029,14 +9707,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nan": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", - "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -10158,23 +9828,6 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -10217,20 +9870,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", @@ -10870,9 +10509,9 @@ } }, "node_modules/plotly.js-dist-min": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/plotly.js-dist-min/-/plotly.js-dist-min-2.30.1.tgz", - "integrity": "sha512-xWLni6EpBDwG/EdjCBTu+GK1Asuqswgh+YC77t0UAxa5OFFgpjYkVuvozZmkWqT9TKpvzjxkK4LLGv5Rn+yo7Q==" + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/plotly.js-dist-min/-/plotly.js-dist-min-2.31.0.tgz", + "integrity": "sha512-FFP8muGsGhOaH3USCVdyDY0FwEqQkX2VvQNVZz9N3gwAEcKabyS8965YSONtVAOP4tXMnBoJl/jGdnMtC4cgkA==" }, "node_modules/polished": { "version": "4.3.1", @@ -11701,9 +11340,9 @@ } }, "node_modules/rollup": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.0.tgz", - "integrity": "sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz", + "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -11716,21 +11355,21 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.0", - "@rollup/rollup-android-arm64": "4.14.0", - "@rollup/rollup-darwin-arm64": "4.14.0", - "@rollup/rollup-darwin-x64": "4.14.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.0", - "@rollup/rollup-linux-arm64-gnu": "4.14.0", - "@rollup/rollup-linux-arm64-musl": "4.14.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.0", - "@rollup/rollup-linux-riscv64-gnu": "4.14.0", - "@rollup/rollup-linux-s390x-gnu": "4.14.0", - "@rollup/rollup-linux-x64-gnu": "4.14.0", - "@rollup/rollup-linux-x64-musl": "4.14.0", - "@rollup/rollup-win32-arm64-msvc": "4.14.0", - "@rollup/rollup-win32-ia32-msvc": "4.14.0", - "@rollup/rollup-win32-x64-msvc": "4.14.0", + "@rollup/rollup-android-arm-eabi": "4.14.1", + "@rollup/rollup-android-arm64": "4.14.1", + "@rollup/rollup-darwin-arm64": "4.14.1", + "@rollup/rollup-darwin-x64": "4.14.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.1", + "@rollup/rollup-linux-arm64-gnu": "4.14.1", + "@rollup/rollup-linux-arm64-musl": "4.14.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1", + "@rollup/rollup-linux-riscv64-gnu": "4.14.1", + "@rollup/rollup-linux-s390x-gnu": "4.14.1", + "@rollup/rollup-linux-x64-gnu": "4.14.1", + "@rollup/rollup-linux-x64-musl": "4.14.1", + "@rollup/rollup-win32-arm64-msvc": "4.14.1", + "@rollup/rollup-win32-ia32-msvc": "4.14.1", + "@rollup/rollup-win32-x64-msvc": "4.14.1", "fsevents": "~2.3.2" } }, @@ -11884,14 +11523,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11993,41 +11624,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "peer": true - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -12161,12 +11757,12 @@ "dev": true }, "node_modules/storybook": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.0.5.tgz", - "integrity": "sha512-rdxfjkED5CBKj6T01NKr9MRakyXkffV8dvLXj5bWN4AlQ1OOm5Sw9B1z+rQ/FN7RYIU5b63xiX2pu3gy5t6nRQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.0.8.tgz", + "integrity": "sha512-9gTnnAakJBtMCg8oPGqnpy7g/C3Tj2IWiVflHiFg1SDD9zXBoc4mZhaYPTne4LRBUhXk7XuFagKfiRN2V/MuKA==", "dev": true, "dependencies": { - "@storybook/cli": "8.0.5" + "@storybook/cli": "8.0.8" }, "bin": { "sb": "index.js", @@ -12716,9 +12312,9 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13002,9 +12598,9 @@ } }, "node_modules/vite": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", - "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz", + "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==", "dev": true, "dependencies": { "esbuild": "^0.20.1", @@ -13057,9 +12653,9 @@ } }, "node_modules/vite-node": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz", - "integrity": "sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.0.tgz", + "integrity": "sha512-tV8h6gMj6vPzVCa7l+VGq9lwoJjW8Y79vst8QZZGiuRAfijU+EEWuc0kFpmndQrWhMMhet1jdSF+40KSZUqIIw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -13079,16 +12675,16 @@ } }, "node_modules/vitest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", - "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.5.0.tgz", + "integrity": "sha512-d8UKgR0m2kjdxDWX6911uwxout6GHS0XaGH1cksSIVVG8kRlE7G7aBw7myKQCvDI5dT4j7ZMa+l706BIORMDLw==", "dev": true, "dependencies": { - "@vitest/expect": "1.4.0", - "@vitest/runner": "1.4.0", - "@vitest/snapshot": "1.4.0", - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/expect": "1.5.0", + "@vitest/runner": "1.5.0", + "@vitest/snapshot": "1.5.0", + "@vitest/spy": "1.5.0", + "@vitest/utils": "1.5.0", "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", @@ -13100,9 +12696,9 @@ "std-env": "^3.5.0", "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.2", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.4.0", + "vite-node": "1.5.0", "why-is-node-running": "^2.2.2" }, "bin": { @@ -13117,8 +12713,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.4.0", - "@vitest/ui": "1.4.0", + "@vitest/browser": "1.5.0", + "@vitest/ui": "1.5.0", "happy-dom": "*", "jsdom": "*" }, @@ -13144,13 +12740,13 @@ } }, "node_modules/vitest/node_modules/@vitest/expect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", - "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.5.0.tgz", + "integrity": "sha512-0pzuCI6KYi2SIC3LQezmxujU9RK/vwC1U9R0rLuGlNGcOuDWxqWKu6nUdFsX9tH1WU0SXtAxToOsEjeUn1s3hA==", "dev": true, "dependencies": { - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", + "@vitest/spy": "1.5.0", + "@vitest/utils": "1.5.0", "chai": "^4.3.10" }, "funding": { @@ -13488,55 +13084,6 @@ "node": ">=8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/tslib/react/src/MockStudies.ts b/tslib/react/src/MockStudies.ts index 49b86111..367262f7 100644 --- a/tslib/react/src/MockStudies.ts +++ b/tslib/react/src/MockStudies.ts @@ -28,5 +28,15 @@ const useMockStudies = () => { export const useMockStudy = (studyId: number | undefined) => { const mockStudies = useMockStudies() - return mockStudies.find((study) => study.study_id === studyId) + const mockStudy = mockStudies.find((study) => study.study_id === studyId) + const mockImportance: Optuna.ParamImportance[][] = [ + [ + { name: "dropout_l0", importance: 0.07990265450296263 }, + { name: "lr", importance: 0.07328545409147895 }, + { name: "n_layers", importance: 0.028260844392780343 }, + { name: "n_units_l0", importance: 0.1600821009129565 }, + { name: "optimizer", importance: 0.3296378694329876 }, + ], + ] + return { study: mockStudy, importance: mockImportance } } diff --git a/tslib/react/src/components/PlotHistory.stories.tsx b/tslib/react/src/components/PlotHistory.stories.tsx index 44d64945..1ef2c643 100644 --- a/tslib/react/src/components/PlotHistory.stories.tsx +++ b/tslib/react/src/components/PlotHistory.stories.tsx @@ -1,5 +1,8 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" import { Meta, StoryObj } from "@storybook/react" +import React from "react" import { useMockStudy } from "../MockStudies" +import { lightTheme } from "../styles/lightTheme" import { PlotHistory } from "./PlotHistory" const meta: Meta = { @@ -8,14 +11,17 @@ const meta: Meta = { tags: ["autodocs"], decorators: [ (Story, storyContext) => { - const study = useMockStudy(storyContext.parameters?.studyId) + const { study } = useMockStudy(storyContext.parameters?.studyId) if (!study) return

loading...

return ( - + + + + ) }, ], @@ -24,7 +30,7 @@ const meta: Meta = { export default meta type Story = StoryObj -export const MockStudy1: Story = { +export const MockStudyExample1: Story = { parameters: { studyId: 1, }, diff --git a/tslib/react/src/components/PlotHistoryDark.stories.tsx b/tslib/react/src/components/PlotHistoryDark.stories.tsx index a25c217e..8a62c1e1 100644 --- a/tslib/react/src/components/PlotHistoryDark.stories.tsx +++ b/tslib/react/src/components/PlotHistoryDark.stories.tsx @@ -1,5 +1,6 @@ -import { ThemeProvider } from "@mui/material" +import { CssBaseline, ThemeProvider } from "@mui/material" import { Meta, StoryObj } from "@storybook/react" +import React from "react" import { useMockStudy } from "../MockStudies" import { darkTheme } from "../styles/darkTheme" import { PlotHistory } from "./PlotHistory" @@ -10,10 +11,11 @@ const meta: Meta = { tags: ["autodocs"], decorators: [ (Story, storyContext) => { - const study = useMockStudy(storyContext.parameters?.studyId) + const { study } = useMockStudy(storyContext.parameters?.studyId) if (!study) return

loading...

return ( + = { export default meta type Story = StoryObj -export const MockStudy1: Story = { +export const MockStudyExample1: Story = { parameters: { studyId: 1, }, diff --git a/tslib/react/src/components/PlotImportance.stories.tsx b/tslib/react/src/components/PlotImportance.stories.tsx new file mode 100644 index 00000000..a8753002 --- /dev/null +++ b/tslib/react/src/components/PlotImportance.stories.tsx @@ -0,0 +1,40 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" +import { Meta, StoryObj } from "@storybook/react" +import React from "react" +import { useMockStudy } from "../MockStudies" +import { lightTheme } from "../styles/lightTheme" +import { PlotImportance } from "./PlotImportance" + +const meta: Meta = { + component: PlotImportance, + title: "PlotImportance", + tags: ["autodocs"], + decorators: [ + (Story, storyContext) => { + const { study, importance } = useMockStudy( + storyContext.parameters?.studyId + ) + if (!study) return

loading...

+ return ( + + + + + ) + }, + ], +} + +export default meta +type Story = StoryObj + +export const MockStudyExample1: Story = { + parameters: { + studyId: 1, + }, +} diff --git a/standalone_app/src/components/PlotImportance.tsx b/tslib/react/src/components/PlotImportance.tsx similarity index 51% rename from standalone_app/src/components/PlotImportance.tsx rename to tslib/react/src/components/PlotImportance.tsx index b69783ce..f923e78d 100644 --- a/standalone_app/src/components/PlotImportance.tsx +++ b/tslib/react/src/components/PlotImportance.tsx @@ -1,55 +1,19 @@ import { Box, Typography, useTheme } from "@mui/material" -import { plotlyDarkTemplate } from "@optuna/react" -import init, { wasm_fanova_calculate } from "optuna" +import * as Optuna from "@optuna/types" import * as plotly from "plotly.js-dist-min" -import React, { FC, useEffect, useState } from "react" +import { FC, useEffect } from "react" +import { plotlyDarkTemplate } from "./PlotlyDarkMode" const plotDomId = "graph-hyperparameter-importances" -export const PlotImportance: FC<{ study: Study }> = ({ study }) => { +export const PlotImportance: FC<{ + study: Optuna.Study + importance: Optuna.ParamImportance[][] +}> = ({ study, importance }) => { const theme = useTheme() const objectiveNames: string[] = study.directions.map( - (d, i) => `Objective ${i}` + (_d, i) => `Objective ${i}` ) - const [importance, setImportance] = useState([]) - - useEffect(() => { - async function run_wasm() { - await init() - - const x: ParamImportance[][] = study.directions.map((d, objectiveId) => { - const filteredTrials = study.trials.filter((t) => - filterFunc(t, objectiveId) - ) - if (filteredTrials.length === 0) { - return study.union_search_space.map((s) => { - return { - name: s.name, - importance: 0.5, - } - }) - } - - const features = study.intersection_search_space.map((s) => - filteredTrials - .map((t) => t.params.find((p) => p.name === s.name) as TrialParam) - .map((p) => p.param_internal_value) - ) - const values = filteredTrials.map( - (t) => t.values?.[objectiveId] as number - ) - // TODO: handle errors thrown by wasm_fanova_calculate - const importance = wasm_fanova_calculate(features, values) - return study.intersection_search_space.map((s, i) => ({ - name: s.name, - importance: importance[i], - })) - }) - setImportance(x) - } - - run_wasm() - }, [study]) useEffect(() => { if (importance.length > 0) { @@ -70,22 +34,8 @@ export const PlotImportance: FC<{ study: Study }> = ({ study }) => { ) } -const filterFunc = (trial: Trial, objectiveId: number): boolean => { - if (trial.state !== "Complete" && trial.state !== "Pruned") { - return false - } - if (trial.values === undefined) { - return false - } - return ( - trial.values.length > objectiveId && - trial.values[objectiveId] !== Infinity && - trial.values[objectiveId] !== -Infinity - ) -} - const plotParamImportancesBeta = ( - importances: ParamImportance[][], + importances: Optuna.ParamImportance[][], objectiveNames: string[], mode: string ) => { diff --git a/tslib/react/src/components/PlotImportanceDark.stories.tsx b/tslib/react/src/components/PlotImportanceDark.stories.tsx new file mode 100644 index 00000000..3bd1d194 --- /dev/null +++ b/tslib/react/src/components/PlotImportanceDark.stories.tsx @@ -0,0 +1,43 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" +import { Meta, StoryObj } from "@storybook/react" +import React from "react" +import { useMockStudy } from "../MockStudies" +import { darkTheme } from "../styles/darkTheme" +import { PlotImportance } from "./PlotImportance" + +const meta: Meta = { + component: PlotImportance, + title: "PlotImportanceDark", + tags: ["autodocs"], + decorators: [ + (Story, storyContext) => { + const { study, importance } = useMockStudy( + storyContext.parameters?.studyId + ) + if (!study) return

loading...

+ return ( + + + + + ) + }, + ], + parameters: { + backgrounds: { default: "dark" }, + }, +} + +export default meta +type Story = StoryObj + +export const MockStudyExample1: Story = { + parameters: { + studyId: 1, + }, +} diff --git a/tslib/react/src/components/PlotIntermediateValues.stories.tsx b/tslib/react/src/components/PlotIntermediateValues.stories.tsx new file mode 100644 index 00000000..cf33f43a --- /dev/null +++ b/tslib/react/src/components/PlotIntermediateValues.stories.tsx @@ -0,0 +1,39 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" +import { Meta, StoryObj } from "@storybook/react" +import React from "react" +import { useMockStudy } from "../MockStudies" +import { lightTheme } from "../styles/lightTheme" +import { PlotIntermediateValues } from "./PlotIntermediateValues" + +const meta: Meta = { + component: PlotIntermediateValues, + title: "PlotIntermediateValues", + tags: ["autodocs"], + decorators: [ + (Story, storyContext) => { + const { study } = useMockStudy(storyContext.parameters?.studyId) + if (!study) return

loading...

+ return ( + + + + + ) + }, + ], +} + +export default meta +type Story = StoryObj + +export const MockStudyExample1: Story = { + parameters: { + studyId: 1, + }, +} diff --git a/standalone_app/src/components/PlotIntermediateValues.tsx b/tslib/react/src/components/PlotIntermediateValues.tsx similarity index 92% rename from standalone_app/src/components/PlotIntermediateValues.tsx rename to tslib/react/src/components/PlotIntermediateValues.tsx index 1330dfa2..d91c4506 100644 --- a/standalone_app/src/components/PlotIntermediateValues.tsx +++ b/tslib/react/src/components/PlotIntermediateValues.tsx @@ -1,12 +1,13 @@ import { Box, Typography, useTheme } from "@mui/material" -import { plotlyDarkTemplate } from "@optuna/react" +import * as Optuna from "@optuna/types" import * as plotly from "plotly.js-dist-min" -import React, { FC, useEffect } from "react" +import { FC, useEffect } from "react" +import { plotlyDarkTemplate } from "./PlotlyDarkMode" const plotDomId = "graph-intermediate-values" export const PlotIntermediateValues: FC<{ - trials: Trial[] + trials: Optuna.Trial[] includePruned: boolean logScale: boolean }> = ({ trials, includePruned, logScale }) => { @@ -36,7 +37,7 @@ export const PlotIntermediateValues: FC<{ } const plotIntermediateValue = ( - trials: Trial[], + trials: Optuna.Trial[], mode: string, filterCompleteTrial: boolean, filterPrunedTrial: boolean, diff --git a/tslib/react/src/components/PlotIntermediateValuesDark.stories.tsx b/tslib/react/src/components/PlotIntermediateValuesDark.stories.tsx new file mode 100644 index 00000000..bce8bf32 --- /dev/null +++ b/tslib/react/src/components/PlotIntermediateValuesDark.stories.tsx @@ -0,0 +1,42 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" +import { Meta, StoryObj } from "@storybook/react" +import React from "react" +import { useMockStudy } from "../MockStudies" +import { darkTheme } from "../styles/darkTheme" +import { PlotIntermediateValues } from "./PlotIntermediateValues" + +const meta: Meta = { + component: PlotIntermediateValues, + title: "PlotIntermediateValuesDark", + tags: ["autodocs"], + decorators: [ + (Story, storyContext) => { + const { study } = useMockStudy(storyContext.parameters?.studyId) + if (!study) return

loading...

+ return ( + + + + + ) + }, + ], + parameters: { + backgrounds: { default: "dark" }, + }, +} + +export default meta +type Story = StoryObj + +export const MockStudyExample1: Story = { + parameters: { + studyId: 1, + }, +} diff --git a/tslib/react/src/components/TrialTable.stories.tsx b/tslib/react/src/components/TrialTable.stories.tsx index 6ea1ee73..46774b3d 100644 --- a/tslib/react/src/components/TrialTable.stories.tsx +++ b/tslib/react/src/components/TrialTable.stories.tsx @@ -1,5 +1,8 @@ +import { CssBaseline, ThemeProvider } from "@mui/material" import { Meta, StoryObj } from "@storybook/react" +import React from "react" import { useMockStudy } from "../MockStudies" +import { lightTheme } from "../styles/lightTheme" import { TrialTable } from "./TrialTable" const meta: Meta = { @@ -8,14 +11,17 @@ const meta: Meta = { tags: ["autodocs"], decorators: [ (Story, storyContext) => { - const study = useMockStudy(storyContext.parameters?.studyId) + const { study } = useMockStudy(storyContext.parameters?.studyId) if (!study) return

loading...

return ( - + + + + ) }, ], @@ -24,7 +30,7 @@ const meta: Meta = { export default meta type Story = StoryObj -export const MockStudy1: Story = { +export const MockStudyExample1: Story = { parameters: { studyId: 1, }, diff --git a/tslib/react/src/components/TrialTableDark.stories.tsx b/tslib/react/src/components/TrialTableDark.stories.tsx index 8c671da4..75aa4450 100644 --- a/tslib/react/src/components/TrialTableDark.stories.tsx +++ b/tslib/react/src/components/TrialTableDark.stories.tsx @@ -1,5 +1,6 @@ -import { ThemeProvider } from "@mui/material" +import { CssBaseline, ThemeProvider } from "@mui/material" import { Meta, StoryObj } from "@storybook/react" +import React from "react" import { useMockStudy } from "../MockStudies" import { darkTheme } from "../styles/darkTheme" import { TrialTable } from "./TrialTable" @@ -10,10 +11,11 @@ const meta: Meta = { tags: ["autodocs"], decorators: [ (Story, storyContext) => { - const study = useMockStudy(storyContext.parameters?.studyId) + const { study } = useMockStudy(storyContext.parameters?.studyId) if (!study) return

loading...

return ( + = { export default meta type Story = StoryObj -export const MockStudy1: Story = { +export const MockStudyExample1: Story = { parameters: { studyId: 1, }, diff --git a/tslib/react/src/index.ts b/tslib/react/src/index.ts index a45638ab..4d6401fd 100644 --- a/tslib/react/src/index.ts +++ b/tslib/react/src/index.ts @@ -1,5 +1,7 @@ export { DataGrid } from "./components/DataGrid" export type { DataGridColumn } from "./components/DataGrid" -export { PlotHistory } from "./components/PlotHistory" -export { TrialTable } from "./components/TrialTable" export { plotlyDarkTemplate } from "./components/PlotlyDarkMode" +export { PlotHistory } from "./components/PlotHistory" +export { PlotImportance } from "./components/PlotImportance" +export { PlotIntermediateValues } from "./components/PlotIntermediateValues" +export { TrialTable } from "./components/TrialTable" diff --git a/tslib/react/src/styles/darkTheme.ts b/tslib/react/src/styles/darkTheme.ts index b09d2a3e..d664daec 100644 --- a/tslib/react/src/styles/darkTheme.ts +++ b/tslib/react/src/styles/darkTheme.ts @@ -1,7 +1,11 @@ import { createTheme } from "@mui/material" +import blue from "@mui/material/colors/blue" +import pink from "@mui/material/colors/pink" export const darkTheme = createTheme({ palette: { mode: "dark", + primary: blue, + secondary: pink, }, }) diff --git a/tslib/react/src/styles/lightTheme.ts b/tslib/react/src/styles/lightTheme.ts new file mode 100644 index 00000000..1330dfca --- /dev/null +++ b/tslib/react/src/styles/lightTheme.ts @@ -0,0 +1,11 @@ +import { createTheme } from "@mui/material" +import blue from "@mui/material/colors/blue" +import pink from "@mui/material/colors/pink" + +export const lightTheme = createTheme({ + palette: { + mode: "light", + primary: blue, + secondary: pink, + }, +}) diff --git a/tslib/react/test/PlotImportance.test.tsx b/tslib/react/test/PlotImportance.test.tsx new file mode 100644 index 00000000..5b2d26ab --- /dev/null +++ b/tslib/react/test/PlotImportance.test.tsx @@ -0,0 +1,44 @@ +import * as Optuna from "@optuna/types" +import { render, screen } from "@testing-library/react" +import React from "react" +import { describe, expect, test } from "vitest" +import { PlotImportance } from "../src/components/PlotImportance" + +describe("PlotImportance Tests", async () => { + const setup = ({ + study, + importance, + dataTestId, + }: { + study: Optuna.Study + importance: Optuna.ParamImportance[][] + dataTestId: string + }) => { + const Wrapper = ({ + dataTestId, + children, + }: { + dataTestId: string + children: React.ReactNode + }) =>
{children}
+ return render( + + + + ) + } + + for (const study of window.mockStudies) { + test(`PlotImportance (study name: ${study.study_name})`, () => { + const importance = window.mockImportances[study.study_name] ?? [] + setup({ + study, + importance, + dataTestId: `plot-importance-${study.study_id}`, + }) + expect( + screen.getByTestId(`plot-importance-${study.study_id}`) + ).toBeInTheDocument() + }) + } +}) diff --git a/tslib/react/test/PlotIntermediateValues.test.tsx b/tslib/react/test/PlotIntermediateValues.test.tsx new file mode 100644 index 00000000..c98b726f --- /dev/null +++ b/tslib/react/test/PlotIntermediateValues.test.tsx @@ -0,0 +1,38 @@ +import * as Optuna from "@optuna/types" +import { render, screen } from "@testing-library/react" +import React from "react" +import { describe, expect, test } from "vitest" +import { PlotIntermediateValues } from "../src/components/PlotIntermediateValues" + +describe("PlotIntermediateValues Tests", async () => { + const setup = ({ + study, + dataTestId, + }: { study: Optuna.Study; dataTestId: string }) => { + const Wrapper = ({ + dataTestId, + children, + }: { + dataTestId: string + children: React.ReactNode + }) =>
{children}
+ return render( + + + + ) + } + + for (const study of window.mockStudies) { + test(`PlotIntermediateValues (study name: ${study.study_name})`, () => { + setup({ study, dataTestId: `plot-intermediatevalues-${study.study_id}` }) + expect( + screen.getByTestId(`plot-intermediatevalues-${study.study_id}`) + ).toBeInTheDocument() + }) + } +}) diff --git a/tslib/react/test/generate_assets.py b/tslib/react/test/generate_assets.py index b1d22399..f7bdc33f 100644 --- a/tslib/react/test/generate_assets.py +++ b/tslib/react/test/generate_assets.py @@ -1,3 +1,4 @@ +import json import logging import math import os.path @@ -7,6 +8,8 @@ from typing import Tuple import optuna from optuna.distributions import CategoricalDistribution from optuna.distributions import FloatDistribution +from optuna.importance import get_param_importances +from optuna.importance import PedAnovaImportanceEvaluator from optuna.storages import BaseStorage from optuna.storages import JournalFileStorage from optuna.storages import JournalStorage @@ -22,7 +25,9 @@ def remove_assets() -> None: os.mkdir(BASE_DIR) -def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStorage: +def create_optuna_storage( + storage: BaseStorage, params_importances: dict[str, list[dict[str, float]]] +) -> optuna.storages.InMemoryStorage: # Single-objective study study = optuna.create_study( study_name="single-objective", storage=storage, sampler=optuna.samplers.RandomSampler() @@ -35,6 +40,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective_single, n_trials=100) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single-objective study with dynamic search space study = optuna.create_study( @@ -49,6 +62,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return -((trial.suggest_float("x2", -10, 0) + 5) ** 2) study.optimize(objective_single_dynamic, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] study = optuna.create_study( study_name="check-rank-plot", storage=storage, sampler=optuna.samplers.RandomSampler() @@ -64,6 +85,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective_single, n_trials=1000) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single-objective study study = optuna.create_study(study_name="single-objective-user-attrs", storage=storage) @@ -79,6 +108,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective_single_user_attr, n_trials=100) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single objective study with 'inf', '-inf', or 'nan' value study = optuna.create_study(study_name="single-inf", storage=storage) @@ -93,6 +130,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return x**2 study.optimize(objective_single_inf, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single objective pruned after reported 'inf', '-inf', or 'nan' study = optuna.create_study(study_name="single-inf-report", storage=storage) @@ -112,6 +157,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return x**2 study.optimize(objective_single_inf_report, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single objective with reported nan value study = optuna.create_study(study_name="single-nan-report", storage=storage) @@ -124,6 +177,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective_single_nan_report, n_trials=100) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single-objective study with 1 parameter study = optuna.create_study( @@ -135,6 +196,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return -((x1 - 2) ** 2) study.optimize(objective_single_with_1param, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Single-objective study with 1 parameter study = optuna.create_study(study_name="long-parameter-names", storage=storage) @@ -149,6 +218,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return (x1 - 2) ** 2 + (x2 - 5) ** 2 study.optimize(objective_long_parameter_names, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Multi-objective study study = optuna.create_study( @@ -166,6 +243,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return v0, v1 study.optimize(objective_multi, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Multi-objective study with dynamic search space study = optuna.create_study( @@ -188,6 +273,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return v0, v1 study.optimize(objective_multi_dynamic, n_trials=50) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Pruning with no intermediate values study = optuna.create_study(study_name="binh-korn-function-with-constraints", storage=storage) @@ -201,6 +294,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return v study.optimize(objective_prune_with_no_trials, n_trials=100) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # With failed trials study = optuna.create_study(study_name="failed trials", storage=storage) @@ -214,6 +315,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return v study.optimize(objective_sometimes_got_failed, n_trials=100, catch=(Exception,)) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # No trials single-objective study study = optuna.create_study(study_name="no trials single-objective study", storage=storage) @@ -251,6 +360,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return v0 study.optimize(objective_constraints, n_trials=100) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] # Study with Running Trials study = optuna.create_study( @@ -284,6 +401,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return 0.0 study.optimize(objective_intermediate_values, n_trials=10) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] trial = study.ask( {"x": FloatDistribution(0, 10), "y": CategoricalDistribution(["Foo", "Bar"])} ) # To create a running trial @@ -308,6 +433,14 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora return 0.0 study.optimize(objective_intermediate_values_constraints, n_trials=10) + params_importances[study.study_name] = [ + get_param_importances( + study, + target=lambda trial: trial.values[objective_id], + evaluator=PedAnovaImportanceEvaluator(), + ) + for objective_id in range(len(study.directions)) + ] trial = study.ask( {"x": FloatDistribution(0, 10), "y": CategoricalDistribution(["Foo", "Bar"])} ) # To create a running trial @@ -318,7 +451,11 @@ def create_optuna_storage(storage: BaseStorage) -> optuna.storages.InMemoryStora def main() -> None: remove_assets() storage = JournalStorage(JournalFileStorage(os.path.join(BASE_DIR, "journal.log"))) - create_optuna_storage(storage) + params_importances: dict[str, dict[str, float]] = {} + create_optuna_storage(storage, params_importances) + + with open(os.path.join(BASE_DIR, "params_importances.json"), "w") as f: + json.dump(params_importances, f, indent=2) if __name__ == "__main__": diff --git a/tslib/react/test/setup_studies.ts b/tslib/react/test/setup_studies.ts index f46bb6b1..e3c77059 100644 --- a/tslib/react/test/setup_studies.ts +++ b/tslib/react/test/setup_studies.ts @@ -5,14 +5,15 @@ import { loadStorageFromFile } from "../src/utils/loadStorageFromFile" declare global { interface Window { mockStudies: Optuna.Study[] + mockImportances: Record } } -const data = fs.readFileSync("./test/asset/journal.log") -const blob = new Blob([data]) -const file = new File([blob], "journal.log") +const journalData = fs.readFileSync("./test/asset/journal.log") +const journalBlob = new Blob([journalData]) +const journalFile = new File([journalBlob], "journal.log") const mockStudies: Optuna.Study[] = [] -await loadStorageFromFile(file, (value) => { +await loadStorageFromFile(journalFile, (value) => { if (Array.isArray(value)) { mockStudies.push(...value) } else { @@ -21,6 +22,22 @@ await loadStorageFromFile(file, (value) => { }) window.mockStudies = mockStudies +const importancesData = fs.readFileSync("./test/asset/params_importances.json") +const importancesJson = JSON.parse(importancesData.toString()) +const mockImportances: Record = {} +for (const key in importancesJson) { + mockImportances[key] = importancesJson[key].map( + (importance: Record) => { + const importanceArray: Optuna.ParamImportance[] = [] + for (const name in importance) { + importanceArray.push({ name, importance: importance[name] }) + } + return importanceArray + } + ) +} +window.mockImportances = mockImportances + // mock window.URL.createObjectURL in JSDOM window.HTMLCanvasElement.prototype.getContext = () => null window.URL.createObjectURL = () => ""