From a85c63dc56e8ddbe65e2673c839097fb52547b9d1ee27ec3f25099a47c7bdb39 Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Fri, 9 Aug 2024 11:01:51 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:cockpit/cockpit-tukit?expand=0&rev=23 --- 38.patch | 31729 ++++++++++++++++++++++ cockpit-tukit-0.1.2~git0.647b3e3.tar.xz | 4 +- cockpit-tukit.spec | 3 +- node_modules.obscpio | 4 +- node_modules.spec.inc | 894 +- node_modules.sums | 402 +- package-lock.json | 12559 +++++---- 7 files changed, 40244 insertions(+), 5351 deletions(-) create mode 100644 38.patch diff --git a/38.patch b/38.patch new file mode 100644 index 0000000..76843c6 --- /dev/null +++ b/38.patch @@ -0,0 +1,31729 @@ +From ba895fd10a68c031db1f6dc980a712dbc1cd41d7 Mon Sep 17 00:00:00 2001 +From: Luna +Date: Mon, 22 Jul 2024 14:22:47 +0530 +Subject: [PATCH 1/6] switch to biome + +--- + biome.json | 25 +++++++ + package-lock.json | 176 +++++++++++++++++++++++++++++++++++++++++++--- + package.json | 12 ++-- + 3 files changed, 197 insertions(+), 16 deletions(-) + create mode 100644 biome.json + +diff --git a/biome.json b/biome.json +new file mode 100644 +index 0000000..ca3ad19 +--- /dev/null ++++ b/biome.json +@@ -0,0 +1,25 @@ ++{ ++ "$schema": "./node_modules/rome/configuration_schema.json", ++ "organizeImports": { ++ "enabled": false ++ }, ++ "linter": { ++ "enabled": true, ++ "rules": { ++ "recommended": true, ++ "suspicious": { ++ "noExplicitAny": "off", ++ "noAssignInExpressions": "off", ++ "noShadowRestrictedNames": "off" ++ }, ++ "style": { ++ "noParameterAssign": "off" ++ } ++ }, ++ "ignore": ["pkg/*", "dist", "test/common"] ++ }, ++ "formatter": { ++ "enabled": true, ++ "ignore": ["pkg/*", "dist", "test/common"] ++ } ++} +diff --git a/package-lock.json b/package-lock.json +index c77506f..fe1d149 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -19,6 +19,7 @@ + }, + "devDependencies": { + "@babel/preset-typescript": "^7.21.4", ++ "@biomejs/biome": "1.8.3", + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "argparse": "^2.0.1", +@@ -548,6 +549,161 @@ + "node": ">=6.9.0" + } + }, ++ "node_modules/@biomejs/biome": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.8.3.tgz", ++ "integrity": "sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==", ++ "dev": true, ++ "hasInstallScript": true, ++ "bin": { ++ "biome": "bin/biome" ++ }, ++ "engines": { ++ "node": ">=14.21.3" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/biome" ++ }, ++ "optionalDependencies": { ++ "@biomejs/cli-darwin-arm64": "1.8.3", ++ "@biomejs/cli-darwin-x64": "1.8.3", ++ "@biomejs/cli-linux-arm64": "1.8.3", ++ "@biomejs/cli-linux-arm64-musl": "1.8.3", ++ "@biomejs/cli-linux-x64": "1.8.3", ++ "@biomejs/cli-linux-x64-musl": "1.8.3", ++ "@biomejs/cli-win32-arm64": "1.8.3", ++ "@biomejs/cli-win32-x64": "1.8.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-darwin-arm64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz", ++ "integrity": "sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==", ++ "cpu": [ ++ "arm64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "darwin" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-darwin-x64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz", ++ "integrity": "sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "darwin" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-linux-arm64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz", ++ "integrity": "sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==", ++ "cpu": [ ++ "arm64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-linux-arm64-musl": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz", ++ "integrity": "sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==", ++ "cpu": [ ++ "arm64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-linux-x64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz", ++ "integrity": "sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-linux-x64-musl": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.3.tgz", ++ "integrity": "sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-win32-arm64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz", ++ "integrity": "sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==", ++ "cpu": [ ++ "arm64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "win32" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, ++ "node_modules/@biomejs/cli-win32-x64": { ++ "version": "1.8.3", ++ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz", ++ "integrity": "sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "win32" ++ ], ++ "engines": { ++ "node": ">=14.21.3" ++ } ++ }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", +@@ -1604,12 +1760,12 @@ + } + }, + "node_modules/braces": { +- "version": "3.0.2", +- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", +- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", ++ "version": "3.0.3", ++ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", ++ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { +- "fill-range": "^7.0.1" ++ "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" +@@ -2290,9 +2446,9 @@ + } + }, + "node_modules/fill-range": { +- "version": "7.0.1", +- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", +- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", ++ "version": "7.1.1", ++ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", ++ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" +@@ -4812,9 +4968,9 @@ + "dev": true + }, + "node_modules/ws": { +- "version": "7.5.9", +- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", +- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", ++ "version": "7.5.10", ++ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", ++ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "engines": { + "node": ">=8.3.0" +diff --git a/package.json b/package.json +index 90a47a2..b3d3af6 100644 +--- a/package.json ++++ b/package.json +@@ -9,26 +9,26 @@ + "scripts": { + "watch": "ESBUILD_WATCH='true' ./build.js", + "build": "tsc -noEmit && ./build.js", +- "lint": "rome check .", +- "format": "rome format . --write", ++ "lint": "biome check .", ++ "format": "biome format . --write", + "postinstall": "patch-package" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.21.4", ++ "@biomejs/biome": "1.8.3", + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "argparse": "^2.0.1", + "chrome-remote-interface": "^0.32.1", ++ "esbuild": "^0.18.6", + "esbuild-plugin-copy": "^2.1.1", + "esbuild-plugin-replace": "^1.3.0", + "esbuild-sass-plugin": "^2.10.0", +- "esbuild": "^0.18.6", ++ "gettext-parser": "7.0.1", + "htmlparser": "^1.7.7", + "jed": "^1.1.1", + "patch-package": "^7.0.2", + "qunit": "^2.9.3", +- "gettext-parser": "7.0.1", +- "rome": "^12.0.0", + "sass": "^1.61.0", + "sizzle": "^2.3.3", + "ts-loader": "^9.4.2", +@@ -48,4 +48,4 @@ + "react-dom": "18.2.0", + "react-xml-parser": "^1.1.8" + } +-} ++} +\ No newline at end of file + +From 0f9ce4701334cdb25366011ae92ac0661139f7cc Mon Sep 17 00:00:00 2001 +From: Luna +Date: Mon, 22 Jul 2024 15:06:54 +0530 +Subject: [PATCH 2/6] fix biome lint and run formatter + +--- + biome.json | 8 ++- + package.json | 100 ++++++++++++++++---------------- + rome.json | 25 -------- + src/app.tsx | 26 +++++---- + src/components/SnapshotItem.tsx | 7 ++- + src/components/StatusPanel.tsx | 12 ++-- + src/components/UpdatesItem.tsx | 11 ++-- + src/components/UpdatesPanel.tsx | 22 +++---- + src/index.ts | 2 +- + src/status.ts | 6 +- + src/tukit.ts | 53 +++++++++-------- + src/update.tsx | 2 +- + src/utils.tsx | 5 +- + tsconfig.json | 59 +++++++------------ + types/cockpit.d.ts | 8 +-- + types/notifications.d.ts | 2 +- + webpack.config.js | 12 ++-- + 17 files changed, 165 insertions(+), 195 deletions(-) + delete mode 100644 rome.json + +diff --git a/biome.json b/biome.json +index ca3ad19..7fbfe99 100644 +--- a/biome.json ++++ b/biome.json +@@ -1,5 +1,5 @@ + { +- "$schema": "./node_modules/rome/configuration_schema.json", ++ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "organizeImports": { + "enabled": false + }, +@@ -14,6 +14,12 @@ + }, + "style": { + "noParameterAssign": "off" ++ }, ++ "complexity": { ++ "noBannedTypes": "off" ++ }, ++ "correctness": { ++ "useExhaustiveDependencies": "off" + } + }, + "ignore": ["pkg/*", "dist", "test/common"] +diff --git a/package.json b/package.json +index b3d3af6..62afd37 100644 +--- a/package.json ++++ b/package.json +@@ -1,51 +1,51 @@ + { +- "name": "tukit", +- "description": "Cockpit module for Transactional Update", +- "type": "module", +- "main": "index.js", +- "repository": "https://github.com/openSUSE/cockpit-tukit", +- "author": "", +- "license": "LGPL-2.1", +- "scripts": { +- "watch": "ESBUILD_WATCH='true' ./build.js", +- "build": "tsc -noEmit && ./build.js", +- "lint": "biome check .", +- "format": "biome format . --write", +- "postinstall": "patch-package" +- }, +- "devDependencies": { +- "@babel/preset-typescript": "^7.21.4", +- "@biomejs/biome": "1.8.3", +- "@types/react": "^18.0.37", +- "@types/react-dom": "^18.0.11", +- "argparse": "^2.0.1", +- "chrome-remote-interface": "^0.32.1", +- "esbuild": "^0.18.6", +- "esbuild-plugin-copy": "^2.1.1", +- "esbuild-plugin-replace": "^1.3.0", +- "esbuild-sass-plugin": "^2.10.0", +- "gettext-parser": "7.0.1", +- "htmlparser": "^1.7.7", +- "jed": "^1.1.1", +- "patch-package": "^7.0.2", +- "qunit": "^2.9.3", +- "sass": "^1.61.0", +- "sizzle": "^2.3.3", +- "ts-loader": "^9.4.2", +- "typescript": "^5.0.4" +- }, +- "peerDependencies": { +- "date-fns": "^2.30.0", +- "deep-equal": "^2.2.2" +- }, +- "dependencies": { +- "@patternfly/patternfly": "5.0.0-alpha.64", +- "@patternfly/react-core": "5.0.0-alpha.115", +- "@patternfly/react-icons": "5.0.0-alpha.19", +- "@patternfly/react-styles": "5.0.0-alpha.16", +- "glob": "^10.3.3", +- "react": "18.2.0", +- "react-dom": "18.2.0", +- "react-xml-parser": "^1.1.8" +- } +-} +\ No newline at end of file ++ "name": "tukit", ++ "description": "Cockpit module for Transactional Update", ++ "type": "module", ++ "main": "index.js", ++ "repository": "https://github.com/openSUSE/cockpit-tukit", ++ "author": "", ++ "license": "LGPL-2.1", ++ "scripts": { ++ "watch": "ESBUILD_WATCH='true' ./build.js", ++ "build": "tsc -noEmit && ./build.js", ++ "lint": "biome check .", ++ "format": "biome format . --write", ++ "postinstall": "patch-package" ++ }, ++ "devDependencies": { ++ "@babel/preset-typescript": "^7.21.4", ++ "@biomejs/biome": "1.8.3", ++ "@types/react": "^18.0.37", ++ "@types/react-dom": "^18.0.11", ++ "argparse": "^2.0.1", ++ "chrome-remote-interface": "^0.32.1", ++ "esbuild": "^0.18.6", ++ "esbuild-plugin-copy": "^2.1.1", ++ "esbuild-plugin-replace": "^1.3.0", ++ "esbuild-sass-plugin": "^2.10.0", ++ "gettext-parser": "7.0.1", ++ "htmlparser": "^1.7.7", ++ "jed": "^1.1.1", ++ "patch-package": "^7.0.2", ++ "qunit": "^2.9.3", ++ "sass": "^1.61.0", ++ "sizzle": "^2.3.3", ++ "ts-loader": "^9.4.2", ++ "typescript": "^5.0.4" ++ }, ++ "peerDependencies": { ++ "date-fns": "^2.30.0", ++ "deep-equal": "^2.2.2" ++ }, ++ "dependencies": { ++ "@patternfly/patternfly": "5.0.0-alpha.64", ++ "@patternfly/react-core": "5.0.0-alpha.115", ++ "@patternfly/react-icons": "5.0.0-alpha.19", ++ "@patternfly/react-styles": "5.0.0-alpha.16", ++ "glob": "^10.3.3", ++ "react": "18.2.0", ++ "react-dom": "18.2.0", ++ "react-xml-parser": "^1.1.8" ++ } ++} +diff --git a/rome.json b/rome.json +deleted file mode 100644 +index ca3ad19..0000000 +--- a/rome.json ++++ /dev/null +@@ -1,25 +0,0 @@ +-{ +- "$schema": "./node_modules/rome/configuration_schema.json", +- "organizeImports": { +- "enabled": false +- }, +- "linter": { +- "enabled": true, +- "rules": { +- "recommended": true, +- "suspicious": { +- "noExplicitAny": "off", +- "noAssignInExpressions": "off", +- "noShadowRestrictedNames": "off" +- }, +- "style": { +- "noParameterAssign": "off" +- } +- }, +- "ignore": ["pkg/*", "dist", "test/common"] +- }, +- "formatter": { +- "enabled": true, +- "ignore": ["pkg/*", "dist", "test/common"] +- } +-} +diff --git a/src/app.tsx b/src/app.tsx +index b8b8aa5..c3d0a84 100644 +--- a/src/app.tsx ++++ b/src/app.tsx +@@ -46,9 +46,14 @@ import UpdatesItem from "./components/UpdatesItem"; + import StatusPanel from "./components/StatusPanel"; + import UpdatesPanel from "./components/UpdatesPanel"; + +-import { Snapshot, createSnapshot, snapshotsProxy, tukitdProxy } from "./tukit"; +-import { Status, mostSevereStatus } from "./status"; +-import { Update } from "./update"; ++import { ++ type Snapshot, ++ createSnapshot, ++ snapshotsProxy, ++ tukitdProxy, ++} from "./tukit"; ++import { type Status, mostSevereStatus } from "./status"; ++import type { Update } from "./update"; + + const _ = cockpit.gettext; + +@@ -76,8 +81,7 @@ const Application = () => { + }; + + useEffect(() => { +- if (superuser.allowed) +- getSnapshots(); ++ if (superuser.allowed) getSnapshots(); + // TODO: FIX! + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [snapshotsDirty, superuser.allowed]); +@@ -156,7 +160,9 @@ const Application = () => { + icon={ExclamationCircleIcon} + /> + +- {_("Administrative access is required to access updates and snapshots.")} ++ {_( ++ "Administrative access is required to access updates and snapshots.", ++ )} + + + ); +@@ -182,10 +188,10 @@ const Application = () => { + snaps.sort((a, b) => b.number - a.number); + // mark old snapshots + let active: Snapshot | null = null; +- snaps.forEach((s) => { +- if (active) s.old = true; +- if (s.active) active = s; +- }); ++ for (const snap of snaps) { ++ if (active) snap.old = true; ++ if (snap.active) active = snap; ++ } + setSnapshots(snaps); + } catch (e) { + // service problems are reported in serviceProblem() +diff --git a/src/components/SnapshotItem.tsx b/src/components/SnapshotItem.tsx +index 8e728a0..4000496 100644 +--- a/src/components/SnapshotItem.tsx ++++ b/src/components/SnapshotItem.tsx +@@ -20,7 +20,8 @@ + + import cockpit from "cockpit"; + import * as timeformat from "timeformat"; +-import React, { useState } from "react"; ++import type React from "react"; ++import { useState } from "react"; + import { + Badge, + Button, +@@ -35,13 +36,13 @@ import { + DropdownItem, + Label, + Tooltip, +- MenuToggleElement, ++ type MenuToggleElement, + MenuToggle, + DropdownList, + } from "@patternfly/react-core"; + import { DropdownPosition } from "@patternfly/react-core/deprecated"; + import { CheckCircleIcon, EllipsisVIcon } from "@patternfly/react-icons"; +-import { Snapshot } from "@/tukit"; ++import type { Snapshot } from "@/tukit"; + + const _ = cockpit.gettext; + +diff --git a/src/components/StatusPanel.tsx b/src/components/StatusPanel.tsx +index a2efff3..6c4cf69 100644 +--- a/src/components/StatusPanel.tsx ++++ b/src/components/StatusPanel.tsx +@@ -37,9 +37,9 @@ import { + } from "@patternfly/react-icons"; + + import "./StatusPanel.scss"; +-import { Update } from "@/update"; ++import type { Update } from "@/update"; + import type { Status } from "@/status"; +-import { Snapshot } from "@/tukit"; ++import type { Snapshot } from "@/tukit"; + + const _ = cockpit.gettext; + +@@ -120,10 +120,10 @@ const StatusPanel = ({ + const i = s.details?.icon || s.type; + const c = `tukit-status-${i}`; + if (i === "error") return ; +- else if (i === "warning") return ; +- else if (i === "check") return ; +- else if (i === "pending") return ; +- else return ; ++ if (i === "warning") return ; ++ if (i === "check") return ; ++ if (i === "pending") return ; ++ return ; + }; + return ( + +diff --git a/src/components/UpdatesItem.tsx b/src/components/UpdatesItem.tsx +index 7d48610..1aa159c 100644 +--- a/src/components/UpdatesItem.tsx ++++ b/src/components/UpdatesItem.tsx +@@ -19,7 +19,8 @@ + */ + + import cockpit from "cockpit"; +-import React, { useState } from "react"; ++import type React from "react"; ++import { useState } from "react"; + import { + Button, + DataList, +@@ -37,7 +38,7 @@ import { + ModalVariant, + Tooltip, + DropdownList, +- MenuToggleElement, ++ type MenuToggleElement, + MenuToggle, + } from "@patternfly/react-core"; + import { DropdownPosition } from "@patternfly/react-core/deprecated"; +@@ -49,7 +50,7 @@ import { + EllipsisVIcon, + } from "@patternfly/react-icons"; + import { transactionsProxy } from "../tukit"; +-import { Update, categoryProps, severityProps } from "../update"; ++import { type Update, categoryProps, severityProps } from "../update"; + import { linkify } from "../utils"; + + import "./UpdatesItem.scss"; +@@ -116,8 +117,8 @@ const UpdateDetails = ({ u }: { u: Update }) => { + const UpdateItem = ({ u }: { u: Update }) => { + const icon = () => { + if (u.kind === "package") return ; +- else if (u.kind === "patch") return ; +- else return ; ++ if (u.kind === "patch") return ; ++ return ; + }; + const updateCells = (u: Update) => { + // package +diff --git a/src/components/UpdatesPanel.tsx b/src/components/UpdatesPanel.tsx +index 5781bf6..79ed5f1 100644 +--- a/src/components/UpdatesPanel.tsx ++++ b/src/components/UpdatesPanel.tsx +@@ -20,7 +20,7 @@ + import cockpit from "cockpit"; + import * as timeformat from "timeformat"; + import React, { useState, useEffect } from "react"; +-import XMLParser, { XMLElement } from "react-xml-parser"; ++import XMLParser, { type XMLElement } from "react-xml-parser"; + import { + Button, + Card, +@@ -34,10 +34,10 @@ import { + kindPrio, + categoryPrio, + severityPrio, +- KindValues, +- CategoryValues, +- SeverityValues, +- Update, ++ type KindValues, ++ type CategoryValues, ++ type SeverityValues, ++ type Update, + } from "../update"; + import { decodeHTMLEntities } from "../utils"; + +@@ -50,12 +50,12 @@ const flattenXMLData = (data: XMLElement, prefix = ""): Update => { + // NOTE: this will make {"": value} for root item + if (data.value) values[prefix] = data.value; + if (prefix !== "") prefix = `${prefix}_`; +- Object.keys(data.attributes).forEach((a) => { +- values[`${prefix}${a}`] = data.attributes[a]; +- }); +- data.children.forEach((c) => { +- Object.assign(values, flattenXMLData(c, `${prefix}${c.name}`)); +- }); ++ for (const key of Object.keys(data.attributes)) { ++ values[`${prefix}${key}`] = data.attributes[key]; ++ } ++ for (const child of data.children) { ++ Object.assign(values, flattenXMLData(child, `${prefix}${child.name}`)); ++ } + return values as Update; + }; + +diff --git a/src/index.ts b/src/index.ts +index f5da17a..f8955b1 100644 +--- a/src/index.ts ++++ b/src/index.ts +@@ -33,7 +33,7 @@ import "./app.scss"; + /* + console.log(foo("foo")) + */ +-document.addEventListener("DOMContentLoaded", function () { ++document.addEventListener("DOMContentLoaded", () => { + const container = document.getElementById("app"); + if (container) { + const root = createRoot(container); +diff --git a/src/status.ts b/src/status.ts +index bdebe35..eb9486c 100644 +--- a/src/status.ts ++++ b/src/status.ts +@@ -37,8 +37,8 @@ export type Status = { + export const mostSevereStatus = (statuses: Status[]): Status | null => { + if (statuses.length === 0) return null; + let ret = statuses[0]; +- statuses.forEach((s) => { +- if (statusSeverity[s.type] > statusSeverity[ret.type]) ret = s; +- }); ++ for (const status of statuses) { ++ if (statusSeverity[status.type] > statusSeverity[ret.type]) ret = status; ++ } + return ret; + }; +diff --git a/src/tukit.ts b/src/tukit.ts +index 57c58f1..4aab7b2 100644 +--- a/src/tukit.ts ++++ b/src/tukit.ts +@@ -18,8 +18,8 @@ + * find current contact information at www.suse.com. + */ + +-import cockpit, { DbusClient, Proxy } from "cockpit"; +-import { ServiceProxy, proxy as serviceProxy } from "service"; ++import cockpit, { type DbusClient, type Proxy } from "cockpit"; ++import { type ServiceProxy, proxy as serviceProxy } from "service"; + import { stringToBool } from "./utils"; + + let _dbusClient: DbusClient; +@@ -36,8 +36,8 @@ const dbusClient = (): DbusClient => { + type SnapshotRecordKeys = T extends `${infer K},${infer Rest}` + ? K | SnapshotRecordKeys + : T extends `${infer K}` +- ? K +- : never; ++ ? K ++ : never; + + export type SnapshotRecord = { + [k in SnapshotRecordKeys]: string; +@@ -79,21 +79,20 @@ const createSnapshot = (snap: SnapIn): Snapshot => { + if (Array.isArray(snap)) { + const [number, dflt, active, date, description] = snap; + return { +- number: parseInt(number), ++ number: Number.parseInt(number), + default: stringToBool(dflt), + active: stringToBool(active), + date: new Date(`${date}Z`), // dates are UTC but have no marking + description, + }; +- } else { +- return { +- number: parseInt(snap.number), +- default: stringToBool(snap.default), +- active: stringToBool(snap.active), +- date: new Date(`${snap.date}Z`), // dates are UTC but have no marking +- description: snap.description, +- }; + } ++ return { ++ number: Number.parseInt(snap.number), ++ default: stringToBool(snap.default), ++ active: stringToBool(snap.active), ++ date: new Date(`${snap.date}Z`), // dates are UTC but have no marking ++ description: snap.description, ++ }; + }; + + type TransactionEvent = "TransactionOpened" | "CommandExecuted" | "Error"; +@@ -102,20 +101,20 @@ type TransactionEventCallback = + T extends "TransactionOpened" + ? (event: CustomEvent, snapshot: string) => void + : T extends "Error" +- ? ( +- event: CustomEvent, +- snapshot: string, +- returncode: number, +- output: string, +- ) => void +- : T extends "CommandExecuted" +- ? ( +- event: CustomEvent, +- snapshot: string, +- returncode: number, +- output: string, +- ) => void +- : never; ++ ? ( ++ event: CustomEvent, ++ snapshot: string, ++ returncode: number, ++ output: string, ++ ) => void ++ : T extends "CommandExecuted" ++ ? ( ++ event: CustomEvent, ++ snapshot: string, ++ returncode: number, ++ output: string, ++ ) => void ++ : never; + + // https://kubic.opensuse.org/documentation/man-pages/transactional-update.conf.5.html#REBOOT_METHOD + type TransactionReboot = +diff --git a/src/update.tsx b/src/update.tsx +index 19afa86..8ee8ebf 100644 +--- a/src/update.tsx ++++ b/src/update.tsx +@@ -73,7 +73,7 @@ const prioProps = (p: keyof typeof prioLabelColor) => { + typeof prioLabelColor + >, + icon_disabled: prioIcon[p], +- variant: "outline" as "outline", ++ variant: "outline" as const, + }; + }; + +diff --git a/src/utils.tsx b/src/utils.tsx +index be04309..b879d03 100644 +--- a/src/utils.tsx ++++ b/src/utils.tsx +@@ -17,7 +17,7 @@ + * To contact SUSE LLC about this file by physical or electronic mail, you may + * find current contact information at www.suse.com. + */ +-import React, { Key } from "react"; ++import React, { type Key } from "react"; + + export const stringToBool = (s: string) => { + return ["yes", "true", "1"].includes(s.toLowerCase()); +@@ -27,8 +27,7 @@ export const stringToBool = (s: string) => { + // numeric ones. + // see: https://github.com/openSUSE/libzypp/blob/master/zypp-core/parser/xml/XmlEscape.cc + export const decodeHTMLEntities = (s: string | null): string | null => { +- if (!s) +- return null; ++ if (!s) return null; + + const entities = { lt: "<", gt: ">", amp: "&", apos: "'", quot: '"' }; + return s +diff --git a/tsconfig.json b/tsconfig.json +index 11160c8..eb645a3 100644 +--- a/tsconfig.json ++++ b/tsconfig.json +@@ -1,39 +1,24 @@ + { +- "compilerOptions": { +- "target": "es6", +- "module": "es6", +- "strict": true, +- "importHelpers": true, +- "moduleResolution": "node", +- "experimentalDecorators": true, +- "esModuleInterop": true, +- "allowSyntheticDefaultImports": true, +- "sourceMap": true, +- "skipLibCheck": true, +- "baseUrl": ".", +- "jsx": "react", +- "allowJs": true, +- "paths": { +- "@/*": [ +- "src/*" +- ], +- "*": ["types/*"] +- }, +- "lib": [ +- "dom", +- "dom.iterable", +- "ES2021.String", +- "ES2021" +- ] +- }, +- "include": [ +- "src/*.ts", +- "src/*.tsx", +- "src/**/*.ts", +- "src/**/*.tsx" +- ], +- "exclude": [ +- "node_modules", +- "types" +- ] ++ "compilerOptions": { ++ "target": "es6", ++ "module": "es6", ++ "strict": true, ++ "importHelpers": true, ++ "moduleResolution": "node", ++ "experimentalDecorators": true, ++ "esModuleInterop": true, ++ "allowSyntheticDefaultImports": true, ++ "sourceMap": true, ++ "skipLibCheck": true, ++ "baseUrl": ".", ++ "jsx": "react", ++ "allowJs": true, ++ "paths": { ++ "@/*": ["src/*"], ++ "*": ["types/*"] ++ }, ++ "lib": ["dom", "dom.iterable", "ES2021.String", "ES2021"] ++ }, ++ "include": ["src/*.ts", "src/*.tsx", "src/**/*.ts", "src/**/*.tsx"], ++ "exclude": ["node_modules", "types"] + } +diff --git a/types/cockpit.d.ts b/types/cockpit.d.ts +index 5ecd9a3..c497028 100644 +--- a/types/cockpit.d.ts ++++ b/types/cockpit.d.ts +@@ -1,9 +1,7 @@ + // https://github.com/cockpit-project/cockpit/pull/13214 + + declare module "cockpit" { +- interface Func1 { +- (arg: T): R; +- } ++ type Func1 = (arg: T) => R; + + type DbusOptions = { + bus: "session" | "user" | "system" | "none"; +@@ -73,8 +71,8 @@ declare module "cockpit" { + type DBusEventCallback = T extends "close" + ? (event: CustomEvent, options: { problem?: string }) => void + : T extends "owner" +- ? (event: CustomEvent, owner?: string | null) => void +- : never; ++ ? (event: CustomEvent, owner?: string | null) => void ++ : never; + + interface DbusClient { + wait: (callback: () => void) => Promise; +diff --git a/types/notifications.d.ts b/types/notifications.d.ts +index b147491..fe2b558 100644 +--- a/types/notifications.d.ts ++++ b/types/notifications.d.ts +@@ -1,5 +1,5 @@ + // TODO: reorganise code so `Status` is part of notifications module +-import { Status } from "@/status"; ++import type { Status } from "@/status"; + + declare module "notifications" { + class PageStatus { +diff --git a/webpack.config.js b/webpack.config.js +index 0b7f77b..8831788 100644 +--- a/webpack.config.js ++++ b/webpack.config.js +@@ -1,5 +1,5 @@ +-const fs = require("fs"); +-const path = require("path"); ++const fs = require("node:fs"); ++const path = require("node:path"); + + const copy = require("copy-webpack-plugin"); + const extract = require("mini-css-extract-plugin"); +@@ -82,10 +82,10 @@ module.exports = { + test: /\.(js|ts|jsx|tsx)$/, + }, + /* { +- test: /\.(js|ts|jsx|tsx)$/, +- use: 'ts-loader', +- exclude:/node_modules/, +- }, */ ++ test: /\.(js|ts|jsx|tsx)$/, ++ use: 'ts-loader', ++ exclude:/node_modules/, ++ }, */ + /* HACK: remove unwanted fonts from PatternFly's css */ + { + test: /patternfly-4-cockpit.scss$/, + +From f520b4f52c91c2bbfa111f639575b2faa7169c43 Mon Sep 17 00:00:00 2001 +From: Luna +Date: Mon, 22 Jul 2024 17:11:05 +0530 +Subject: [PATCH 3/6] add ci + +--- + .github/workflows/pull.yaml | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + create mode 100644 .github/workflows/pull.yaml + +diff --git a/.github/workflows/pull.yaml b/.github/workflows/pull.yaml +new file mode 100644 +index 0000000..8f0e06a +--- /dev/null ++++ b/.github/workflows/pull.yaml +@@ -0,0 +1,25 @@ ++name: Pull Request ++on: ++ pull_request: ++ types: ++ - opened ++ - edited ++ - synchronize ++ - reopened ++jobs: ++ checks: ++ runs-on: ubuntu-latest ++ container: ++ image: registry.opensuse.org/opensuse/bci/nodejs:latest ++ steps: ++ - uses: actions/checkout@v4 ++ - uses: actions/setup-node@v4 ++ with: ++ node-version: 20 ++ cache: npm ++ - name: install deps ++ run: npm ci && zypper install -y cockpit-devel make ++ - name: build ++ run: make && npm run build ++ - name: lint & format check ++ run: npm run ci + +From a0c4001c975f46ed382eb9aa5a0fe6f7fed2fe36 Mon Sep 17 00:00:00 2001 +From: Luna +Date: Tue, 23 Jul 2024 11:36:39 +0530 +Subject: [PATCH 4/6] add upstream eslint and stylelint config + +--- + .babelrc.json | 34 +- + .eslintignore | 2 + + .eslintrc.json | 75 + + .github/workflows/pull.yaml | 2 + + .stylelintrc.json | 33 + + biome.json | 59 +- + build.js | 187 +- + package-lock.json | 7199 ++++++++++++----- + package.json | 118 +- + .../cockpit-tukit.spec.in | 0 + patches/glob+10.3.3.patch | 11 - + patches/glob+11.0.0.patch | 11 + + src/app.tsx | 422 +- + src/components/SnapshotItem.tsx | 374 +- + src/components/StatusPanel.tsx | 218 +- + src/components/UpdatesItem.tsx | 632 +- + src/components/UpdatesPanel.tsx | 293 +- + src/index.ts | 14 +- + src/manifest.json | 32 +- + src/status.ts | 28 +- + src/tukit.ts | 202 +- + src/update.tsx | 52 +- + src/utils.tsx | 52 +- + tsconfig.json | 44 +- + types/cockpit.d.ts | 216 +- + types/hooks.d.ts | 2 +- + types/notifications.d.ts | 12 +- + types/react-xml-parser.d.ts | 28 +- + types/service.d.ts | 30 +- + types/superuser.d.ts | 10 +- + types/timeformat.d.ts | 24 +- + webpack.config.js | 154 - + 32 files changed, 6931 insertions(+), 3639 deletions(-) + create mode 100644 .eslintignore + create mode 100644 .eslintrc.json + create mode 100644 .stylelintrc.json + rename cockpit-tukit.spec.in => packaging/cockpit-tukit.spec.in (100%) + delete mode 100644 patches/glob+10.3.3.patch + create mode 100644 patches/glob+11.0.0.patch + delete mode 100644 webpack.config.js + +diff --git a/.babelrc.json b/.babelrc.json +index 66be253..f1f58f5 100644 +--- a/.babelrc.json ++++ b/.babelrc.json +@@ -1,19 +1,19 @@ + { +- "presets": [ +- [ +- "@babel/env", +- { +- "targets": { +- "chrome": "57", +- "firefox": "52", +- "safari": "10.3", +- "edge": "16", +- "opera": "44" +- } +- } +- ], +- "@babel/preset-react", +- "@babel/preset-typescript" +- ], +- "plugins": ["@babel/plugin-transform-runtime"] ++ "presets": [ ++ [ ++ "@babel/env", ++ { ++ "targets": { ++ "chrome": "57", ++ "firefox": "52", ++ "safari": "10.3", ++ "edge": "16", ++ "opera": "44" ++ } ++ } ++ ], ++ "@babel/preset-react", ++ "@babel/preset-typescript" ++ ], ++ "plugins": ["@babel/plugin-transform-runtime"] + } +diff --git a/.eslintignore b/.eslintignore +new file mode 100644 +index 0000000..fe0174d +--- /dev/null ++++ b/.eslintignore +@@ -0,0 +1,2 @@ ++node_modules/* ++pkg/lib/* +\ No newline at end of file +diff --git a/.eslintrc.json b/.eslintrc.json +new file mode 100644 +index 0000000..e91fb76 +--- /dev/null ++++ b/.eslintrc.json +@@ -0,0 +1,75 @@ ++{ ++ "root": true, ++ "env": { ++ "browser": true, ++ "es6": true ++ }, ++ "extends": [ ++ "eslint:recommended", ++ "standard", ++ "standard-jsx", ++ "standard-react" ++ ], ++ "parserOptions": { ++ "ecmaVersion": 2022, ++ "sourceType": "module" ++ }, ++ "plugins": ["react", "react-hooks"], ++ "rules": { ++ "indent": [ ++ "error", ++ 4, ++ { ++ "ObjectExpression": "first", ++ "CallExpression": { "arguments": "first" }, ++ "MemberExpression": 2, ++ "ignoredNodes": ["JSXAttribute"] ++ } ++ ], ++ "newline-per-chained-call": ["error", { "ignoreChainWithDepth": 2 }], ++ "no-var": "error", ++ "lines-between-class-members": [ ++ "error", ++ "always", ++ { "exceptAfterSingleLine": true } ++ ], ++ "prefer-promise-reject-errors": ["error", { "allowEmptyReject": true }], ++ "react/jsx-indent": ["error", 4], ++ "semi": ["error", "always", { "omitLastInOneLineBlock": true }], ++ ++ "react-hooks/rules-of-hooks": "error", ++ "react-hooks/exhaustive-deps": "error", ++ ++ "camelcase": "off", ++ "comma-dangle": "off", ++ "curly": "off", ++ "jsx-quotes": "off", ++ "key-spacing": "off", ++ "no-console": "off", ++ "quotes": "off", ++ "react/jsx-curly-spacing": "off", ++ "react/jsx-indent-props": "off", ++ "react/jsx-no-useless-fragment": "error", ++ "react/prop-types": "off", ++ "space-before-function-paren": "off", ++ "standard/no-callback-literal": "off" ++ }, ++ "globals": { ++ "require": "readonly", ++ "module": "readonly" ++ }, ++ "overrides": [ ++ { ++ "files": ["**/*.ts", "**/*.tsx"], ++ "plugins": ["@typescript-eslint"], ++ "extends": [ ++ "eslint:recommended", ++ "plugin:@typescript-eslint/recommended" ++ ], ++ "parser": "@typescript-eslint/parser", ++ "parserOptions": { ++ "project": ["./tsconfig.json"] ++ } ++ } ++ ] ++} +diff --git a/.github/workflows/pull.yaml b/.github/workflows/pull.yaml +index 8f0e06a..10f042e 100644 +--- a/.github/workflows/pull.yaml ++++ b/.github/workflows/pull.yaml +@@ -19,6 +19,8 @@ jobs: + cache: npm + - name: install deps + run: npm ci && zypper install -y cockpit-devel make ++ - name: git workaround ++ run: git config --global --add safe.directory /__w/cockpit-tukit/cockpit-tukit + - name: build + run: make && npm run build + - name: lint & format check +diff --git a/.stylelintrc.json b/.stylelintrc.json +new file mode 100644 +index 0000000..03c3585 +--- /dev/null ++++ b/.stylelintrc.json +@@ -0,0 +1,33 @@ ++{ ++ "extends": "stylelint-config-standard-scss", ++ "rules": { ++ "at-rule-empty-line-before": null, ++ "declaration-empty-line-before": null, ++ "custom-property-empty-line-before": null, ++ "comment-empty-line-before": null, ++ "scss/double-slash-comment-empty-line-before": null, ++ "scss/dollar-variable-colon-space-after": null, ++ "custom-property-pattern": null, ++ "declaration-block-no-duplicate-properties": null, ++ "declaration-block-no-redundant-longhand-properties": null, ++ "declaration-block-no-shorthand-property-overrides": null, ++ "declaration-block-single-line-max-declarations": null, ++ "font-family-no-duplicate-names": null, ++ "function-url-quotes": null, ++ "keyframes-name-pattern": null, ++ "no-descending-specificity": null, ++ "no-duplicate-selectors": null, ++ "scss/at-extend-no-missing-placeholder": null, ++ "scss/at-import-partial-extension": null, ++ "scss/at-import-no-partial-leading-underscore": null, ++ "scss/load-no-partial-leading-underscore": true, ++ "scss/at-mixin-pattern": null, ++ "scss/comment-no-empty": null, ++ "scss/dollar-variable-pattern": null, ++ "scss/double-slash-comment-whitespace-inside": null, ++ "scss/no-global-function-names": null, ++ "scss/operator-no-unspaced": null, ++ "selector-class-pattern": null, ++ "selector-id-pattern": null ++ } ++} +diff --git a/biome.json b/biome.json +index 7fbfe99..287a0f0 100644 +--- a/biome.json ++++ b/biome.json +@@ -1,31 +1,32 @@ + { +- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", +- "organizeImports": { +- "enabled": false +- }, +- "linter": { +- "enabled": true, +- "rules": { +- "recommended": true, +- "suspicious": { +- "noExplicitAny": "off", +- "noAssignInExpressions": "off", +- "noShadowRestrictedNames": "off" +- }, +- "style": { +- "noParameterAssign": "off" +- }, +- "complexity": { +- "noBannedTypes": "off" +- }, +- "correctness": { +- "useExhaustiveDependencies": "off" +- } +- }, +- "ignore": ["pkg/*", "dist", "test/common"] +- }, +- "formatter": { +- "enabled": true, +- "ignore": ["pkg/*", "dist", "test/common"] +- } ++ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", ++ "organizeImports": { ++ "enabled": false ++ }, ++ "linter": { ++ "enabled": true, ++ "rules": { ++ "recommended": true, ++ "suspicious": { ++ "noExplicitAny": "off", ++ "noAssignInExpressions": "off", ++ "noShadowRestrictedNames": "off" ++ }, ++ "style": { ++ "noParameterAssign": "off" ++ }, ++ "complexity": { ++ "noBannedTypes": "off" ++ }, ++ "correctness": { ++ "useExhaustiveDependencies": "off" ++ } ++ }, ++ "ignore": ["pkg/*", "dist", "test/common"] ++ }, ++ "formatter": { ++ "enabled": true, ++ "ignore": ["pkg/*", "dist", "test/common"], ++ "indentStyle": "space" ++ } + } +diff --git a/build.js b/build.js +index 924cab7..80df00f 100755 +--- a/build.js ++++ b/build.js +@@ -2,6 +2,8 @@ + + import fs from "node:fs"; + import path from "node:path"; ++import process from "node:process"; ++import os from "node:os"; + + import copy from "esbuild-plugin-copy"; + +@@ -11,10 +13,27 @@ import { cockpitPoEsbuildPlugin } from "./pkg/lib/cockpit-po-plugin.js"; + import { cockpitRsyncEsbuildPlugin } from "./pkg/lib/cockpit-rsync-plugin.js"; + import { esbuildStylesPlugins } from "./pkg/lib/esbuild-common.js"; + ++const production = process.env.NODE_ENV === "production"; + const esbuild = (await import("esbuild")).default; + +-const production = process.env.NODE_ENV === "production"; +-const watchMode = process.env.ESBUILD_WATCH === "true"; ++const parser = (await import("argparse")).default.ArgumentParser(); ++parser.add_argument("-r", "--rsync", { ++ help: "rsync bundles to ssh target after build", ++ metavar: "HOST", ++}); ++parser.add_argument("-w", "--watch", { ++ action: "store_true", ++ help: "Enable watch mode", ++ default: process.env.ESBUILD_WATCH === "true", ++}); ++parser.add_argument("-m", "--metafile", { ++ help: "Enable bundle size information file", ++ metavar: "FILE", ++}); ++const args = parser.parse_args(); ++ ++if (args.rsync) process.env.RSYNC = args.rsync; ++ + // List of directories to use when using import statements + const nodePaths = ["pkg/lib"]; + const outdir = "dist"; +@@ -23,103 +42,105 @@ const outdir = "dist"; + const packageJson = JSON.parse(fs.readFileSync("package.json")); + + function notifyEndPlugin() { +- return { +- name: "notify-end", +- setup(build) { +- let startTime; +- +- build.onStart(() => { +- startTime = new Date(); +- }); +- +- build.onEnd(() => { +- const endTime = new Date(); +- const timeStamp = endTime.toTimeString().split(" ")[0]; +- console.log( +- `${timeStamp}: Build finished in ${endTime - startTime} ms`, +- ); +- }); +- }, +- }; ++ return { ++ name: "notify-end", ++ setup(build) { ++ let startTime; ++ ++ build.onStart(() => { ++ startTime = new Date(); ++ }); ++ ++ build.onEnd(() => { ++ const endTime = new Date(); ++ const timeStamp = endTime.toTimeString().split(" ")[0]; ++ console.log( ++ `${timeStamp}: Build finished in ${endTime - startTime} ms`, ++ ); ++ }); ++ }, ++ }; + } + +-const cwd = process.cwd(); +- + // similar to fs.watch(), but recursively watches all subdirectories + function watch_dirs(dir, on_change) { +- const callback = (ev, dir, fname) => { +- // only listen for "change" events, as renames are noisy +- // ignore hidden files +- const isHidden = /^\./.test(fname); +- if (ev !== "change" || isHidden) { +- return; +- } +- on_change(path.join(dir, fname)); +- }; +- +- fs.watch(dir, {}, (ev, path) => callback(ev, dir, path)); +- +- // watch all subdirectories in dir +- const d = fs.opendirSync(dir); +- let dirent; +- +- while ((dirent = d.readSync()) !== null) { +- if (dirent.isDirectory()) +- watch_dirs(path.join(dir, dirent.name), on_change); +- } +- d.closeSync(); ++ const callback = (ev, dir, fname) => { ++ // only listen for "change" events, as renames are noisy ++ // ignore hidden files ++ const isHidden = /^\./.test(fname); ++ if (ev !== "change" || isHidden) { ++ return; ++ } ++ on_change(path.join(dir, fname)); ++ }; ++ ++ fs.watch(dir, {}, (ev, path) => callback(ev, dir, path)); ++ ++ // watch all subdirectories in dir ++ const d = fs.opendirSync(dir); ++ let dirent; ++ ++ while ((dirent = d.readSync()) !== null) { ++ if (dirent.isDirectory()) ++ watch_dirs(path.join(dir, dirent.name), on_change); ++ } ++ d.closeSync(); + } + + const context = await esbuild.context({ +- ...(!production ? { sourcemap: "linked" } : {}), +- bundle: true, +- entryPoints: ["./src/index.ts"], +- external: ["*.woff", "*.woff2", "*.jpg", "*.svg", "../../assets*"], // Allow external font files which live in ../../static/fonts +- legalComments: "external", // Move all legal comments to a .LEGAL.txt file +- loader: { ".ts": "tsx" }, +- minify: production, +- nodePaths, +- outdir, +- target: ["es2020"], +- plugins: [ +- cleanPlugin(), +- // Esbuild will only copy assets that are explicitly imported and used +- // in the code. This is a problem for index.html and manifest.json which are not imported +- copy({ +- assets: [ +- { from: ["./src/manifest.json"], to: ["./manifest.json"] }, +- { from: ["./src/index.html"], to: ["./index.html"] }, +- ], +- }), +- ...esbuildStylesPlugins, +- cockpitPoEsbuildPlugin(), +- ...(production ? [cockpitCompressPlugin()] : []), +- cockpitRsyncEsbuildPlugin({ dest: packageJson.name }), +- notifyEndPlugin(), +- ], ++ ...(!production ? { sourcemap: "linked" } : {}), ++ bundle: true, ++ entryPoints: ["./src/index.js"], ++ external: ["*.woff", "*.woff2", "*.jpg", "*.svg", "../../assets*"], // Allow external font files which live in ../../static/fonts ++ legalComments: "external", // Move all legal comments to a .LEGAL.txt file ++ loader: { ".js": "jsx" }, ++ metafile: !!args.metafile, ++ minify: production, ++ nodePaths, ++ outdir, ++ target: ["es2020"], ++ plugins: [ ++ cleanPlugin(), ++ // Esbuild will only copy assets that are explicitly imported and used ++ // in the code. This is a problem for index.html and manifest.json which are not imported ++ copy({ ++ assets: [ ++ { from: ["./src/manifest.json"], to: ["./manifest.json"] }, ++ { from: ["./src/index.html"], to: ["./index.html"] }, ++ ], ++ }), ++ ...esbuildStylesPlugins, ++ cockpitPoEsbuildPlugin(), ++ ...(production ? [cockpitCompressPlugin()] : []), ++ cockpitRsyncEsbuildPlugin({ dest: packageJson.name }), ++ notifyEndPlugin(), ++ ], + }); + + try { +- await context.rebuild(); ++ const result = await context.rebuild(); ++ if (args.metafile) { ++ fs.writeFileSync(args.metafile, JSON.stringify(result.metafile)); ++ } + } catch (e) { +- if (!watchMode) process.exit(1); +- // ignore errors in watch mode ++ if (!args.watch) process.exit(1); ++ // ignore errors in watch mode + } + +-if (watchMode) { +- const on_change = async (path) => { +- console.log("change detected:", path); +- await context.cancel(); ++if (args.watch) { ++ const on_change = async (path) => { ++ console.log("change detected:", path); ++ await context.cancel(); + +- try { +- await context.rebuild(); +- } catch (e) {} // ignore in watch mode +- }; ++ try { ++ await context.rebuild(); ++ } catch (e) {} // ignore in watch mode ++ }; + +- watch_dirs("src", on_change); ++ watch_dirs("src", on_change); + +- // wait forever until Control-C +- await new Promise(() => {}); ++ // wait forever until Control-C ++ await new Promise(() => {}); + } + + context.dispose(); +diff --git a/package-lock.json b/package-lock.json +index fe1d149..edceb9a 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -8,36 +8,50 @@ + "hasInstallScript": true, + "license": "LGPL-2.1", + "dependencies": { +- "@patternfly/patternfly": "5.0.0-alpha.64", +- "@patternfly/react-core": "5.0.0-alpha.115", +- "@patternfly/react-icons": "5.0.0-alpha.19", +- "@patternfly/react-styles": "5.0.0-alpha.16", +- "glob": "^10.3.3", +- "react": "18.2.0", +- "react-dom": "18.2.0", ++ "@patternfly/patternfly": "5.3.1", ++ "@patternfly/react-core": "5.3.4", ++ "@patternfly/react-icons": "5.3.2", ++ "@patternfly/react-styles": "5.3.1", ++ "glob": "^11.0.0", ++ "react": "18.3.1", ++ "react-dom": "18.3.1", + "react-xml-parser": "^1.1.8" + }, + "devDependencies": { + "@babel/preset-typescript": "^7.21.4", + "@biomejs/biome": "1.8.3", +- "@types/react": "^18.0.37", +- "@types/react-dom": "^18.0.11", ++ "@types/react": "^18.3.3", ++ "@types/react-dom": "^18.3.0", ++ "@typescript-eslint/eslint-plugin": "7.17.0", + "argparse": "^2.0.1", +- "chrome-remote-interface": "^0.32.1", +- "esbuild": "^0.18.6", ++ "chrome-remote-interface": "^0.33.0", ++ "esbuild": "^0.23.0", + "esbuild-plugin-copy": "^2.1.1", +- "esbuild-plugin-replace": "^1.3.0", +- "esbuild-sass-plugin": "^2.10.0", +- "gettext-parser": "7.0.1", ++ "esbuild-plugin-replace": "^1.4.0", ++ "esbuild-sass-plugin": "^3.3.1", ++ "eslint": "^8.57.0", ++ "eslint-config-standard": "^17.1.0", ++ "eslint-config-standard-jsx": "^11.0.0", ++ "eslint-config-standard-react": "^13.0.0", ++ "eslint-plugin-import": "^2.29.1", ++ "eslint-plugin-node": "^11.1.0", ++ "eslint-plugin-promise": "^6.6.0", ++ "eslint-plugin-react": "^7.35.0", ++ "eslint-plugin-react-hooks": "^4.6.2", ++ "gettext-parser": "8.0.0", + "htmlparser": "^1.7.7", + "jed": "^1.1.1", + "patch-package": "^7.0.2", +- "qunit": "^2.9.3", +- "rome": "^12.0.0", +- "sass": "^1.61.0", ++ "qunit": "^2.21.1", ++ "sass": "^1.77.8", + "sizzle": "^2.3.3", ++ "stylelint": "16.7.0", ++ "stylelint-config-recommended-scss": "14.0.0", ++ "stylelint-config-standard": "36.0.1", ++ "stylelint-config-standard-scss": "13.1.0", ++ "stylelint-formatter-pretty": "4.0.0", + "ts-loader": "^9.4.2", +- "typescript": "^5.0.4" ++ "typescript": "5.5.3" + }, + "peerDependencies": { + "date-fns": "^2.30.0", +@@ -576,70 +590,6 @@ + "@biomejs/cli-win32-x64": "1.8.3" + } + }, +- "node_modules/@biomejs/cli-darwin-arm64": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.3.tgz", +- "integrity": "sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "darwin" +- ], +- "engines": { +- "node": ">=14.21.3" +- } +- }, +- "node_modules/@biomejs/cli-darwin-x64": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.3.tgz", +- "integrity": "sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "darwin" +- ], +- "engines": { +- "node": ">=14.21.3" +- } +- }, +- "node_modules/@biomejs/cli-linux-arm64": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.3.tgz", +- "integrity": "sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], +- "engines": { +- "node": ">=14.21.3" +- } +- }, +- "node_modules/@biomejs/cli-linux-arm64-musl": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.3.tgz", +- "integrity": "sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], +- "engines": { +- "node": ">=14.21.3" +- } +- }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.3.tgz", +@@ -672,389 +622,274 @@ + "node": ">=14.21.3" + } + }, +- "node_modules/@biomejs/cli-win32-arm64": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.3.tgz", +- "integrity": "sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==", +- "cpu": [ +- "arm64" +- ], ++ "node_modules/@bufbuild/protobuf": { ++ "version": "1.10.0", ++ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", ++ "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ], +- "engines": { +- "node": ">=14.21.3" +- } ++ "peer": true + }, +- "node_modules/@biomejs/cli-win32-x64": { +- "version": "1.8.3", +- "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.3.tgz", +- "integrity": "sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==", +- "cpu": [ +- "x64" +- ], ++ "node_modules/@csstools/css-parser-algorithms": { ++ "version": "2.7.1", ++ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", ++ "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", + "dev": true, +- "optional": true, +- "os": [ +- "win32" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/csstools" ++ }, ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/csstools" ++ } + ], + "engines": { +- "node": ">=14.21.3" ++ "node": "^14 || ^16 || >=18" ++ }, ++ "peerDependencies": { ++ "@csstools/css-tokenizer": "^2.4.1" + } + }, +- "node_modules/@esbuild/android-arm": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", +- "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", +- "cpu": [ +- "arm" +- ], ++ "node_modules/@csstools/css-tokenizer": { ++ "version": "2.4.1", ++ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", ++ "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", + "dev": true, +- "optional": true, +- "os": [ +- "android" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/csstools" ++ }, ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/csstools" ++ } + ], + "engines": { +- "node": ">=12" ++ "node": "^14 || ^16 || >=18" + } + }, +- "node_modules/@esbuild/android-arm64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", +- "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", +- "cpu": [ +- "arm64" +- ], ++ "node_modules/@csstools/media-query-list-parser": { ++ "version": "2.1.13", ++ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", ++ "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", + "dev": true, +- "optional": true, +- "os": [ +- "android" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/csstools" ++ }, ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/csstools" ++ } + ], + "engines": { +- "node": ">=12" ++ "node": "^14 || ^16 || >=18" ++ }, ++ "peerDependencies": { ++ "@csstools/css-parser-algorithms": "^2.7.1", ++ "@csstools/css-tokenizer": "^2.4.1" + } + }, +- "node_modules/@esbuild/android-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", +- "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", +- "cpu": [ +- "x64" +- ], ++ "node_modules/@csstools/selector-specificity": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", ++ "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "dev": true, +- "optional": true, +- "os": [ +- "android" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/csstools" ++ }, ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/csstools" ++ } + ], + "engines": { +- "node": ">=12" ++ "node": "^14 || ^16 || >=18" ++ }, ++ "peerDependencies": { ++ "postcss-selector-parser": "^6.0.13" + } + }, +- "node_modules/@esbuild/darwin-arm64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", +- "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", +- "cpu": [ +- "arm64" +- ], ++ "node_modules/@dual-bundle/import-meta-resolve": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", ++ "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, +- "optional": true, +- "os": [ +- "darwin" +- ], +- "engines": { +- "node": ">=12" ++ "funding": { ++ "type": "github", ++ "url": "https://github.com/sponsors/wooorm" + } + }, +- "node_modules/@esbuild/darwin-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", +- "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", ++ "node_modules/@esbuild/linux-x64": { ++ "version": "0.23.0", ++ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", ++ "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ +- "darwin" ++ "linux" + ], + "engines": { +- "node": ">=12" ++ "node": ">=18" + } + }, +- "node_modules/@esbuild/freebsd-arm64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", +- "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", +- "cpu": [ +- "arm64" +- ], ++ "node_modules/@eslint-community/eslint-utils": { ++ "version": "4.4.0", ++ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", ++ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, +- "optional": true, +- "os": [ +- "freebsd" +- ], ++ "dependencies": { ++ "eslint-visitor-keys": "^3.3.0" ++ }, + "engines": { +- "node": ">=12" ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ }, ++ "peerDependencies": { ++ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, +- "node_modules/@esbuild/freebsd-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", +- "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", +- "cpu": [ +- "x64" +- ], ++ "node_modules/@eslint-community/regexpp": { ++ "version": "4.11.0", ++ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", ++ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, +- "optional": true, +- "os": [ +- "freebsd" +- ], + "engines": { +- "node": ">=12" ++ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, +- "node_modules/@esbuild/linux-arm": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", +- "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", +- "cpu": [ +- "arm" +- ], ++ "node_modules/@eslint/eslintrc": { ++ "version": "2.1.4", ++ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", ++ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], ++ "dependencies": { ++ "ajv": "^6.12.4", ++ "debug": "^4.3.2", ++ "espree": "^9.6.0", ++ "globals": "^13.19.0", ++ "ignore": "^5.2.0", ++ "import-fresh": "^3.2.1", ++ "js-yaml": "^4.1.0", ++ "minimatch": "^3.1.2", ++ "strip-json-comments": "^3.1.1" ++ }, + "engines": { +- "node": ">=12" ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ }, ++ "funding": { ++ "url": "https://opencollective.com/eslint" + } + }, +- "node_modules/@esbuild/linux-arm64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", +- "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", +- "cpu": [ +- "arm64" +- ], ++ "node_modules/@eslint/eslintrc/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, +- "os": [ +- "linux" +- ], +- "engines": { +- "node": ">=12" ++ "dependencies": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/@esbuild/linux-ia32": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", +- "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", +- "cpu": [ +- "ia32" +- ], ++ "node_modules/@eslint/eslintrc/node_modules/globals": { ++ "version": "13.24.0", ++ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", ++ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], ++ "dependencies": { ++ "type-fest": "^0.20.2" ++ }, + "engines": { +- "node": ">=12" ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/@esbuild/linux-loong64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", +- "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", +- "cpu": [ +- "loong64" +- ], ++ "node_modules/@eslint/eslintrc/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, +- "os": [ +- "linux" +- ], ++ "dependencies": { ++ "brace-expansion": "^1.1.7" ++ }, + "engines": { +- "node": ">=12" ++ "node": "*" + } + }, +- "node_modules/@esbuild/linux-mips64el": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", +- "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", +- "cpu": [ +- "mips64el" +- ], ++ "node_modules/@eslint/js": { ++ "version": "8.57.0", ++ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", ++ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], + "engines": { +- "node": ">=12" ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, +- "node_modules/@esbuild/linux-ppc64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", +- "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", +- "cpu": [ +- "ppc64" +- ], ++ "node_modules/@humanwhocodes/config-array": { ++ "version": "0.11.14", ++ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", ++ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", ++ "deprecated": "Use @eslint/config-array instead", + "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], ++ "dependencies": { ++ "@humanwhocodes/object-schema": "^2.0.2", ++ "debug": "^4.3.1", ++ "minimatch": "^3.0.5" ++ }, + "engines": { +- "node": ">=12" ++ "node": ">=10.10.0" + } + }, +- "node_modules/@esbuild/linux-riscv64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", +- "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", +- "cpu": [ +- "riscv64" +- ], ++ "node_modules/@humanwhocodes/config-array/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, +- "os": [ +- "linux" +- ], +- "engines": { +- "node": ">=12" ++ "dependencies": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/@esbuild/linux-s390x": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", +- "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", +- "cpu": [ +- "s390x" +- ], ++ "node_modules/@humanwhocodes/config-array/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, +- "os": [ +- "linux" +- ], ++ "dependencies": { ++ "brace-expansion": "^1.1.7" ++ }, + "engines": { +- "node": ">=12" ++ "node": "*" + } + }, +- "node_modules/@esbuild/linux-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", +- "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", +- "cpu": [ +- "x64" +- ], ++ "node_modules/@humanwhocodes/module-importer": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", ++ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ], + "engines": { +- "node": ">=12" +- } +- }, +- "node_modules/@esbuild/netbsd-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", +- "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "netbsd" +- ], +- "engines": { +- "node": ">=12" +- } +- }, +- "node_modules/@esbuild/openbsd-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", +- "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "openbsd" +- ], +- "engines": { +- "node": ">=12" +- } +- }, +- "node_modules/@esbuild/sunos-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", +- "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "sunos" +- ], +- "engines": { +- "node": ">=12" +- } +- }, +- "node_modules/@esbuild/win32-arm64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", +- "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ], +- "engines": { +- "node": ">=12" +- } +- }, +- "node_modules/@esbuild/win32-ia32": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", +- "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", +- "cpu": [ +- "ia32" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ], +- "engines": { +- "node": ">=12" ++ "node": ">=12.22" ++ }, ++ "funding": { ++ "type": "github", ++ "url": "https://github.com/sponsors/nzakas" + } + }, +- "node_modules/@esbuild/win32-x64": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", +- "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ], +- "engines": { +- "node": ">=12" +- } ++ "node_modules/@humanwhocodes/object-schema": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", ++ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", ++ "deprecated": "Use @eslint/object-schema instead", ++ "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", +@@ -1179,19 +1014,19 @@ + } + }, + "node_modules/@patternfly/patternfly": { +- "version": "5.0.0-alpha.64", +- "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.0.0-alpha.64.tgz", +- "integrity": "sha512-VJOCpS/WyhjkKqoaCo3usQxoXAj90p81NDHDE3/4/xTUYb53xNNXDJ1YwkPkG0RDvs6DaS9U/hEmu1AbCa9VEw==" ++ "version": "5.3.1", ++ "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.3.1.tgz", ++ "integrity": "sha512-KYIr9pKRTzHZNGuDuaa5j5CaZyLltvotPFGG1BiJalBDBGSOyk0BZCgHLowm4txKZXrLhorEuuv9XLrMQL8eoA==" + }, + "node_modules/@patternfly/react-core": { +- "version": "5.0.0-alpha.115", +- "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.0.0-alpha.115.tgz", +- "integrity": "sha512-hkpu7KbUeMGukuF34QxOuTHUd5EnVuhH5VZ0S9IaOrgRiXnK/xZsf5YQPj/2TL4lx8QOPiOOzDzvxLgpNSYaBQ==", +- "dependencies": { +- "@patternfly/react-icons": "^5.0.0-alpha.19", +- "@patternfly/react-styles": "^5.0.0-alpha.16", +- "@patternfly/react-tokens": "^5.0.0-alpha.14", +- "focus-trap": "7.4.2", ++ "version": "5.3.4", ++ "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.3.4.tgz", ++ "integrity": "sha512-zr2yeilIoFp8MFOo0vNgI8XuM+P2466zHvy4smyRNRH2/but2WObqx7Wu4ftd/eBMYdNqmTeuXe6JeqqRqnPMQ==", ++ "dependencies": { ++ "@patternfly/react-icons": "^5.3.2", ++ "@patternfly/react-styles": "^5.3.1", ++ "@patternfly/react-tokens": "^5.3.1", ++ "focus-trap": "7.5.2", + "react-dropzone": "^14.2.3", + "tslib": "^2.5.0" + }, +@@ -1201,23 +1036,23 @@ + } + }, + "node_modules/@patternfly/react-icons": { +- "version": "5.0.0-alpha.19", +- "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.0.0-alpha.19.tgz", +- "integrity": "sha512-jyVSK6f9ueIO+pI2K2njI/4qdQR9WK953IUJtQ6PtNhLHKsAHOnqwHjBUrqxWOBZ+ty5MpqHPoB9Yd34i8vcxg==", ++ "version": "5.3.2", ++ "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.3.2.tgz", ++ "integrity": "sha512-GEygYbl0H4zD8nZuTQy2dayKIrV2bMMeWKSOEZ16Y3EYNgYVUOUnN+J0naAEuEGH39Xb1DE9n+XUbE1PC4CxPA==", + "peerDependencies": { + "react": "^17 || ^18", + "react-dom": "^17 || ^18" + } + }, + "node_modules/@patternfly/react-styles": { +- "version": "5.0.0-alpha.16", +- "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.0.0-alpha.16.tgz", +- "integrity": "sha512-RxU8sSKY0tM40xZwk+BR5vWotP+LZOH2vqdNFEIT7a1+1Kr9qSm5ktq34gnzK0nyWUaH08qL9da4HVo3/O+R4A==" ++ "version": "5.3.1", ++ "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.3.1.tgz", ++ "integrity": "sha512-H6uBoFH3bJjD6PP75qZ4k+2TtF59vxf9sIVerPpwrGJcRgBZbvbMZCniSC3+S2LQ8DgXLnDvieq78jJzHz0hiA==" + }, + "node_modules/@patternfly/react-tokens": { +- "version": "5.0.0-prerelease.9", +- "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.0.0-prerelease.9.tgz", +- "integrity": "sha512-x3kJolPS95LJSiS2n3T9KL6MNjtuM9qKKzbqK1nkiftAytubcoQ9O7ikEjDYiILHpupo5lG5H9Cr50kAwu1rsA==" ++ "version": "5.3.1", ++ "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.3.1.tgz", ++ "integrity": "sha512-VYK0uVP2/2RJ7ZshJCCLeq0Boih5I1bv+9Z/Bg6h12dCkLs85XsxAX9Ve+BGIo5DF54/mzcRHE1RKYap4ISXuw==" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", +@@ -1228,84 +1063,6 @@ + "node": ">=14" + } + }, +- "node_modules/@rometools/cli-darwin-arm64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-darwin-arm64/-/cli-darwin-arm64-12.1.3.tgz", +- "integrity": "sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "darwin" +- ] +- }, +- "node_modules/@rometools/cli-darwin-x64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-darwin-x64/-/cli-darwin-x64-12.1.3.tgz", +- "integrity": "sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "darwin" +- ] +- }, +- "node_modules/@rometools/cli-linux-arm64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-linux-arm64/-/cli-linux-arm64-12.1.3.tgz", +- "integrity": "sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ] +- }, +- "node_modules/@rometools/cli-linux-x64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-linux-x64/-/cli-linux-x64-12.1.3.tgz", +- "integrity": "sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "linux" +- ] +- }, +- "node_modules/@rometools/cli-win32-arm64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-win32-arm64/-/cli-win32-arm64-12.1.3.tgz", +- "integrity": "sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ] +- }, +- "node_modules/@rometools/cli-win32-x64": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/@rometools/cli-win32-x64/-/cli-win32-x64-12.1.3.tgz", +- "integrity": "sha512-yHSKYidqJMV9nADqg78GYA+cZ0hS1twANAjiFibQdXj9aGzD+s/IzIFEIi/U/OBLvWYg/SCw0QVozi2vTlKFDQ==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "optional": true, +- "os": [ +- "win32" +- ] +- }, + "node_modules/@types/eslint": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz", +@@ -1342,6 +1099,12 @@ + "dev": true, + "peer": true + }, ++ "node_modules/@types/json5": { ++ "version": "0.0.29", ++ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", ++ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", ++ "dev": true ++ }, + "node_modules/@types/node": { + "version": "20.4.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", +@@ -1356,29 +1119,226 @@ + "dev": true + }, + "node_modules/@types/react": { +- "version": "18.2.17", +- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.17.tgz", +- "integrity": "sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==", ++ "version": "18.3.3", ++ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", ++ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", +- "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { +- "version": "18.2.7", +- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", +- "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", ++ "version": "18.3.0", ++ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", ++ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, +- "node_modules/@types/scheduler": { +- "version": "0.16.3", +- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", +- "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", ++ "node_modules/@typescript-eslint/eslint-plugin": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz", ++ "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==", ++ "dev": true, ++ "dependencies": { ++ "@eslint-community/regexpp": "^4.10.0", ++ "@typescript-eslint/scope-manager": "7.17.0", ++ "@typescript-eslint/type-utils": "7.17.0", ++ "@typescript-eslint/utils": "7.17.0", ++ "@typescript-eslint/visitor-keys": "7.17.0", ++ "graphemer": "^1.4.0", ++ "ignore": "^5.3.1", ++ "natural-compare": "^1.4.0", ++ "ts-api-utils": "^1.3.0" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ }, ++ "peerDependencies": { ++ "@typescript-eslint/parser": "^7.0.0", ++ "eslint": "^8.56.0" ++ }, ++ "peerDependenciesMeta": { ++ "typescript": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@typescript-eslint/parser": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", ++ "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "@typescript-eslint/scope-manager": "7.17.0", ++ "@typescript-eslint/types": "7.17.0", ++ "@typescript-eslint/typescript-estree": "7.17.0", ++ "@typescript-eslint/visitor-keys": "7.17.0", ++ "debug": "^4.3.4" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ }, ++ "peerDependencies": { ++ "eslint": "^8.56.0" ++ }, ++ "peerDependenciesMeta": { ++ "typescript": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@typescript-eslint/scope-manager": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", ++ "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", ++ "dev": true, ++ "dependencies": { ++ "@typescript-eslint/types": "7.17.0", ++ "@typescript-eslint/visitor-keys": "7.17.0" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ } ++ }, ++ "node_modules/@typescript-eslint/type-utils": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz", ++ "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==", ++ "dev": true, ++ "dependencies": { ++ "@typescript-eslint/typescript-estree": "7.17.0", ++ "@typescript-eslint/utils": "7.17.0", ++ "debug": "^4.3.4", ++ "ts-api-utils": "^1.3.0" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ }, ++ "peerDependencies": { ++ "eslint": "^8.56.0" ++ }, ++ "peerDependenciesMeta": { ++ "typescript": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@typescript-eslint/types": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", ++ "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", ++ "dev": true, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ } ++ }, ++ "node_modules/@typescript-eslint/typescript-estree": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", ++ "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", ++ "dev": true, ++ "dependencies": { ++ "@typescript-eslint/types": "7.17.0", ++ "@typescript-eslint/visitor-keys": "7.17.0", ++ "debug": "^4.3.4", ++ "globby": "^11.1.0", ++ "is-glob": "^4.0.3", ++ "minimatch": "^9.0.4", ++ "semver": "^7.6.0", ++ "ts-api-utils": "^1.3.0" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ }, ++ "peerDependenciesMeta": { ++ "typescript": { ++ "optional": true ++ } ++ } ++ }, ++ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { ++ "version": "7.6.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", ++ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", ++ "dev": true, ++ "bin": { ++ "semver": "bin/semver.js" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/@typescript-eslint/utils": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", ++ "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", ++ "dev": true, ++ "dependencies": { ++ "@eslint-community/eslint-utils": "^4.4.0", ++ "@typescript-eslint/scope-manager": "7.17.0", ++ "@typescript-eslint/types": "7.17.0", ++ "@typescript-eslint/typescript-estree": "7.17.0" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ }, ++ "peerDependencies": { ++ "eslint": "^8.56.0" ++ } ++ }, ++ "node_modules/@typescript-eslint/visitor-keys": { ++ "version": "7.17.0", ++ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", ++ "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", ++ "dev": true, ++ "dependencies": { ++ "@typescript-eslint/types": "7.17.0", ++ "eslint-visitor-keys": "^3.4.3" ++ }, ++ "engines": { ++ "node": "^18.18.0 || >=20.0.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/typescript-eslint" ++ } ++ }, ++ "node_modules/@ungap/structured-clone": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", ++ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { +@@ -1579,7 +1539,6 @@ + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, +- "peer": true, + "bin": { + "acorn": "bin/acorn" + }, +@@ -1597,12 +1556,20 @@ + "acorn": "^8" + } + }, ++ "node_modules/acorn-jsx": { ++ "version": "5.3.2", ++ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", ++ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", ++ "dev": true, ++ "peerDependencies": { ++ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" ++ } ++ }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, +- "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", +@@ -1624,6 +1591,18 @@ + "ajv": "^6.9.1" + } + }, ++ "node_modules/ansi-escapes": { ++ "version": "6.2.1", ++ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", ++ "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", ++ "dev": true, ++ "engines": { ++ "node": ">=14.16" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", +@@ -1667,13 +1646,35 @@ + "dev": true + }, + "node_modules/array-buffer-byte-length": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", +- "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", +- "peer": true, ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", ++ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { +- "call-bind": "^1.0.2", +- "is-array-buffer": "^3.0.1" ++ "call-bind": "^1.0.5", ++ "is-array-buffer": "^3.0.4" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/array-includes": { ++ "version": "3.1.8", ++ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", ++ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2", ++ "es-object-atoms": "^1.0.0", ++ "get-intrinsic": "^1.2.4", ++ "is-string": "^1.0.7" ++ }, ++ "engines": { ++ "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" +@@ -1688,10 +1689,133 @@ + "node": ">=8" + } + }, +- "node_modules/at-least-node": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", +- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", ++ "node_modules/array.prototype.findlast": { ++ "version": "1.2.5", ++ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", ++ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2", ++ "es-errors": "^1.3.0", ++ "es-object-atoms": "^1.0.0", ++ "es-shim-unscopables": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/array.prototype.findlastindex": { ++ "version": "1.2.5", ++ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", ++ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2", ++ "es-errors": "^1.3.0", ++ "es-object-atoms": "^1.0.0", ++ "es-shim-unscopables": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/array.prototype.flat": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", ++ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "define-properties": "^1.2.0", ++ "es-abstract": "^1.22.1", ++ "es-shim-unscopables": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/array.prototype.flatmap": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", ++ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "define-properties": "^1.2.0", ++ "es-abstract": "^1.22.1", ++ "es-shim-unscopables": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/array.prototype.tosorted": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", ++ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.3", ++ "es-errors": "^1.3.0", ++ "es-shim-unscopables": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/arraybuffer.prototype.slice": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", ++ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", ++ "dev": true, ++ "dependencies": { ++ "array-buffer-byte-length": "^1.0.1", ++ "call-bind": "^1.0.5", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.22.3", ++ "es-errors": "^1.2.1", ++ "get-intrinsic": "^1.2.3", ++ "is-array-buffer": "^3.0.4", ++ "is-shared-array-buffer": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/astral-regex": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", ++ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/at-least-node": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", ++ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" +@@ -1706,10 +1830,12 @@ + } + }, + "node_modules/available-typed-arrays": { +- "version": "1.0.5", +- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", +- "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", +- "peer": true, ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", ++ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", ++ "dependencies": { ++ "possible-typed-array-names": "^1.0.0" ++ }, + "engines": { + "node": ">= 0.4" + }, +@@ -1828,6 +1954,13 @@ + "ieee754": "^1.2.1" + } + }, ++ "node_modules/buffer-builder": { ++ "version": "0.2.0", ++ "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", ++ "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", ++ "dev": true, ++ "peer": true ++ }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", +@@ -1835,19 +1968,69 @@ + "dev": true, + "peer": true + }, +- "node_modules/call-bind": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", +- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", ++ "node_modules/builtin-modules": { ++ "version": "3.3.0", ++ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", ++ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", ++ "dev": true, ++ "peer": true, ++ "engines": { ++ "node": ">=6" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/builtins": { ++ "version": "5.1.0", ++ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", ++ "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "semver": "^7.0.0" ++ } ++ }, ++ "node_modules/builtins/node_modules/semver": { ++ "version": "7.6.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", ++ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", ++ "dev": true, + "peer": true, ++ "bin": { ++ "semver": "bin/semver.js" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/call-bind": { ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", ++ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { +- "function-bind": "^1.1.1", +- "get-intrinsic": "^1.0.2" ++ "es-define-property": "^1.0.0", ++ "es-errors": "^1.3.0", ++ "function-bind": "^1.1.2", ++ "get-intrinsic": "^1.2.4", ++ "set-function-length": "^1.2.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/callsites": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", ++ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, + "node_modules/caniuse-lite": { + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", +@@ -1911,9 +2094,9 @@ + } + }, + "node_modules/chrome-remote-interface": { +- "version": "0.32.2", +- "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.32.2.tgz", +- "integrity": "sha512-3UbFKtEmqApehPQnqdblcggx7KveQphEMKQmdJZsOguE9ylw2N2/9Z7arO7xS55+DBJ/hyP8RrayLt4MMdJvQg==", ++ "version": "0.33.2", ++ "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.2.tgz", ++ "integrity": "sha512-wvm9cOeBTrb218EC+6DteGt92iXr2iY0+XJP30f15JVDhqvWvJEVACh9GvUm8b9Yd8bxQivaLSb8k7mgrbyomQ==", + "dev": true, + "dependencies": { + "commander": "2.11.x", +@@ -1963,6 +2146,12 @@ + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, ++ "node_modules/colord": { ++ "version": "2.9.3", ++ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", ++ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", ++ "dev": true ++ }, + "node_modules/commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", +@@ -1991,6 +2180,32 @@ + "dev": true, + "peer": true + }, ++ "node_modules/cosmiconfig": { ++ "version": "9.0.0", ++ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", ++ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", ++ "dev": true, ++ "dependencies": { ++ "env-paths": "^2.2.1", ++ "import-fresh": "^3.3.0", ++ "js-yaml": "^4.1.0", ++ "parse-json": "^5.2.0" ++ }, ++ "engines": { ++ "node": ">=14" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/d-fischer" ++ }, ++ "peerDependencies": { ++ "typescript": ">=4.9.5" ++ }, ++ "peerDependenciesMeta": { ++ "typescript": { ++ "optional": true ++ } ++ } ++ }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", +@@ -2004,12 +2219,97 @@ + "node": ">= 8" + } + }, ++ "node_modules/css-functions-list": { ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", ++ "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=12 || >=16" ++ } ++ }, ++ "node_modules/css-tree": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", ++ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", ++ "dev": true, ++ "dependencies": { ++ "mdn-data": "2.0.30", ++ "source-map-js": "^1.0.1" ++ }, ++ "engines": { ++ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" ++ } ++ }, ++ "node_modules/cssesc": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", ++ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", ++ "dev": true, ++ "bin": { ++ "cssesc": "bin/cssesc" ++ }, ++ "engines": { ++ "node": ">=4" ++ } ++ }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, ++ "node_modules/data-view-buffer": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", ++ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.6", ++ "es-errors": "^1.3.0", ++ "is-data-view": "^1.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/data-view-byte-length": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", ++ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "es-errors": "^1.3.0", ++ "is-data-view": "^1.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/data-view-byte-offset": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", ++ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.6", ++ "es-errors": "^1.3.0", ++ "is-data-view": "^1.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", +@@ -2027,11 +2327,10 @@ + } + }, + "node_modules/debug": { +- "version": "4.3.4", +- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", +- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", ++ "version": "4.3.5", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", ++ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, +- "peer": true, + "dependencies": { + "ms": "2.1.2" + }, +@@ -2073,12 +2372,34 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/deep-is": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", ++ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", ++ "dev": true ++ }, ++ "node_modules/define-data-property": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", ++ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", ++ "dependencies": { ++ "es-define-property": "^1.0.0", ++ "es-errors": "^1.3.0", ++ "gopd": "^1.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/define-properties": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", +- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", +- "peer": true, ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", ++ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { ++ "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, +@@ -2101,6 +2422,18 @@ + "node": ">=8" + } + }, ++ "node_modules/doctrine": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", ++ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", ++ "dev": true, ++ "dependencies": { ++ "esutils": "^2.0.2" ++ }, ++ "engines": { ++ "node": ">=6.0.0" ++ } ++ }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", +@@ -2140,6 +2473,103 @@ + "node": ">=10.13.0" + } + }, ++ "node_modules/env-paths": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", ++ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/error-ex": { ++ "version": "1.3.2", ++ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", ++ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", ++ "dev": true, ++ "dependencies": { ++ "is-arrayish": "^0.2.1" ++ } ++ }, ++ "node_modules/es-abstract": { ++ "version": "1.23.3", ++ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", ++ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", ++ "dev": true, ++ "dependencies": { ++ "array-buffer-byte-length": "^1.0.1", ++ "arraybuffer.prototype.slice": "^1.0.3", ++ "available-typed-arrays": "^1.0.7", ++ "call-bind": "^1.0.7", ++ "data-view-buffer": "^1.0.1", ++ "data-view-byte-length": "^1.0.1", ++ "data-view-byte-offset": "^1.0.0", ++ "es-define-property": "^1.0.0", ++ "es-errors": "^1.3.0", ++ "es-object-atoms": "^1.0.0", ++ "es-set-tostringtag": "^2.0.3", ++ "es-to-primitive": "^1.2.1", ++ "function.prototype.name": "^1.1.6", ++ "get-intrinsic": "^1.2.4", ++ "get-symbol-description": "^1.0.2", ++ "globalthis": "^1.0.3", ++ "gopd": "^1.0.1", ++ "has-property-descriptors": "^1.0.2", ++ "has-proto": "^1.0.3", ++ "has-symbols": "^1.0.3", ++ "hasown": "^2.0.2", ++ "internal-slot": "^1.0.7", ++ "is-array-buffer": "^3.0.4", ++ "is-callable": "^1.2.7", ++ "is-data-view": "^1.0.1", ++ "is-negative-zero": "^2.0.3", ++ "is-regex": "^1.1.4", ++ "is-shared-array-buffer": "^1.0.3", ++ "is-string": "^1.0.7", ++ "is-typed-array": "^1.1.13", ++ "is-weakref": "^1.0.2", ++ "object-inspect": "^1.13.1", ++ "object-keys": "^1.1.1", ++ "object.assign": "^4.1.5", ++ "regexp.prototype.flags": "^1.5.2", ++ "safe-array-concat": "^1.1.2", ++ "safe-regex-test": "^1.0.3", ++ "string.prototype.trim": "^1.2.9", ++ "string.prototype.trimend": "^1.0.8", ++ "string.prototype.trimstart": "^1.0.8", ++ "typed-array-buffer": "^1.0.2", ++ "typed-array-byte-length": "^1.0.1", ++ "typed-array-byte-offset": "^1.0.2", ++ "typed-array-length": "^1.0.6", ++ "unbox-primitive": "^1.0.2", ++ "which-typed-array": "^1.1.15" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/es-define-property": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", ++ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", ++ "dependencies": { ++ "get-intrinsic": "^1.2.4" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/es-errors": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", ++ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", +@@ -2160,6 +2590,31 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/es-iterator-helpers": { ++ "version": "1.0.19", ++ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", ++ "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.3", ++ "es-errors": "^1.3.0", ++ "es-set-tostringtag": "^2.0.3", ++ "function-bind": "^1.1.2", ++ "get-intrinsic": "^1.2.4", ++ "globalthis": "^1.0.3", ++ "has-property-descriptors": "^1.0.2", ++ "has-proto": "^1.0.3", ++ "has-symbols": "^1.0.3", ++ "internal-slot": "^1.0.7", ++ "iterator.prototype": "^1.1.2", ++ "safe-array-concat": "^1.1.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", +@@ -2167,41 +2622,95 @@ + "dev": true, + "peer": true + }, ++ "node_modules/es-object-atoms": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", ++ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", ++ "dev": true, ++ "dependencies": { ++ "es-errors": "^1.3.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/es-set-tostringtag": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", ++ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", ++ "dev": true, ++ "dependencies": { ++ "get-intrinsic": "^1.2.4", ++ "has-tostringtag": "^1.0.2", ++ "hasown": "^2.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/es-shim-unscopables": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", ++ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", ++ "dev": true, ++ "dependencies": { ++ "hasown": "^2.0.0" ++ } ++ }, ++ "node_modules/es-to-primitive": { ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", ++ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", ++ "dev": true, ++ "dependencies": { ++ "is-callable": "^1.1.4", ++ "is-date-object": "^1.0.1", ++ "is-symbol": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/esbuild": { +- "version": "0.18.17", +- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", +- "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", ++ "version": "0.23.0", ++ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", ++ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { +- "node": ">=12" ++ "node": ">=18" + }, + "optionalDependencies": { +- "@esbuild/android-arm": "0.18.17", +- "@esbuild/android-arm64": "0.18.17", +- "@esbuild/android-x64": "0.18.17", +- "@esbuild/darwin-arm64": "0.18.17", +- "@esbuild/darwin-x64": "0.18.17", +- "@esbuild/freebsd-arm64": "0.18.17", +- "@esbuild/freebsd-x64": "0.18.17", +- "@esbuild/linux-arm": "0.18.17", +- "@esbuild/linux-arm64": "0.18.17", +- "@esbuild/linux-ia32": "0.18.17", +- "@esbuild/linux-loong64": "0.18.17", +- "@esbuild/linux-mips64el": "0.18.17", +- "@esbuild/linux-ppc64": "0.18.17", +- "@esbuild/linux-riscv64": "0.18.17", +- "@esbuild/linux-s390x": "0.18.17", +- "@esbuild/linux-x64": "0.18.17", +- "@esbuild/netbsd-x64": "0.18.17", +- "@esbuild/openbsd-x64": "0.18.17", +- "@esbuild/sunos-x64": "0.18.17", +- "@esbuild/win32-arm64": "0.18.17", +- "@esbuild/win32-ia32": "0.18.17", +- "@esbuild/win32-x64": "0.18.17" ++ "@esbuild/aix-ppc64": "0.23.0", ++ "@esbuild/android-arm": "0.23.0", ++ "@esbuild/android-arm64": "0.23.0", ++ "@esbuild/android-x64": "0.23.0", ++ "@esbuild/darwin-arm64": "0.23.0", ++ "@esbuild/darwin-x64": "0.23.0", ++ "@esbuild/freebsd-arm64": "0.23.0", ++ "@esbuild/freebsd-x64": "0.23.0", ++ "@esbuild/linux-arm": "0.23.0", ++ "@esbuild/linux-arm64": "0.23.0", ++ "@esbuild/linux-ia32": "0.23.0", ++ "@esbuild/linux-loong64": "0.23.0", ++ "@esbuild/linux-mips64el": "0.23.0", ++ "@esbuild/linux-ppc64": "0.23.0", ++ "@esbuild/linux-riscv64": "0.23.0", ++ "@esbuild/linux-s390x": "0.23.0", ++ "@esbuild/linux-x64": "0.23.0", ++ "@esbuild/netbsd-x64": "0.23.0", ++ "@esbuild/openbsd-arm64": "0.23.0", ++ "@esbuild/openbsd-x64": "0.23.0", ++ "@esbuild/sunos-x64": "0.23.0", ++ "@esbuild/win32-arm64": "0.23.0", ++ "@esbuild/win32-ia32": "0.23.0", ++ "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/esbuild-plugin-copy": { +@@ -2299,16 +2808,18 @@ + } + }, + "node_modules/esbuild-sass-plugin": { +- "version": "2.10.0", +- "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.10.0.tgz", +- "integrity": "sha512-STv849QGT8g77RRFmroSt4VBVKjv+dypKcO4aWz8IP4G5JbRH0KC0+B8ODuzlUNu9R5MbkGcev/62RDP/JcZ2Q==", ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-3.3.1.tgz", ++ "integrity": "sha512-SnO1ls+d52n6j8gRRpjexXI8MsHEaumS0IdDHaYM29Y6gakzZYMls6i9ql9+AWMSQk/eryndmUpXEgT34QrX1A==", + "dev": true, + "dependencies": { +- "resolve": "^1.22.2", +- "sass": "^1.63.0" ++ "resolve": "^1.22.8", ++ "safe-identifier": "^0.4.2", ++ "sass": "^1.71.1" + }, + "peerDependencies": { +- "esbuild": "^0.18.0" ++ "esbuild": ">=0.20.1", ++ "sass-embedded": "^1.71.1" + } + }, + "node_modules/escalade": { +@@ -2330,1156 +2841,1474 @@ + "node": ">=0.8.0" + } + }, +- "node_modules/eslint-scope": { +- "version": "5.1.1", +- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", +- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", +- "dev": true, +- "peer": true, +- "dependencies": { +- "esrecurse": "^4.3.0", +- "estraverse": "^4.1.1" ++ "node_modules/eslint": { ++ "version": "8.57.0", ++ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", ++ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", ++ "dev": true, ++ "dependencies": { ++ "@eslint-community/eslint-utils": "^4.2.0", ++ "@eslint-community/regexpp": "^4.6.1", ++ "@eslint/eslintrc": "^2.1.4", ++ "@eslint/js": "8.57.0", ++ "@humanwhocodes/config-array": "^0.11.14", ++ "@humanwhocodes/module-importer": "^1.0.1", ++ "@nodelib/fs.walk": "^1.2.8", ++ "@ungap/structured-clone": "^1.2.0", ++ "ajv": "^6.12.4", ++ "chalk": "^4.0.0", ++ "cross-spawn": "^7.0.2", ++ "debug": "^4.3.2", ++ "doctrine": "^3.0.0", ++ "escape-string-regexp": "^4.0.0", ++ "eslint-scope": "^7.2.2", ++ "eslint-visitor-keys": "^3.4.3", ++ "espree": "^9.6.1", ++ "esquery": "^1.4.2", ++ "esutils": "^2.0.2", ++ "fast-deep-equal": "^3.1.3", ++ "file-entry-cache": "^6.0.1", ++ "find-up": "^5.0.0", ++ "glob-parent": "^6.0.2", ++ "globals": "^13.19.0", ++ "graphemer": "^1.4.0", ++ "ignore": "^5.2.0", ++ "imurmurhash": "^0.1.4", ++ "is-glob": "^4.0.0", ++ "is-path-inside": "^3.0.3", ++ "js-yaml": "^4.1.0", ++ "json-stable-stringify-without-jsonify": "^1.0.1", ++ "levn": "^0.4.1", ++ "lodash.merge": "^4.6.2", ++ "minimatch": "^3.1.2", ++ "natural-compare": "^1.4.0", ++ "optionator": "^0.9.3", ++ "strip-ansi": "^6.0.1", ++ "text-table": "^0.2.0" ++ }, ++ "bin": { ++ "eslint": "bin/eslint.js" + }, + "engines": { +- "node": ">=8.0.0" ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ }, ++ "funding": { ++ "url": "https://opencollective.com/eslint" + } + }, +- "node_modules/esrecurse": { +- "version": "4.3.0", +- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", +- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", ++ "node_modules/eslint-compat-utils": { ++ "version": "0.5.1", ++ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", ++ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "peer": true, + "dependencies": { +- "estraverse": "^5.2.0" ++ "semver": "^7.5.4" + }, + "engines": { +- "node": ">=4.0" ++ "node": ">=12" ++ }, ++ "peerDependencies": { ++ "eslint": ">=6.0.0" + } + }, +- "node_modules/esrecurse/node_modules/estraverse": { +- "version": "5.3.0", +- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", +- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", ++ "node_modules/eslint-compat-utils/node_modules/semver": { ++ "version": "7.6.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", ++ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "peer": true, ++ "bin": { ++ "semver": "bin/semver.js" ++ }, + "engines": { +- "node": ">=4.0" ++ "node": ">=10" + } + }, +- "node_modules/estraverse": { +- "version": "4.3.0", +- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", +- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", ++ "node_modules/eslint-config-standard": { ++ "version": "17.1.0", ++ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", ++ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, +- "peer": 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" ++ } ++ ], + "engines": { +- "node": ">=4.0" ++ "node": ">=12.0.0" ++ }, ++ "peerDependencies": { ++ "eslint": "^8.0.1", ++ "eslint-plugin-import": "^2.25.2", ++ "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", ++ "eslint-plugin-promise": "^6.0.0" + } + }, +- "node_modules/event-target-shim": { +- "version": "5.0.1", +- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", +- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", ++ "node_modules/eslint-config-standard-jsx": { ++ "version": "11.0.0", ++ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", ++ "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", + "dev": true, +- "engines": { +- "node": ">=6" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/feross" ++ }, ++ { ++ "type": "patreon", ++ "url": "https://www.patreon.com/feross" ++ }, ++ { ++ "type": "consulting", ++ "url": "https://feross.org/support" ++ } ++ ], ++ "peerDependencies": { ++ "eslint": "^8.8.0", ++ "eslint-plugin-react": "^7.28.0" + } + }, +- "node_modules/events": { +- "version": "3.3.0", +- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", +- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", ++ "node_modules/eslint-config-standard-react": { ++ "version": "13.0.0", ++ "resolved": "https://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-13.0.0.tgz", ++ "integrity": "sha512-HrVPGj8UncHfV+BsdJTuJpVsomn6AIrke3Af2Fh4XFvQQDU+iO6N2ZL+UsC+scExft4fU3uf7fJwj7PKWnXJDA==", + "dev": true, +- "engines": { +- "node": ">=0.8.x" ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/feross" ++ }, ++ { ++ "type": "patreon", ++ "url": "https://www.patreon.com/feross" ++ }, ++ { ++ "type": "consulting", ++ "url": "https://feross.org/support" ++ } ++ ], ++ "peerDependencies": { ++ "eslint": "^8.8.0", ++ "eslint-plugin-react": "^7.28.0", ++ "eslint-plugin-react-hooks": "^4.6.0" + } + }, +- "node_modules/fast-deep-equal": { +- "version": "3.1.3", +- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", +- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", ++ "node_modules/eslint-import-resolver-node": { ++ "version": "0.3.9", ++ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", ++ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, +- "peer": true ++ "dependencies": { ++ "debug": "^3.2.7", ++ "is-core-module": "^2.13.0", ++ "resolve": "^1.22.4" ++ } + }, +- "node_modules/fast-glob": { +- "version": "3.3.1", +- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", +- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", ++ "node_modules/eslint-import-resolver-node/node_modules/debug": { ++ "version": "3.2.7", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", ++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { +- "@nodelib/fs.stat": "^2.0.2", +- "@nodelib/fs.walk": "^1.2.3", +- "glob-parent": "^5.1.2", +- "merge2": "^1.3.0", +- "micromatch": "^4.0.4" +- }, +- "engines": { +- "node": ">=8.6.0" ++ "ms": "^2.1.1" + } + }, +- "node_modules/fast-json-stable-stringify": { +- "version": "2.1.0", +- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", +- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", ++ "node_modules/eslint-module-utils": { ++ "version": "2.8.1", ++ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", ++ "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dev": true, +- "peer": true ++ "dependencies": { ++ "debug": "^3.2.7" ++ }, ++ "engines": { ++ "node": ">=4" ++ }, ++ "peerDependenciesMeta": { ++ "eslint": { ++ "optional": true ++ } ++ } + }, +- "node_modules/fastq": { +- "version": "1.15.0", +- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", +- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", ++ "node_modules/eslint-module-utils/node_modules/debug": { ++ "version": "3.2.7", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", ++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { +- "reusify": "^1.0.4" ++ "ms": "^2.1.1" + } + }, +- "node_modules/file-selector": { +- "version": "0.6.0", +- "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", +- "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", ++ "node_modules/eslint-plugin-es": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", ++ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", ++ "dev": true, + "dependencies": { +- "tslib": "^2.4.0" ++ "eslint-utils": "^2.0.0", ++ "regexpp": "^3.0.0" + }, + "engines": { +- "node": ">= 12" ++ "node": ">=8.10.0" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/mysticatea" ++ }, ++ "peerDependencies": { ++ "eslint": ">=4.19.1" + } + }, +- "node_modules/fill-range": { +- "version": "7.1.1", +- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", +- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", ++ "node_modules/eslint-plugin-es-x": { ++ "version": "7.8.0", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", ++ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, ++ "funding": [ ++ "https://github.com/sponsors/ota-meshi", ++ "https://opencollective.com/eslint" ++ ], ++ "peer": true, + "dependencies": { +- "to-regex-range": "^5.0.1" ++ "@eslint-community/eslint-utils": "^4.1.2", ++ "@eslint-community/regexpp": "^4.11.0", ++ "eslint-compat-utils": "^0.5.1" + }, + "engines": { +- "node": ">=8" ++ "node": "^14.18.0 || >=16.0.0" ++ }, ++ "peerDependencies": { ++ "eslint": ">=8" ++ } ++ }, ++ "node_modules/eslint-plugin-import": { ++ "version": "2.29.1", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", ++ "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", ++ "dev": true, ++ "dependencies": { ++ "array-includes": "^3.1.7", ++ "array.prototype.findlastindex": "^1.2.3", ++ "array.prototype.flat": "^1.3.2", ++ "array.prototype.flatmap": "^1.3.2", ++ "debug": "^3.2.7", ++ "doctrine": "^2.1.0", ++ "eslint-import-resolver-node": "^0.3.9", ++ "eslint-module-utils": "^2.8.0", ++ "hasown": "^2.0.0", ++ "is-core-module": "^2.13.1", ++ "is-glob": "^4.0.3", ++ "minimatch": "^3.1.2", ++ "object.fromentries": "^2.0.7", ++ "object.groupby": "^1.0.1", ++ "object.values": "^1.1.7", ++ "semver": "^6.3.1", ++ "tsconfig-paths": "^3.15.0" ++ }, ++ "engines": { ++ "node": ">=4" ++ }, ++ "peerDependencies": { ++ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, +- "node_modules/find-yarn-workspace-root": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", +- "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", ++ "node_modules/eslint-plugin-import/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, + "dependencies": { +- "micromatch": "^4.0.2" ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/focus-trap": { +- "version": "7.4.2", +- "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.2.tgz", +- "integrity": "sha512-KMjf+H5uDWPkwSQVqE5r/+vOkP5zBWwVBoWPIZxU3gfg+M8IT+Y8s+vXQqZvHEIXyHPKHrSm6m4G4ceF98OZ8w==", ++ "node_modules/eslint-plugin-import/node_modules/debug": { ++ "version": "3.2.7", ++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", ++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", ++ "dev": true, + "dependencies": { +- "tabbable": "^6.1.2" ++ "ms": "^2.1.1" + } + }, +- "node_modules/for-each": { +- "version": "0.3.3", +- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", +- "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", +- "peer": true, ++ "node_modules/eslint-plugin-import/node_modules/doctrine": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", ++ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", ++ "dev": true, + "dependencies": { +- "is-callable": "^1.1.3" ++ "esutils": "^2.0.2" ++ }, ++ "engines": { ++ "node": ">=0.10.0" + } + }, +- "node_modules/foreground-child": { +- "version": "3.1.1", +- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", +- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", ++ "node_modules/eslint-plugin-import/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, + "dependencies": { +- "cross-spawn": "^7.0.0", +- "signal-exit": "^4.0.1" ++ "brace-expansion": "^1.1.7" + }, + "engines": { +- "node": ">=14" +- }, +- "funding": { +- "url": "https://github.com/sponsors/isaacs" ++ "node": "*" + } + }, +- "node_modules/fs-extra": { +- "version": "10.1.0", +- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", +- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", ++ "node_modules/eslint-plugin-n": { ++ "version": "16.6.2", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", ++ "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, ++ "peer": true, + "dependencies": { +- "graceful-fs": "^4.2.0", +- "jsonfile": "^6.0.1", +- "universalify": "^2.0.0" ++ "@eslint-community/eslint-utils": "^4.4.0", ++ "builtins": "^5.0.1", ++ "eslint-plugin-es-x": "^7.5.0", ++ "get-tsconfig": "^4.7.0", ++ "globals": "^13.24.0", ++ "ignore": "^5.2.4", ++ "is-builtin-module": "^3.2.1", ++ "is-core-module": "^2.12.1", ++ "minimatch": "^3.1.2", ++ "resolve": "^1.22.2", ++ "semver": "^7.5.3" + }, + "engines": { +- "node": ">=12" ++ "node": ">=16.0.0" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/mysticatea" ++ }, ++ "peerDependencies": { ++ "eslint": ">=7.0.0" + } + }, +- "node_modules/fs.realpath": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", +- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", +- "dev": true +- }, +- "node_modules/fsevents": { +- "version": "2.3.2", +- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", +- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", ++ "node_modules/eslint-plugin-n/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, +- "hasInstallScript": true, +- "optional": true, +- "os": [ +- "darwin" +- ], +- "engines": { +- "node": "^8.16.0 || ^10.6.0 || >=11.0.0" +- } +- }, +- "node_modules/function-bind": { +- "version": "1.1.1", +- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", +- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" +- }, +- "node_modules/functions-have-names": { +- "version": "1.2.3", +- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", +- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "peer": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "dependencies": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/gensync": { +- "version": "1.0.0-beta.2", +- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", +- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", ++ "node_modules/eslint-plugin-n/node_modules/globals": { ++ "version": "13.24.0", ++ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", ++ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "peer": true, ++ "dependencies": { ++ "type-fest": "^0.20.2" ++ }, + "engines": { +- "node": ">=6.9.0" ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/get-intrinsic": { +- "version": "1.2.1", +- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", +- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", ++ "node_modules/eslint-plugin-n/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, + "peer": true, + "dependencies": { +- "function-bind": "^1.1.1", +- "has": "^1.0.3", +- "has-proto": "^1.0.1", +- "has-symbols": "^1.0.3" ++ "brace-expansion": "^1.1.7" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": "*" + } + }, +- "node_modules/gettext-parser": { +- "version": "7.0.1", +- "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-7.0.1.tgz", +- "integrity": "sha512-LU+ieGH3L9HmKEArTlX816/iiAlyA0fx/n/QSeQpkAaH/+jxMk/5UtDkAzcVvW+KlY25/U+IE6dnfkJ8ynt8pQ==", ++ "node_modules/eslint-plugin-n/node_modules/semver": { ++ "version": "7.6.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", ++ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, +- "dependencies": { +- "content-type": "^1.0.5", +- "encoding": "^0.1.13", +- "readable-stream": "^4.3.0", +- "safe-buffer": "^5.2.1" ++ "peer": true, ++ "bin": { ++ "semver": "bin/semver.js" ++ }, ++ "engines": { ++ "node": ">=10" + } + }, +- "node_modules/glob": { +- "version": "10.3.3", +- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", +- "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", ++ "node_modules/eslint-plugin-node": { ++ "version": "11.1.0", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", ++ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", ++ "dev": true, + "dependencies": { +- "foreground-child": "^3.1.0", +- "jackspeak": "^2.0.3", +- "minimatch": "^9.0.1", +- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", +- "path-scurry": "^1.10.1" +- }, +- "bin": { +- "glob": "dist/cjs/src/bin.js" ++ "eslint-plugin-es": "^3.0.0", ++ "eslint-utils": "^2.0.0", ++ "ignore": "^5.1.1", ++ "minimatch": "^3.0.4", ++ "resolve": "^1.10.1", ++ "semver": "^6.1.0" + }, + "engines": { +- "node": ">=16 || 14 >=14.17" ++ "node": ">=8.10.0" + }, +- "funding": { +- "url": "https://github.com/sponsors/isaacs" ++ "peerDependencies": { ++ "eslint": ">=5.16.0" + } + }, +- "node_modules/glob-parent": { +- "version": "5.1.2", +- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", +- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", ++ "node_modules/eslint-plugin-node/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, + "dependencies": { +- "is-glob": "^4.0.1" +- }, +- "engines": { +- "node": ">= 6" ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/glob-to-regexp": { +- "version": "0.4.1", +- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", +- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", ++ "node_modules/eslint-plugin-node/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, +- "peer": true ++ "dependencies": { ++ "brace-expansion": "^1.1.7" ++ }, ++ "engines": { ++ "node": "*" ++ } + }, +- "node_modules/globals": { +- "version": "11.12.0", +- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", +- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", ++ "node_modules/eslint-plugin-promise": { ++ "version": "6.6.0", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", ++ "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, +- "peer": true, ++ "engines": { ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ }, ++ "funding": { ++ "url": "https://opencollective.com/eslint" ++ }, ++ "peerDependencies": { ++ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" ++ } ++ }, ++ "node_modules/eslint-plugin-react": { ++ "version": "7.35.0", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", ++ "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", ++ "dev": true, ++ "dependencies": { ++ "array-includes": "^3.1.8", ++ "array.prototype.findlast": "^1.2.5", ++ "array.prototype.flatmap": "^1.3.2", ++ "array.prototype.tosorted": "^1.1.4", ++ "doctrine": "^2.1.0", ++ "es-iterator-helpers": "^1.0.19", ++ "estraverse": "^5.3.0", ++ "hasown": "^2.0.2", ++ "jsx-ast-utils": "^2.4.1 || ^3.0.0", ++ "minimatch": "^3.1.2", ++ "object.entries": "^1.1.8", ++ "object.fromentries": "^2.0.8", ++ "object.values": "^1.2.0", ++ "prop-types": "^15.8.1", ++ "resolve": "^2.0.0-next.5", ++ "semver": "^6.3.1", ++ "string.prototype.matchall": "^4.0.11", ++ "string.prototype.repeat": "^1.0.0" ++ }, + "engines": { + "node": ">=4" ++ }, ++ "peerDependencies": { ++ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, +- "node_modules/globalyzer": { +- "version": "0.1.0", +- "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", +- "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", +- "dev": true +- }, +- "node_modules/globby": { +- "version": "11.1.0", +- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", +- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", ++ "node_modules/eslint-plugin-react-hooks": { ++ "version": "4.6.2", ++ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", ++ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, +- "dependencies": { +- "array-union": "^2.1.0", +- "dir-glob": "^3.0.1", +- "fast-glob": "^3.2.9", +- "ignore": "^5.2.0", +- "merge2": "^1.4.1", +- "slash": "^3.0.0" +- }, + "engines": { + "node": ">=10" + }, +- "funding": { +- "url": "https://github.com/sponsors/sindresorhus" ++ "peerDependencies": { ++ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, +- "node_modules/globrex": { +- "version": "0.1.2", +- "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", +- "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", +- "dev": true +- }, +- "node_modules/gopd": { +- "version": "1.0.1", +- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", +- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", +- "peer": true, ++ "node_modules/eslint-plugin-react/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, + "dependencies": { +- "get-intrinsic": "^1.1.3" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/graceful-fs": { +- "version": "4.2.11", +- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", +- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", +- "dev": true +- }, +- "node_modules/has": { +- "version": "1.0.3", +- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", +- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", ++ "node_modules/eslint-plugin-react/node_modules/doctrine": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", ++ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", ++ "dev": true, + "dependencies": { +- "function-bind": "^1.1.1" ++ "esutils": "^2.0.2" + }, + "engines": { +- "node": ">= 0.4.0" +- } +- }, +- "node_modules/has-bigints": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", +- "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", +- "peer": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=0.10.0" + } + }, +- "node_modules/has-flag": { +- "version": "3.0.0", +- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", +- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", ++ "node_modules/eslint-plugin-react/node_modules/estraverse": { ++ "version": "5.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", ++ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { +- "node": ">=4" ++ "node": ">=4.0" + } + }, +- "node_modules/has-property-descriptors": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", +- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", +- "peer": true, ++ "node_modules/eslint-plugin-react/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, + "dependencies": { +- "get-intrinsic": "^1.1.1" ++ "brace-expansion": "^1.1.7" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": "*" + } + }, +- "node_modules/has-proto": { +- "version": "1.0.1", +- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", +- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", +- "peer": true, +- "engines": { +- "node": ">= 0.4" ++ "node_modules/eslint-plugin-react/node_modules/resolve": { ++ "version": "2.0.0-next.5", ++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", ++ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", ++ "dev": true, ++ "dependencies": { ++ "is-core-module": "^2.13.0", ++ "path-parse": "^1.0.7", ++ "supports-preserve-symlinks-flag": "^1.0.0" ++ }, ++ "bin": { ++ "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/has-symbols": { +- "version": "1.0.3", +- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", +- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", ++ "node_modules/eslint-scope": { ++ "version": "5.1.1", ++ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", ++ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", ++ "dev": true, + "peer": true, +- "engines": { +- "node": ">= 0.4" ++ "dependencies": { ++ "esrecurse": "^4.3.0", ++ "estraverse": "^4.1.1" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": ">=8.0.0" + } + }, +- "node_modules/has-tostringtag": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", +- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", +- "peer": true, ++ "node_modules/eslint-utils": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", ++ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", ++ "dev": true, + "dependencies": { +- "has-symbols": "^1.0.2" ++ "eslint-visitor-keys": "^1.1.0" + }, + "engines": { +- "node": ">= 0.4" ++ "node": ">=6" + }, + "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "url": "https://github.com/sponsors/mysticatea" + } + }, +- "node_modules/htmlparser": { +- "version": "1.7.7", +- "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz", +- "integrity": "sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ==", ++ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", ++ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { +- "node": ">=0.1.33" ++ "node": ">=4" + } + }, +- "node_modules/iconv-lite": { +- "version": "0.6.3", +- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", +- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", ++ "node_modules/eslint-visitor-keys": { ++ "version": "3.4.3", ++ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", ++ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, +- "dependencies": { +- "safer-buffer": ">= 2.1.2 < 3.0.0" ++ "engines": { ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, ++ "funding": { ++ "url": "https://opencollective.com/eslint" ++ } ++ }, ++ "node_modules/eslint/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "dev": true, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=8" + } + }, +- "node_modules/ieee754": { +- "version": "1.2.1", +- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", +- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", +- "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" +- } +- ] +- }, +- "node_modules/ignore": { +- "version": "5.2.4", +- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", +- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", ++ "node_modules/eslint/node_modules/ansi-styles": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", ++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, ++ "dependencies": { ++ "color-convert": "^2.0.1" ++ }, + "engines": { +- "node": ">= 4" ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, +- "node_modules/immutable": { +- "version": "4.3.1", +- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", +- "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", +- "dev": true +- }, +- "node_modules/inflight": { +- "version": "1.0.6", +- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", +- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", ++ "node_modules/eslint/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, + "dependencies": { +- "once": "^1.3.0", +- "wrappy": "1" ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/inherits": { +- "version": "2.0.4", +- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", +- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", +- "dev": true +- }, +- "node_modules/internal-slot": { +- "version": "1.0.5", +- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", +- "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", +- "peer": true, ++ "node_modules/eslint/node_modules/chalk": { ++ "version": "4.1.2", ++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", ++ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", ++ "dev": true, + "dependencies": { +- "get-intrinsic": "^1.2.0", +- "has": "^1.0.3", +- "side-channel": "^1.0.4" ++ "ansi-styles": "^4.1.0", ++ "supports-color": "^7.1.0" + }, + "engines": { +- "node": ">= 0.4" ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, +- "node_modules/is-arguments": { +- "version": "1.1.1", +- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", +- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", +- "peer": true, ++ "node_modules/eslint/node_modules/color-convert": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ++ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", ++ "dev": true, + "dependencies": { +- "call-bind": "^1.0.2", +- "has-tostringtag": "^1.0.0" ++ "color-name": "~1.1.4" + }, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=7.0.0" + } + }, +- "node_modules/is-array-buffer": { +- "version": "3.0.2", +- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", +- "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", +- "peer": true, +- "dependencies": { +- "call-bind": "^1.0.2", +- "get-intrinsic": "^1.2.0", +- "is-typed-array": "^1.1.10" ++ "node_modules/eslint/node_modules/color-name": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", ++ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", ++ "dev": true ++ }, ++ "node_modules/eslint/node_modules/escape-string-regexp": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", ++ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", ++ "dev": true, ++ "engines": { ++ "node": ">=10" + }, + "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/is-bigint": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", +- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", +- "peer": true, ++ "node_modules/eslint/node_modules/eslint-scope": { ++ "version": "7.2.2", ++ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", ++ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", ++ "dev": true, + "dependencies": { +- "has-bigints": "^1.0.1" ++ "esrecurse": "^4.3.0", ++ "estraverse": "^5.2.0" ++ }, ++ "engines": { ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "url": "https://opencollective.com/eslint" + } + }, +- "node_modules/is-binary-path": { +- "version": "2.1.0", +- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", +- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", ++ "node_modules/eslint/node_modules/estraverse": { ++ "version": "5.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", ++ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", ++ "dev": true, ++ "engines": { ++ "node": ">=4.0" ++ } ++ }, ++ "node_modules/eslint/node_modules/glob-parent": { ++ "version": "6.0.2", ++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", ++ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { +- "binary-extensions": "^2.0.0" ++ "is-glob": "^4.0.3" + }, + "engines": { +- "node": ">=8" ++ "node": ">=10.13.0" + } + }, +- "node_modules/is-boolean-object": { +- "version": "1.1.2", +- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", +- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", +- "peer": true, ++ "node_modules/eslint/node_modules/globals": { ++ "version": "13.24.0", ++ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", ++ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", ++ "dev": true, + "dependencies": { +- "call-bind": "^1.0.2", +- "has-tostringtag": "^1.0.0" ++ "type-fest": "^0.20.2" + }, + "engines": { +- "node": ">= 0.4" ++ "node": ">=8" + }, + "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/is-callable": { +- "version": "1.2.7", +- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", +- "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", +- "peer": true, ++ "node_modules/eslint/node_modules/has-flag": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "dev": true, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=8" + } + }, +- "node_modules/is-core-module": { +- "version": "2.12.1", +- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", +- "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", ++ "node_modules/eslint/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, + "dependencies": { +- "has": "^1.0.3" ++ "brace-expansion": "^1.1.7" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": "*" + } + }, +- "node_modules/is-date-object": { +- "version": "1.0.5", +- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", +- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", +- "peer": true, ++ "node_modules/eslint/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, + "dependencies": { +- "has-tostringtag": "^1.0.0" ++ "ansi-regex": "^5.0.1" + }, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=8" + } + }, +- "node_modules/is-docker": { +- "version": "2.2.1", +- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", +- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", ++ "node_modules/eslint/node_modules/supports-color": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", ++ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, +- "bin": { +- "is-docker": "cli.js" ++ "dependencies": { ++ "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" ++ } ++ }, ++ "node_modules/espree": { ++ "version": "9.6.1", ++ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", ++ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", ++ "dev": true, ++ "dependencies": { ++ "acorn": "^8.9.0", ++ "acorn-jsx": "^5.3.2", ++ "eslint-visitor-keys": "^3.4.1" ++ }, ++ "engines": { ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { +- "url": "https://github.com/sponsors/sindresorhus" ++ "url": "https://opencollective.com/eslint" + } + }, +- "node_modules/is-extglob": { +- "version": "2.1.1", +- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", +- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", ++ "node_modules/esquery": { ++ "version": "1.6.0", ++ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", ++ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, ++ "dependencies": { ++ "estraverse": "^5.1.0" ++ }, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=0.10" + } + }, +- "node_modules/is-fullwidth-code-point": { +- "version": "3.0.0", +- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", +- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", ++ "node_modules/esquery/node_modules/estraverse": { ++ "version": "5.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", ++ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", ++ "dev": true, + "engines": { +- "node": ">=8" ++ "node": ">=4.0" + } + }, +- "node_modules/is-glob": { +- "version": "4.0.3", +- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", +- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", ++ "node_modules/esrecurse": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", ++ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { +- "is-extglob": "^2.1.1" ++ "estraverse": "^5.2.0" + }, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=4.0" + } + }, +- "node_modules/is-map": { +- "version": "2.0.2", +- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", +- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", +- "peer": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node_modules/esrecurse/node_modules/estraverse": { ++ "version": "5.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", ++ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", ++ "dev": true, ++ "engines": { ++ "node": ">=4.0" + } + }, +- "node_modules/is-number": { +- "version": "7.0.0", +- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", +- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", ++ "node_modules/estraverse": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", ++ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, ++ "peer": true, + "engines": { +- "node": ">=0.12.0" ++ "node": ">=4.0" + } + }, +- "node_modules/is-number-object": { +- "version": "1.0.7", +- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", +- "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", +- "peer": true, +- "dependencies": { +- "has-tostringtag": "^1.0.0" +- }, ++ "node_modules/esutils": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", ++ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", ++ "dev": true, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=0.10.0" + } + }, +- "node_modules/is-regex": { +- "version": "1.1.4", +- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", +- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", +- "peer": true, +- "dependencies": { +- "call-bind": "^1.0.2", +- "has-tostringtag": "^1.0.0" +- }, ++ "node_modules/event-target-shim": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", ++ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", ++ "dev": true, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">=6" + } + }, +- "node_modules/is-set": { +- "version": "2.0.2", +- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", +- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", +- "peer": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node_modules/events": { ++ "version": "3.3.0", ++ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", ++ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.8.x" + } + }, +- "node_modules/is-shared-array-buffer": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", +- "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", +- "peer": true, ++ "node_modules/fast-deep-equal": { ++ "version": "3.1.3", ++ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", ++ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", ++ "dev": true ++ }, ++ "node_modules/fast-glob": { ++ "version": "3.3.2", ++ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", ++ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", ++ "dev": true, + "dependencies": { +- "call-bind": "^1.0.2" ++ "@nodelib/fs.stat": "^2.0.2", ++ "@nodelib/fs.walk": "^1.2.3", ++ "glob-parent": "^5.1.2", ++ "merge2": "^1.3.0", ++ "micromatch": "^4.0.4" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": ">=8.6.0" + } + }, +- "node_modules/is-string": { +- "version": "1.0.7", +- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", +- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", +- "peer": true, +- "dependencies": { +- "has-tostringtag": "^1.0.0" +- }, ++ "node_modules/fast-json-stable-stringify": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", ++ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", ++ "dev": true ++ }, ++ "node_modules/fast-levenshtein": { ++ "version": "2.0.6", ++ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", ++ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", ++ "dev": true ++ }, ++ "node_modules/fast-uri": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", ++ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", ++ "dev": true ++ }, ++ "node_modules/fastest-levenshtein": { ++ "version": "1.0.16", ++ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", ++ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", ++ "dev": true, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": ">= 4.9.1" + } + }, +- "node_modules/is-symbol": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", +- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", +- "peer": true, ++ "node_modules/fastq": { ++ "version": "1.15.0", ++ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", ++ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", ++ "dev": true, + "dependencies": { +- "has-symbols": "^1.0.2" +- }, +- "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "reusify": "^1.0.4" + } + }, +- "node_modules/is-typed-array": { +- "version": "1.1.12", +- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", +- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", +- "peer": true, ++ "node_modules/file-entry-cache": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", ++ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", ++ "dev": true, + "dependencies": { +- "which-typed-array": "^1.1.11" ++ "flat-cache": "^3.0.4" + }, + "engines": { +- "node": ">= 0.4" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" +- } +- }, +- "node_modules/is-weakmap": { +- "version": "2.0.1", +- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", +- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", +- "peer": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "node": "^10.12.0 || >=12.0.0" + } + }, +- "node_modules/is-weakset": { +- "version": "2.0.2", +- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", +- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", +- "peer": true, ++ "node_modules/file-selector": { ++ "version": "0.6.0", ++ "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", ++ "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "dependencies": { +- "call-bind": "^1.0.2", +- "get-intrinsic": "^1.1.1" ++ "tslib": "^2.4.0" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "engines": { ++ "node": ">= 12" + } + }, +- "node_modules/is-wsl": { +- "version": "2.2.0", +- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", +- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", ++ "node_modules/fill-range": { ++ "version": "7.1.1", ++ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", ++ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { +- "is-docker": "^2.0.0" ++ "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, +- "node_modules/isarray": { +- "version": "2.0.5", +- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", +- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", +- "peer": true +- }, +- "node_modules/isexe": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", +- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" +- }, +- "node_modules/jackspeak": { +- "version": "2.2.2", +- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", +- "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", ++ "node_modules/find-up": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", ++ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", ++ "dev": true, + "dependencies": { +- "@isaacs/cliui": "^8.0.2" ++ "locate-path": "^6.0.0", ++ "path-exists": "^4.0.0" + }, + "engines": { +- "node": ">=14" ++ "node": ">=10" + }, + "funding": { +- "url": "https://github.com/sponsors/isaacs" +- }, +- "optionalDependencies": { +- "@pkgjs/parseargs": "^0.11.0" ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/jed": { +- "version": "1.1.1", +- "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", +- "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==", +- "dev": true ++ "node_modules/find-yarn-workspace-root": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", ++ "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", ++ "dev": true, ++ "dependencies": { ++ "micromatch": "^4.0.2" ++ } + }, +- "node_modules/jest-worker": { +- "version": "27.5.1", +- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", +- "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", ++ "node_modules/flat-cache": { ++ "version": "3.2.0", ++ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", ++ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, +- "peer": true, + "dependencies": { +- "@types/node": "*", +- "merge-stream": "^2.0.0", +- "supports-color": "^8.0.0" ++ "flatted": "^3.2.9", ++ "keyv": "^4.5.3", ++ "rimraf": "^3.0.2" + }, + "engines": { +- "node": ">= 10.13.0" ++ "node": "^10.12.0 || >=12.0.0" + } + }, +- "node_modules/jest-worker/node_modules/has-flag": { +- "version": "4.0.0", +- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", +- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "node_modules/flat-cache/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, +- "peer": true, +- "engines": { +- "node": ">=8" ++ "dependencies": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" + } + }, +- "node_modules/jest-worker/node_modules/supports-color": { +- "version": "8.1.1", +- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", +- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", ++ "node_modules/flat-cache/node_modules/glob": { ++ "version": "7.2.3", ++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", ++ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", ++ "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, +- "peer": true, + "dependencies": { +- "has-flag": "^4.0.0" ++ "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": ">=10" ++ "node": "*" + }, + "funding": { +- "url": "https://github.com/chalk/supports-color?sponsor=1" ++ "url": "https://github.com/sponsors/isaacs" + } + }, +- "node_modules/js-tokens": { +- "version": "4.0.0", +- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", +- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" +- }, +- "node_modules/jsesc": { +- "version": "2.5.2", +- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", +- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", ++ "node_modules/flat-cache/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, +- "peer": true, +- "bin": { +- "jsesc": "bin/jsesc" ++ "dependencies": { ++ "brace-expansion": "^1.1.7" + }, + "engines": { +- "node": ">=4" ++ "node": "*" + } + }, +- "node_modules/json-parse-even-better-errors": { +- "version": "2.3.1", +- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", +- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", ++ "node_modules/flat-cache/node_modules/rimraf": { ++ "version": "3.0.2", ++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", ++ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", ++ "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, +- "peer": true +- }, +- "node_modules/json-schema-traverse": { +- "version": "0.4.1", +- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", +- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", +- "dev": true, +- "peer": true +- }, +- "node_modules/json5": { +- "version": "2.2.3", +- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", +- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", +- "dev": true, +- "peer": true, ++ "dependencies": { ++ "glob": "^7.1.3" ++ }, + "bin": { +- "json5": "lib/cli.js" ++ "rimraf": "bin.js" + }, +- "engines": { +- "node": ">=6" ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" + } + }, +- "node_modules/jsonfile": { +- "version": "6.1.0", +- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", +- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", +- "dev": true, ++ "node_modules/flatted": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", ++ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", ++ "dev": true ++ }, ++ "node_modules/focus-trap": { ++ "version": "7.5.2", ++ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.2.tgz", ++ "integrity": "sha512-p6vGNNWLDGwJCiEjkSK6oERj/hEyI9ITsSwIUICBoKLlWiTWXJRfQibCwcoi50rTZdbi87qDtUlMCmQwsGSgPw==", + "dependencies": { +- "universalify": "^2.0.0" +- }, +- "optionalDependencies": { +- "graceful-fs": "^4.1.6" ++ "tabbable": "^6.2.0" + } + }, +- "node_modules/klaw-sync": { +- "version": "6.0.0", +- "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", +- "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", +- "dev": true, ++ "node_modules/for-each": { ++ "version": "0.3.3", ++ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", ++ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { +- "graceful-fs": "^4.1.11" ++ "is-callable": "^1.1.3" + } + }, +- "node_modules/loader-runner": { +- "version": "4.3.0", +- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", +- "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", +- "dev": true, +- "peer": true, ++ "node_modules/foreground-child": { ++ "version": "3.2.1", ++ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", ++ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", ++ "dependencies": { ++ "cross-spawn": "^7.0.0", ++ "signal-exit": "^4.0.1" ++ }, + "engines": { +- "node": ">=6.11.5" ++ "node": ">=14" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" + } + }, +- "node_modules/loose-envify": { +- "version": "1.4.0", +- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", +- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", ++ "node_modules/fs-extra": { ++ "version": "10.1.0", ++ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", ++ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", ++ "dev": true, + "dependencies": { +- "js-tokens": "^3.0.0 || ^4.0.0" ++ "graceful-fs": "^4.2.0", ++ "jsonfile": "^6.0.1", ++ "universalify": "^2.0.0" + }, +- "bin": { +- "loose-envify": "cli.js" ++ "engines": { ++ "node": ">=12" + } + }, +- "node_modules/lru-cache": { +- "version": "5.1.1", +- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", +- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", +- "dev": true, +- "peer": true, +- "dependencies": { +- "yallist": "^3.0.2" ++ "node_modules/fs.realpath": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", ++ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", ++ "dev": true ++ }, ++ "node_modules/function-bind": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", ++ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/magic-string": { +- "version": "0.25.9", +- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", +- "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", ++ "node_modules/function.prototype.name": { ++ "version": "1.1.6", ++ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", ++ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { +- "sourcemap-codec": "^1.4.8" ++ "call-bind": "^1.0.2", ++ "define-properties": "^1.2.0", ++ "es-abstract": "^1.22.1", ++ "functions-have-names": "^1.2.3" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/merge-stream": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", +- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", +- "dev": true, +- "peer": true ++ "node_modules/functions-have-names": { ++ "version": "1.2.3", ++ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", ++ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } + }, +- "node_modules/merge2": { +- "version": "1.4.1", +- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", +- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", ++ "node_modules/gensync": { ++ "version": "1.0.0-beta.2", ++ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", ++ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, ++ "peer": true, + "engines": { +- "node": ">= 8" ++ "node": ">=6.9.0" + } + }, +- "node_modules/micromatch": { +- "version": "4.0.5", +- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", +- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", ++ "node_modules/get-east-asian-width": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", ++ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, ++ "engines": { ++ "node": ">=18" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/get-intrinsic": { ++ "version": "1.2.4", ++ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", ++ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { +- "braces": "^3.0.2", +- "picomatch": "^2.3.1" ++ "es-errors": "^1.3.0", ++ "function-bind": "^1.1.2", ++ "has-proto": "^1.0.1", ++ "has-symbols": "^1.0.3", ++ "hasown": "^2.0.0" + }, + "engines": { +- "node": ">=8.6" ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/mime-db": { +- "version": "1.52.0", +- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", +- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", ++ "node_modules/get-symbol-description": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", ++ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, +- "peer": true, ++ "dependencies": { ++ "call-bind": "^1.0.5", ++ "es-errors": "^1.3.0", ++ "get-intrinsic": "^1.2.4" ++ }, + "engines": { +- "node": ">= 0.6" ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/mime-types": { +- "version": "2.1.35", +- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", +- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", ++ "node_modules/get-tsconfig": { ++ "version": "4.7.6", ++ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", ++ "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "dev": true, + "peer": true, + "dependencies": { +- "mime-db": "1.52.0" ++ "resolve-pkg-maps": "^1.0.0" ++ }, ++ "funding": { ++ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" ++ } ++ }, ++ "node_modules/gettext-parser": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-8.0.0.tgz", ++ "integrity": "sha512-eFmhDi2xQ+2reMRY2AbJ2oa10uFOl1oyGbAKdCZiNOk94NJHi7aN0OBELSC9v35ZAPQdr+uRBi93/Gu4SlBdrA==", ++ "dev": true, ++ "dependencies": { ++ "content-type": "^1.0.5", ++ "encoding": "^0.1.13", ++ "readable-stream": "^4.5.2", ++ "safe-buffer": "^5.2.1" + }, + "engines": { +- "node": ">= 0.6" ++ "node": ">=18" + } + }, +- "node_modules/minimatch": { +- "version": "9.0.3", +- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", +- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", ++ "node_modules/glob": { ++ "version": "11.0.0", ++ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", ++ "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "dependencies": { +- "brace-expansion": "^2.0.1" ++ "foreground-child": "^3.1.0", ++ "jackspeak": "^4.0.1", ++ "minimatch": "^10.0.0", ++ "minipass": "^7.1.2", ++ "package-json-from-dist": "^1.0.0", ++ "path-scurry": "^2.0.0" ++ }, ++ "bin": { ++ "glob": "dist/esm/bin.mjs" + }, + "engines": { +- "node": ">=16 || 14 >=14.17" ++ "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, +- "node_modules/minimist": { +- "version": "1.2.8", +- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", +- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", ++ "node_modules/glob-parent": { ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", ++ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" +- } +- }, +- "node_modules/minipass": { +- "version": "7.0.2", +- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", +- "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", ++ "dependencies": { ++ "is-glob": "^4.0.1" ++ }, + "engines": { +- "node": ">=16 || 14 >=14.17" ++ "node": ">= 6" + } + }, +- "node_modules/ms": { +- "version": "2.1.2", +- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", +- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", +- "dev": true, +- "peer": true +- }, +- "node_modules/neo-async": { +- "version": "2.6.2", +- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", +- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", ++ "node_modules/glob-to-regexp": { ++ "version": "0.4.1", ++ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", ++ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, +- "node_modules/node-releases": { +- "version": "2.0.13", +- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", +- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", +- "dev": true, +- "peer": true ++ "node_modules/glob/node_modules/minimatch": { ++ "version": "10.0.1", ++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", ++ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", ++ "dependencies": { ++ "brace-expansion": "^2.0.1" ++ }, ++ "engines": { ++ "node": "20 || >=22" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" ++ } + }, +- "node_modules/node-watch": { +- "version": "0.7.3", +- "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", +- "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==", ++ "node_modules/global-modules": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", ++ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, ++ "dependencies": { ++ "global-prefix": "^3.0.0" ++ }, + "engines": { + "node": ">=6" + } + }, +- "node_modules/normalize-path": { ++ "node_modules/global-prefix": { + "version": "3.0.0", +- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", +- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", ++ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", ++ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, ++ "dependencies": { ++ "ini": "^1.3.5", ++ "kind-of": "^6.0.2", ++ "which": "^1.3.1" ++ }, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=6" + } + }, +- "node_modules/object-assign": { +- "version": "4.1.1", +- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", +- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", +- "engines": { +- "node": ">=0.10.0" +- } ++ "node_modules/global-prefix/node_modules/which": { ++ "version": "1.3.1", ++ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", ++ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", ++ "dev": true, ++ "dependencies": { ++ "isexe": "^2.0.0" ++ }, ++ "bin": { ++ "which": "bin/which" ++ } + }, +- "node_modules/object-inspect": { +- "version": "1.12.3", +- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", +- "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", ++ "node_modules/globals": { ++ "version": "11.12.0", ++ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", ++ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", ++ "dev": true, + "peer": true, ++ "engines": { ++ "node": ">=4" ++ } ++ }, ++ "node_modules/globalthis": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", ++ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", ++ "dev": true, ++ "dependencies": { ++ "define-properties": "^1.2.1", ++ "gopd": "^1.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/object-is": { +- "version": "1.1.5", +- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", +- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", +- "peer": true, ++ "node_modules/globalyzer": { ++ "version": "0.1.0", ++ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", ++ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", ++ "dev": true ++ }, ++ "node_modules/globby": { ++ "version": "11.1.0", ++ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", ++ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", ++ "dev": true, + "dependencies": { +- "call-bind": "^1.0.2", +- "define-properties": "^1.1.3" ++ "array-union": "^2.1.0", ++ "dir-glob": "^3.0.1", ++ "fast-glob": "^3.2.9", ++ "ignore": "^5.2.0", ++ "merge2": "^1.4.1", ++ "slash": "^3.0.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/globjoin": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", ++ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", ++ "dev": true ++ }, ++ "node_modules/globrex": { ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", ++ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", ++ "dev": true ++ }, ++ "node_modules/gopd": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", ++ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", ++ "dependencies": { ++ "get-intrinsic": "^1.1.3" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/graceful-fs": { ++ "version": "4.2.11", ++ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", ++ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", ++ "dev": true ++ }, ++ "node_modules/graphemer": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", ++ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", ++ "dev": true ++ }, ++ "node_modules/has-bigints": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", ++ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/has-flag": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", ++ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", ++ "dev": true, ++ "engines": { ++ "node": ">=4" ++ } ++ }, ++ "node_modules/has-property-descriptors": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", ++ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", ++ "dependencies": { ++ "es-define-property": "^1.0.0" + }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/has-proto": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", ++ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, +@@ -3487,25 +4316,23 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/object-keys": { +- "version": "1.1.1", +- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", +- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", +- "peer": true, ++ "node_modules/has-symbols": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", ++ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/object.assign": { +- "version": "4.1.4", +- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", +- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", +- "peer": true, ++ "node_modules/has-tostringtag": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", ++ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { +- "call-bind": "^1.0.2", +- "define-properties": "^1.1.4", +- "has-symbols": "^1.0.3", +- "object-keys": "^1.1.1" ++ "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" +@@ -3514,447 +4341,2566 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/once": { +- "version": "1.4.0", +- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", +- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", ++ "node_modules/hasown": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", ++ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", ++ "dependencies": { ++ "function-bind": "^1.1.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/html-tags": { ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", ++ "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/htmlparser": { ++ "version": "1.7.7", ++ "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz", ++ "integrity": "sha512-zpK66ifkT0fauyFh2Mulrq4AqGTucxGtOhZ8OjkbSfcCpkqQEI8qRkY0tSQSJNAQ4HUZkgWaU4fK4EH6SVH9PQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.1.33" ++ } ++ }, ++ "node_modules/iconv-lite": { ++ "version": "0.6.3", ++ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", ++ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { +- "wrappy": "1" ++ "safer-buffer": ">= 2.1.2 < 3.0.0" ++ }, ++ "engines": { ++ "node": ">=0.10.0" + } + }, +- "node_modules/open": { +- "version": "7.4.2", +- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", +- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", ++ "node_modules/ieee754": { ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", ++ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", ++ "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" ++ } ++ ] ++ }, ++ "node_modules/ignore": { ++ "version": "5.3.1", ++ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", ++ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", ++ "dev": true, ++ "engines": { ++ "node": ">= 4" ++ } ++ }, ++ "node_modules/immutable": { ++ "version": "4.3.1", ++ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", ++ "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", ++ "dev": true ++ }, ++ "node_modules/import-fresh": { ++ "version": "3.3.0", ++ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", ++ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { +- "is-docker": "^2.0.0", +- "is-wsl": "^2.1.1" ++ "parent-module": "^1.0.0", ++ "resolve-from": "^4.0.0" + }, + "engines": { +- "node": ">=8" ++ "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/os-tmpdir": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", +- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", ++ "node_modules/imurmurhash": { ++ "version": "0.1.4", ++ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", ++ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=0.8.19" + } + }, +- "node_modules/patch-package": { +- "version": "7.0.2", +- "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", +- "integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", ++ "node_modules/inflight": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", ++ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { +- "@yarnpkg/lockfile": "^1.1.0", +- "chalk": "^4.1.2", +- "ci-info": "^3.7.0", +- "cross-spawn": "^7.0.3", +- "find-yarn-workspace-root": "^2.0.0", +- "fs-extra": "^9.0.0", +- "klaw-sync": "^6.0.0", +- "minimist": "^1.2.6", +- "open": "^7.4.2", +- "rimraf": "^2.6.3", +- "semver": "^7.5.3", +- "slash": "^2.0.0", +- "tmp": "^0.0.33", +- "yaml": "^2.2.2" ++ "once": "^1.3.0", ++ "wrappy": "1" ++ } ++ }, ++ "node_modules/inherits": { ++ "version": "2.0.4", ++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", ++ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", ++ "dev": true ++ }, ++ "node_modules/ini": { ++ "version": "1.3.8", ++ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", ++ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", ++ "dev": true ++ }, ++ "node_modules/internal-slot": { ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", ++ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", ++ "dependencies": { ++ "es-errors": "^1.3.0", ++ "hasown": "^2.0.0", ++ "side-channel": "^1.0.4" + }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/irregular-plurals": { ++ "version": "3.5.0", ++ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", ++ "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/is-arguments": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", ++ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", ++ "peer": true, ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-array-buffer": { ++ "version": "3.0.4", ++ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", ++ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "get-intrinsic": "^1.2.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-arrayish": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", ++ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", ++ "dev": true ++ }, ++ "node_modules/is-async-function": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", ++ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", ++ "dev": true, ++ "dependencies": { ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-bigint": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", ++ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", ++ "dependencies": { ++ "has-bigints": "^1.0.1" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-binary-path": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", ++ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", ++ "dev": true, ++ "dependencies": { ++ "binary-extensions": "^2.0.0" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/is-boolean-object": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", ++ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-builtin-module": { ++ "version": "3.2.1", ++ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", ++ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "builtin-modules": "^3.3.0" ++ }, ++ "engines": { ++ "node": ">=6" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/is-callable": { ++ "version": "1.2.7", ++ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", ++ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-core-module": { ++ "version": "2.15.0", ++ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", ++ "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", ++ "dev": true, ++ "dependencies": { ++ "hasown": "^2.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-data-view": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", ++ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", ++ "dev": true, ++ "dependencies": { ++ "is-typed-array": "^1.1.13" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-date-object": { ++ "version": "1.0.5", ++ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", ++ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", ++ "dependencies": { ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-docker": { ++ "version": "2.2.1", ++ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", ++ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", ++ "dev": true, ++ "bin": { ++ "is-docker": "cli.js" ++ }, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/is-extglob": { ++ "version": "2.1.1", ++ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", ++ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/is-finalizationregistry": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", ++ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.2" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-fullwidth-code-point": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", ++ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/is-generator-function": { ++ "version": "1.0.10", ++ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", ++ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", ++ "dev": true, ++ "dependencies": { ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-glob": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", ++ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", ++ "dev": true, ++ "dependencies": { ++ "is-extglob": "^2.1.1" ++ }, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/is-map": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", ++ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-negative-zero": { ++ "version": "2.0.3", ++ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", ++ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", ++ "dev": true, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-number": { ++ "version": "7.0.0", ++ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", ++ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.12.0" ++ } ++ }, ++ "node_modules/is-number-object": { ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", ++ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", ++ "dependencies": { ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-path-inside": { ++ "version": "3.0.3", ++ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", ++ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/is-plain-object": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", ++ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/is-regex": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", ++ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-set": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", ++ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-shared-array-buffer": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", ++ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", ++ "dependencies": { ++ "call-bind": "^1.0.7" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-string": { ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", ++ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", ++ "dependencies": { ++ "has-tostringtag": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-symbol": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", ++ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", ++ "dependencies": { ++ "has-symbols": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-typed-array": { ++ "version": "1.1.13", ++ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", ++ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", ++ "dev": true, ++ "dependencies": { ++ "which-typed-array": "^1.1.14" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-unicode-supported": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", ++ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=12" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/is-weakmap": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", ++ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-weakref": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", ++ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.2" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-weakset": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", ++ "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "get-intrinsic": "^1.1.1" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/is-wsl": { ++ "version": "2.2.0", ++ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", ++ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", ++ "dev": true, ++ "dependencies": { ++ "is-docker": "^2.0.0" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/isarray": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", ++ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" ++ }, ++ "node_modules/isexe": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", ++ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" ++ }, ++ "node_modules/iterator.prototype": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", ++ "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", ++ "dev": true, ++ "dependencies": { ++ "define-properties": "^1.2.1", ++ "get-intrinsic": "^1.2.1", ++ "has-symbols": "^1.0.3", ++ "reflect.getprototypeof": "^1.0.4", ++ "set-function-name": "^2.0.1" ++ } ++ }, ++ "node_modules/jackspeak": { ++ "version": "4.0.1", ++ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", ++ "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", ++ "dependencies": { ++ "@isaacs/cliui": "^8.0.2" ++ }, ++ "engines": { ++ "node": "20 || >=22" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" ++ }, ++ "optionalDependencies": { ++ "@pkgjs/parseargs": "^0.11.0" ++ } ++ }, ++ "node_modules/jed": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", ++ "integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA==", ++ "dev": true ++ }, ++ "node_modules/jest-worker": { ++ "version": "27.5.1", ++ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", ++ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "@types/node": "*", ++ "merge-stream": "^2.0.0", ++ "supports-color": "^8.0.0" ++ }, ++ "engines": { ++ "node": ">= 10.13.0" ++ } ++ }, ++ "node_modules/jest-worker/node_modules/has-flag": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "dev": true, ++ "peer": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/jest-worker/node_modules/supports-color": { ++ "version": "8.1.1", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", ++ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "has-flag": "^4.0.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/supports-color?sponsor=1" ++ } ++ }, ++ "node_modules/js-tokens": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", ++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" ++ }, ++ "node_modules/js-yaml": { ++ "version": "4.1.0", ++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", ++ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", ++ "dev": true, ++ "dependencies": { ++ "argparse": "^2.0.1" ++ }, ++ "bin": { ++ "js-yaml": "bin/js-yaml.js" ++ } ++ }, ++ "node_modules/jsesc": { ++ "version": "2.5.2", ++ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", ++ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", ++ "dev": true, ++ "peer": true, ++ "bin": { ++ "jsesc": "bin/jsesc" ++ }, ++ "engines": { ++ "node": ">=4" ++ } ++ }, ++ "node_modules/json-buffer": { ++ "version": "3.0.1", ++ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", ++ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", ++ "dev": true ++ }, ++ "node_modules/json-parse-even-better-errors": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", ++ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", ++ "dev": true ++ }, ++ "node_modules/json-schema-traverse": { ++ "version": "0.4.1", ++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", ++ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", ++ "dev": true ++ }, ++ "node_modules/json-stable-stringify-without-jsonify": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", ++ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", ++ "dev": true ++ }, ++ "node_modules/json5": { ++ "version": "2.2.3", ++ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", ++ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", ++ "dev": true, ++ "peer": true, ++ "bin": { ++ "json5": "lib/cli.js" ++ }, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/jsonfile": { ++ "version": "6.1.0", ++ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", ++ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", ++ "dev": true, ++ "dependencies": { ++ "universalify": "^2.0.0" ++ }, ++ "optionalDependencies": { ++ "graceful-fs": "^4.1.6" ++ } ++ }, ++ "node_modules/jsx-ast-utils": { ++ "version": "3.3.5", ++ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", ++ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", ++ "dev": true, ++ "dependencies": { ++ "array-includes": "^3.1.6", ++ "array.prototype.flat": "^1.3.1", ++ "object.assign": "^4.1.4", ++ "object.values": "^1.1.6" ++ }, ++ "engines": { ++ "node": ">=4.0" ++ } ++ }, ++ "node_modules/keyv": { ++ "version": "4.5.4", ++ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", ++ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", ++ "dev": true, ++ "dependencies": { ++ "json-buffer": "3.0.1" ++ } ++ }, ++ "node_modules/kind-of": { ++ "version": "6.0.3", ++ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", ++ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/klaw-sync": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", ++ "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", ++ "dev": true, ++ "dependencies": { ++ "graceful-fs": "^4.1.11" ++ } ++ }, ++ "node_modules/known-css-properties": { ++ "version": "0.34.0", ++ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", ++ "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", ++ "dev": true ++ }, ++ "node_modules/levn": { ++ "version": "0.4.1", ++ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", ++ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", ++ "dev": true, ++ "dependencies": { ++ "prelude-ls": "^1.2.1", ++ "type-check": "~0.4.0" ++ }, ++ "engines": { ++ "node": ">= 0.8.0" ++ } ++ }, ++ "node_modules/lines-and-columns": { ++ "version": "1.2.4", ++ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", ++ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", ++ "dev": true ++ }, ++ "node_modules/loader-runner": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", ++ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", ++ "dev": true, ++ "peer": true, ++ "engines": { ++ "node": ">=6.11.5" ++ } ++ }, ++ "node_modules/locate-path": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", ++ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", ++ "dev": true, ++ "dependencies": { ++ "p-locate": "^5.0.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/lodash.merge": { ++ "version": "4.6.2", ++ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", ++ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", ++ "dev": true ++ }, ++ "node_modules/lodash.truncate": { ++ "version": "4.4.2", ++ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", ++ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", ++ "dev": true ++ }, ++ "node_modules/log-symbols": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", ++ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", ++ "dev": true, ++ "dependencies": { ++ "chalk": "^5.3.0", ++ "is-unicode-supported": "^1.3.0" ++ }, ++ "engines": { ++ "node": ">=18" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/log-symbols/node_modules/chalk": { ++ "version": "5.3.0", ++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", ++ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", ++ "dev": true, ++ "engines": { ++ "node": "^12.17.0 || ^14.13 || >=16.0.0" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/chalk?sponsor=1" ++ } ++ }, ++ "node_modules/loose-envify": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", ++ "dependencies": { ++ "js-tokens": "^3.0.0 || ^4.0.0" ++ }, ++ "bin": { ++ "loose-envify": "cli.js" ++ } ++ }, ++ "node_modules/lru-cache": { ++ "version": "5.1.1", ++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", ++ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "yallist": "^3.0.2" ++ } ++ }, ++ "node_modules/magic-string": { ++ "version": "0.25.9", ++ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", ++ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", ++ "dev": true, ++ "dependencies": { ++ "sourcemap-codec": "^1.4.8" ++ } ++ }, ++ "node_modules/mathml-tag-names": { ++ "version": "2.1.3", ++ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", ++ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", ++ "dev": true, ++ "funding": { ++ "type": "github", ++ "url": "https://github.com/sponsors/wooorm" ++ } ++ }, ++ "node_modules/mdn-data": { ++ "version": "2.0.30", ++ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", ++ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", ++ "dev": true ++ }, ++ "node_modules/meow": { ++ "version": "13.2.0", ++ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", ++ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", ++ "dev": true, ++ "engines": { ++ "node": ">=18" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/merge-stream": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", ++ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", ++ "dev": true, ++ "peer": true ++ }, ++ "node_modules/merge2": { ++ "version": "1.4.1", ++ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", ++ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", ++ "dev": true, ++ "engines": { ++ "node": ">= 8" ++ } ++ }, ++ "node_modules/micromatch": { ++ "version": "4.0.7", ++ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", ++ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", ++ "dev": true, ++ "dependencies": { ++ "braces": "^3.0.3", ++ "picomatch": "^2.3.1" ++ }, ++ "engines": { ++ "node": ">=8.6" ++ } ++ }, ++ "node_modules/mime-db": { ++ "version": "1.52.0", ++ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", ++ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", ++ "dev": true, ++ "peer": true, ++ "engines": { ++ "node": ">= 0.6" ++ } ++ }, ++ "node_modules/mime-types": { ++ "version": "2.1.35", ++ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", ++ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "mime-db": "1.52.0" ++ }, ++ "engines": { ++ "node": ">= 0.6" ++ } ++ }, ++ "node_modules/minimatch": { ++ "version": "9.0.5", ++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", ++ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", ++ "dev": true, ++ "dependencies": { ++ "brace-expansion": "^2.0.1" ++ }, ++ "engines": { ++ "node": ">=16 || 14 >=14.17" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" ++ } ++ }, ++ "node_modules/minimist": { ++ "version": "1.2.8", ++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", ++ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", ++ "dev": true, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/minipass": { ++ "version": "7.1.2", ++ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", ++ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", ++ "engines": { ++ "node": ">=16 || 14 >=14.17" ++ } ++ }, ++ "node_modules/ms": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", ++ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", ++ "dev": true ++ }, ++ "node_modules/nanoid": { ++ "version": "3.3.7", ++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", ++ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", ++ "dev": true, ++ "funding": [ ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/ai" ++ } ++ ], ++ "bin": { ++ "nanoid": "bin/nanoid.cjs" ++ }, ++ "engines": { ++ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" ++ } ++ }, ++ "node_modules/natural-compare": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", ++ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", ++ "dev": true ++ }, ++ "node_modules/neo-async": { ++ "version": "2.6.2", ++ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", ++ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", ++ "dev": true, ++ "peer": true ++ }, ++ "node_modules/node-releases": { ++ "version": "2.0.13", ++ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", ++ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", ++ "dev": true, ++ "peer": true ++ }, ++ "node_modules/node-watch": { ++ "version": "0.7.3", ++ "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", ++ "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/normalize-path": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", ++ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/object-assign": { ++ "version": "4.1.1", ++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", ++ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/object-inspect": { ++ "version": "1.13.2", ++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", ++ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/object-is": { ++ "version": "1.1.5", ++ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", ++ "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", ++ "peer": true, ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "define-properties": "^1.1.3" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/object-keys": { ++ "version": "1.1.1", ++ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", ++ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/object.assign": { ++ "version": "4.1.5", ++ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", ++ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", ++ "dependencies": { ++ "call-bind": "^1.0.5", ++ "define-properties": "^1.2.1", ++ "has-symbols": "^1.0.3", ++ "object-keys": "^1.1.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/object.entries": { ++ "version": "1.1.8", ++ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", ++ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-object-atoms": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/object.fromentries": { ++ "version": "2.0.8", ++ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", ++ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2", ++ "es-object-atoms": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/object.groupby": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", ++ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/object.values": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", ++ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-object-atoms": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/once": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", ++ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", ++ "dev": true, ++ "dependencies": { ++ "wrappy": "1" ++ } ++ }, ++ "node_modules/open": { ++ "version": "7.4.2", ++ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", ++ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", ++ "dev": true, ++ "dependencies": { ++ "is-docker": "^2.0.0", ++ "is-wsl": "^2.1.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/optionator": { ++ "version": "0.9.4", ++ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", ++ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", ++ "dev": true, ++ "dependencies": { ++ "deep-is": "^0.1.3", ++ "fast-levenshtein": "^2.0.6", ++ "levn": "^0.4.1", ++ "prelude-ls": "^1.2.1", ++ "type-check": "^0.4.0", ++ "word-wrap": "^1.2.5" ++ }, ++ "engines": { ++ "node": ">= 0.8.0" ++ } ++ }, ++ "node_modules/os-tmpdir": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", ++ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/p-limit": { ++ "version": "3.1.0", ++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", ++ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", ++ "dev": true, ++ "dependencies": { ++ "yocto-queue": "^0.1.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/p-locate": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", ++ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", ++ "dev": true, ++ "dependencies": { ++ "p-limit": "^3.0.2" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/package-json-from-dist": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", ++ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" ++ }, ++ "node_modules/parent-module": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", ++ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", ++ "dev": true, ++ "dependencies": { ++ "callsites": "^3.0.0" ++ }, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/parse-json": { ++ "version": "5.2.0", ++ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", ++ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", ++ "dev": true, ++ "dependencies": { ++ "@babel/code-frame": "^7.0.0", ++ "error-ex": "^1.3.1", ++ "json-parse-even-better-errors": "^2.3.0", ++ "lines-and-columns": "^1.1.6" ++ }, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/patch-package": { ++ "version": "7.0.2", ++ "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", ++ "integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", ++ "dev": true, ++ "dependencies": { ++ "@yarnpkg/lockfile": "^1.1.0", ++ "chalk": "^4.1.2", ++ "ci-info": "^3.7.0", ++ "cross-spawn": "^7.0.3", ++ "find-yarn-workspace-root": "^2.0.0", ++ "fs-extra": "^9.0.0", ++ "klaw-sync": "^6.0.0", ++ "minimist": "^1.2.6", ++ "open": "^7.4.2", ++ "rimraf": "^2.6.3", ++ "semver": "^7.5.3", ++ "slash": "^2.0.0", ++ "tmp": "^0.0.33", ++ "yaml": "^2.2.2" ++ }, ++ "bin": { ++ "patch-package": "index.js" ++ }, ++ "engines": { ++ "node": ">=14", ++ "npm": ">5" ++ } ++ }, ++ "node_modules/patch-package/node_modules/ansi-styles": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", ++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", ++ "dev": true, ++ "dependencies": { ++ "color-convert": "^2.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/ansi-styles?sponsor=1" ++ } ++ }, ++ "node_modules/patch-package/node_modules/chalk": { ++ "version": "4.1.2", ++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", ++ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", ++ "dev": true, ++ "dependencies": { ++ "ansi-styles": "^4.1.0", ++ "supports-color": "^7.1.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/chalk?sponsor=1" ++ } ++ }, ++ "node_modules/patch-package/node_modules/color-convert": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ++ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", ++ "dev": true, ++ "dependencies": { ++ "color-name": "~1.1.4" ++ }, ++ "engines": { ++ "node": ">=7.0.0" ++ } ++ }, ++ "node_modules/patch-package/node_modules/color-name": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", ++ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", ++ "dev": true ++ }, ++ "node_modules/patch-package/node_modules/fs-extra": { ++ "version": "9.1.0", ++ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", ++ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", ++ "dev": true, ++ "dependencies": { ++ "at-least-node": "^1.0.0", ++ "graceful-fs": "^4.2.0", ++ "jsonfile": "^6.0.1", ++ "universalify": "^2.0.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/patch-package/node_modules/has-flag": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/patch-package/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, ++ "dependencies": { ++ "yallist": "^4.0.0" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/patch-package/node_modules/semver": { ++ "version": "7.5.4", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", ++ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", ++ "dev": true, ++ "dependencies": { ++ "lru-cache": "^6.0.0" ++ }, ++ "bin": { ++ "semver": "bin/semver.js" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/patch-package/node_modules/slash": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", ++ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/patch-package/node_modules/supports-color": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", ++ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", ++ "dev": true, ++ "dependencies": { ++ "has-flag": "^4.0.0" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/patch-package/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 ++ }, ++ "node_modules/path-exists": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", ++ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/path-is-absolute": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", ++ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/path-key": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", ++ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/path-parse": { ++ "version": "1.0.7", ++ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", ++ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", ++ "dev": true ++ }, ++ "node_modules/path-scurry": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", ++ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", ++ "dependencies": { ++ "lru-cache": "^11.0.0", ++ "minipass": "^7.1.2" ++ }, ++ "engines": { ++ "node": "20 || >=22" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" ++ } ++ }, ++ "node_modules/path-scurry/node_modules/lru-cache": { ++ "version": "11.0.0", ++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", ++ "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", ++ "engines": { ++ "node": "20 || >=22" ++ } ++ }, ++ "node_modules/path-type": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", ++ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/picocolors": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", ++ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", ++ "dev": true ++ }, ++ "node_modules/picomatch": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", ++ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", ++ "dev": true, ++ "engines": { ++ "node": ">=8.6" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/jonschlinkert" ++ } ++ }, ++ "node_modules/plur": { ++ "version": "5.1.0", ++ "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", ++ "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", ++ "dev": true, ++ "dependencies": { ++ "irregular-plurals": "^3.3.0" ++ }, ++ "engines": { ++ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/possible-typed-array-names": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", ++ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/postcss": { ++ "version": "8.4.39", ++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", ++ "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", ++ "dev": true, ++ "funding": [ ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/postcss/" ++ }, ++ { ++ "type": "tidelift", ++ "url": "https://tidelift.com/funding/github/npm/postcss" ++ }, ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/ai" ++ } ++ ], ++ "dependencies": { ++ "nanoid": "^3.3.7", ++ "picocolors": "^1.0.1", ++ "source-map-js": "^1.2.0" ++ }, ++ "engines": { ++ "node": "^10 || ^12 || >=14" ++ } ++ }, ++ "node_modules/postcss-media-query-parser": { ++ "version": "0.2.3", ++ "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", ++ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", ++ "dev": true ++ }, ++ "node_modules/postcss-resolve-nested-selector": { ++ "version": "0.1.1", ++ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", ++ "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", ++ "dev": true ++ }, ++ "node_modules/postcss-safe-parser": { ++ "version": "7.0.0", ++ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", ++ "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", ++ "dev": true, ++ "funding": [ ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/postcss/" ++ }, ++ { ++ "type": "tidelift", ++ "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" ++ }, ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/ai" ++ } ++ ], ++ "engines": { ++ "node": ">=18.0" ++ }, ++ "peerDependencies": { ++ "postcss": "^8.4.31" ++ } ++ }, ++ "node_modules/postcss-scss": { ++ "version": "4.0.9", ++ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", ++ "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", ++ "dev": true, ++ "funding": [ ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/postcss/" ++ }, ++ { ++ "type": "tidelift", ++ "url": "https://tidelift.com/funding/github/npm/postcss-scss" ++ }, ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/ai" ++ } ++ ], ++ "engines": { ++ "node": ">=12.0" ++ }, ++ "peerDependencies": { ++ "postcss": "^8.4.29" ++ } ++ }, ++ "node_modules/postcss-selector-parser": { ++ "version": "6.1.1", ++ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", ++ "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", ++ "dev": true, ++ "dependencies": { ++ "cssesc": "^3.0.0", ++ "util-deprecate": "^1.0.2" ++ }, ++ "engines": { ++ "node": ">=4" ++ } ++ }, ++ "node_modules/postcss-value-parser": { ++ "version": "4.2.0", ++ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", ++ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", ++ "dev": true ++ }, ++ "node_modules/prelude-ls": { ++ "version": "1.2.1", ++ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", ++ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", ++ "dev": true, ++ "engines": { ++ "node": ">= 0.8.0" ++ } ++ }, ++ "node_modules/process": { ++ "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", ++ "dev": true, ++ "engines": { ++ "node": ">= 0.6.0" ++ } ++ }, ++ "node_modules/prop-types": { ++ "version": "15.8.1", ++ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", ++ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", ++ "dependencies": { ++ "loose-envify": "^1.4.0", ++ "object-assign": "^4.1.1", ++ "react-is": "^16.13.1" ++ } ++ }, ++ "node_modules/punycode": { ++ "version": "2.3.0", ++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", ++ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", ++ "dev": true, ++ "engines": { ++ "node": ">=6" ++ } ++ }, ++ "node_modules/queue-microtask": { ++ "version": "1.2.3", ++ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", ++ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", ++ "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" ++ } ++ ] ++ }, ++ "node_modules/qunit": { ++ "version": "2.21.1", ++ "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.21.1.tgz", ++ "integrity": "sha512-SMA8IBZamI9MyVB4dShGpn6+X6plO8mIyfZTQ815XBvv/nVMeUj+yxsw8SgZVnrMlrAvTziJkmjOhaDwkNMHWQ==", ++ "dev": true, ++ "dependencies": { ++ "commander": "7.2.0", ++ "node-watch": "0.7.3", ++ "tiny-glob": "0.2.9" ++ }, ++ "bin": { ++ "qunit": "bin/qunit.js" ++ }, ++ "engines": { ++ "node": ">=10" ++ } ++ }, ++ "node_modules/qunit/node_modules/commander": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", ++ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", ++ "dev": true, ++ "engines": { ++ "node": ">= 10" ++ } ++ }, ++ "node_modules/randombytes": { ++ "version": "2.1.0", ++ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", ++ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "safe-buffer": "^5.1.0" ++ } ++ }, ++ "node_modules/react": { ++ "version": "18.3.1", ++ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", ++ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", ++ "dependencies": { ++ "loose-envify": "^1.1.0" ++ }, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/react-dom": { ++ "version": "18.3.1", ++ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", ++ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", ++ "dependencies": { ++ "loose-envify": "^1.1.0", ++ "scheduler": "^0.23.2" ++ }, ++ "peerDependencies": { ++ "react": "^18.3.1" ++ } ++ }, ++ "node_modules/react-dropzone": { ++ "version": "14.2.3", ++ "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", ++ "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", ++ "dependencies": { ++ "attr-accept": "^2.2.2", ++ "file-selector": "^0.6.0", ++ "prop-types": "^15.8.1" ++ }, ++ "engines": { ++ "node": ">= 10.13" ++ }, ++ "peerDependencies": { ++ "react": ">= 16.8 || 18.0.0" ++ } ++ }, ++ "node_modules/react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ }, ++ "node_modules/react-xml-parser": { ++ "version": "1.1.8", ++ "resolved": "https://registry.npmjs.org/react-xml-parser/-/react-xml-parser-1.1.8.tgz", ++ "integrity": "sha512-yX9k9LNCRzzNnFWoyo9cWEjtor6n6VD0Uh7z1ww5rIP6h5vdhJKEmowsm9RumEJMRdr7akcT4mMBScpsz573qQ==" ++ }, ++ "node_modules/readable-stream": { ++ "version": "4.5.2", ++ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", ++ "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", ++ "dev": true, ++ "dependencies": { ++ "abort-controller": "^3.0.0", ++ "buffer": "^6.0.3", ++ "events": "^3.3.0", ++ "process": "^0.11.10", ++ "string_decoder": "^1.3.0" ++ }, ++ "engines": { ++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ } ++ }, ++ "node_modules/readdirp": { ++ "version": "3.6.0", ++ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", ++ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", ++ "dev": true, ++ "dependencies": { ++ "picomatch": "^2.2.1" ++ }, ++ "engines": { ++ "node": ">=8.10.0" ++ } ++ }, ++ "node_modules/reflect.getprototypeof": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", ++ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.1", ++ "es-errors": "^1.3.0", ++ "get-intrinsic": "^1.2.4", ++ "globalthis": "^1.0.3", ++ "which-builtin-type": "^1.1.3" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/regenerator-runtime": { ++ "version": "0.13.11", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", ++ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", ++ "peer": true ++ }, ++ "node_modules/regexp.prototype.flags": { ++ "version": "1.5.2", ++ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", ++ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", ++ "dependencies": { ++ "call-bind": "^1.0.6", ++ "define-properties": "^1.2.1", ++ "es-errors": "^1.3.0", ++ "set-function-name": "^2.0.1" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/regexpp": { ++ "version": "3.2.0", ++ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", ++ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/mysticatea" ++ } ++ }, ++ "node_modules/require-from-string": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ++ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/resolve": { ++ "version": "1.22.8", ++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", ++ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", ++ "dev": true, ++ "dependencies": { ++ "is-core-module": "^2.13.0", ++ "path-parse": "^1.0.7", ++ "supports-preserve-symlinks-flag": "^1.0.0" ++ }, ++ "bin": { ++ "resolve": "bin/resolve" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/resolve-from": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", ++ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", ++ "dev": true, ++ "engines": { ++ "node": ">=4" ++ } ++ }, ++ "node_modules/resolve-pkg-maps": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", ++ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", ++ "dev": true, ++ "peer": true, ++ "funding": { ++ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" ++ } ++ }, ++ "node_modules/reusify": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", ++ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", ++ "dev": true, ++ "engines": { ++ "iojs": ">=1.0.0", ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/rimraf": { ++ "version": "2.7.1", ++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", ++ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", ++ "dev": true, ++ "dependencies": { ++ "glob": "^7.1.3" ++ }, ++ "bin": { ++ "rimraf": "bin.js" ++ } ++ }, ++ "node_modules/rimraf/node_modules/brace-expansion": { ++ "version": "1.1.11", ++ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", ++ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", ++ "dev": true, ++ "dependencies": { ++ "balanced-match": "^1.0.0", ++ "concat-map": "0.0.1" ++ } ++ }, ++ "node_modules/rimraf/node_modules/glob": { ++ "version": "7.2.3", ++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", ++ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", ++ "dev": 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/rimraf/node_modules/minimatch": { ++ "version": "3.1.2", ++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", ++ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", ++ "dev": true, ++ "dependencies": { ++ "brace-expansion": "^1.1.7" ++ }, ++ "engines": { ++ "node": "*" ++ } ++ }, ++ "node_modules/run-parallel": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", ++ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", ++ "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" ++ } ++ ], ++ "dependencies": { ++ "queue-microtask": "^1.2.2" ++ } ++ }, ++ "node_modules/rxjs": { ++ "version": "7.8.1", ++ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", ++ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "tslib": "^2.1.0" ++ } ++ }, ++ "node_modules/safe-array-concat": { ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", ++ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "get-intrinsic": "^1.2.4", ++ "has-symbols": "^1.0.3", ++ "isarray": "^2.0.5" ++ }, ++ "engines": { ++ "node": ">=0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/safe-buffer": { ++ "version": "5.2.1", ++ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", ++ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", ++ "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" ++ } ++ ] ++ }, ++ "node_modules/safe-identifier": { ++ "version": "0.4.2", ++ "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", ++ "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", ++ "dev": true ++ }, ++ "node_modules/safe-regex-test": { ++ "version": "1.0.3", ++ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", ++ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.6", ++ "es-errors": "^1.3.0", ++ "is-regex": "^1.1.4" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/safer-buffer": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", ++ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", ++ "dev": true ++ }, ++ "node_modules/sass": { ++ "version": "1.77.8", ++ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", ++ "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", ++ "dev": true, ++ "dependencies": { ++ "chokidar": ">=3.0.0 <4.0.0", ++ "immutable": "^4.0.0", ++ "source-map-js": ">=0.6.2 <2.0.0" ++ }, ++ "bin": { ++ "sass": "sass.js" ++ }, ++ "engines": { ++ "node": ">=14.0.0" ++ } ++ }, ++ "node_modules/sass-embedded": { ++ "version": "1.77.8", ++ "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.77.8.tgz", ++ "integrity": "sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA==", ++ "dev": true, ++ "peer": true, ++ "dependencies": { ++ "@bufbuild/protobuf": "^1.0.0", ++ "buffer-builder": "^0.2.0", ++ "immutable": "^4.0.0", ++ "rxjs": "^7.4.0", ++ "supports-color": "^8.1.1", ++ "varint": "^6.0.0" ++ }, ++ "engines": { ++ "node": ">=16.0.0" ++ }, ++ "optionalDependencies": { ++ "sass-embedded-android-arm": "1.77.8", ++ "sass-embedded-android-arm64": "1.77.8", ++ "sass-embedded-android-ia32": "1.77.8", ++ "sass-embedded-android-x64": "1.77.8", ++ "sass-embedded-darwin-arm64": "1.77.8", ++ "sass-embedded-darwin-x64": "1.77.8", ++ "sass-embedded-linux-arm": "1.77.8", ++ "sass-embedded-linux-arm64": "1.77.8", ++ "sass-embedded-linux-ia32": "1.77.8", ++ "sass-embedded-linux-musl-arm": "1.77.8", ++ "sass-embedded-linux-musl-arm64": "1.77.8", ++ "sass-embedded-linux-musl-ia32": "1.77.8", ++ "sass-embedded-linux-musl-x64": "1.77.8", ++ "sass-embedded-linux-x64": "1.77.8", ++ "sass-embedded-win32-arm64": "1.77.8", ++ "sass-embedded-win32-ia32": "1.77.8", ++ "sass-embedded-win32-x64": "1.77.8" ++ } ++ }, ++ "node_modules/sass-embedded-linux-musl-x64": { ++ "version": "1.77.8", ++ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.8.tgz", ++ "integrity": "sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "peer": true, ++ "engines": { ++ "node": ">=14.0.0" ++ } ++ }, ++ "node_modules/sass-embedded-linux-x64": { ++ "version": "1.77.8", ++ "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.8.tgz", ++ "integrity": "sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ==", ++ "cpu": [ ++ "x64" ++ ], ++ "dev": true, ++ "optional": true, ++ "os": [ ++ "linux" ++ ], ++ "peer": true, + "bin": { +- "patch-package": "index.js" ++ "sass": "dart-sass/sass" + }, + "engines": { +- "node": ">=14", +- "npm": ">5" ++ "node": ">=14.0.0" + } + }, +- "node_modules/patch-package/node_modules/ansi-styles": { +- "version": "4.3.0", +- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", +- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", ++ "node_modules/sass-embedded/node_modules/has-flag": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, +- "dependencies": { +- "color-convert": "^2.0.1" +- }, ++ "peer": true, + "engines": { + "node": ">=8" +- }, +- "funding": { +- "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, +- "node_modules/patch-package/node_modules/chalk": { +- "version": "4.1.2", +- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", +- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", ++ "node_modules/sass-embedded/node_modules/supports-color": { ++ "version": "8.1.1", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", ++ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, ++ "peer": true, + "dependencies": { +- "ansi-styles": "^4.1.0", +- "supports-color": "^7.1.0" ++ "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { +- "url": "https://github.com/chalk/chalk?sponsor=1" ++ "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, +- "node_modules/patch-package/node_modules/color-convert": { +- "version": "2.0.1", +- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", +- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", +- "dev": true, ++ "node_modules/scheduler": { ++ "version": "0.23.2", ++ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", ++ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { +- "color-name": "~1.1.4" +- }, +- "engines": { +- "node": ">=7.0.0" ++ "loose-envify": "^1.1.0" + } + }, +- "node_modules/patch-package/node_modules/color-name": { +- "version": "1.1.4", +- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", +- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", +- "dev": true +- }, +- "node_modules/patch-package/node_modules/fs-extra": { +- "version": "9.1.0", +- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", +- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", ++ "node_modules/schema-utils": { ++ "version": "3.3.0", ++ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", ++ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, ++ "peer": true, + "dependencies": { +- "at-least-node": "^1.0.0", +- "graceful-fs": "^4.2.0", +- "jsonfile": "^6.0.1", +- "universalify": "^2.0.0" ++ "@types/json-schema": "^7.0.8", ++ "ajv": "^6.12.5", ++ "ajv-keywords": "^3.5.2" + }, + "engines": { +- "node": ">=10" ++ "node": ">= 10.13.0" ++ }, ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/webpack" + } + }, +- "node_modules/patch-package/node_modules/has-flag": { +- "version": "4.0.0", +- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", +- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "node_modules/semver": { ++ "version": "6.3.1", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", ++ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, +- "engines": { +- "node": ">=8" ++ "bin": { ++ "semver": "bin/semver.js" + } + }, +- "node_modules/patch-package/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==", ++ "node_modules/serialize-javascript": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", ++ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, ++ "peer": true, + "dependencies": { +- "yallist": "^4.0.0" +- }, +- "engines": { +- "node": ">=10" ++ "randombytes": "^2.1.0" + } + }, +- "node_modules/patch-package/node_modules/semver": { +- "version": "7.5.4", +- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", +- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", +- "dev": 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", ++ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { +- "lru-cache": "^6.0.0" +- }, +- "bin": { +- "semver": "bin/semver.js" ++ "define-data-property": "^1.1.4", ++ "es-errors": "^1.3.0", ++ "function-bind": "^1.1.2", ++ "get-intrinsic": "^1.2.4", ++ "gopd": "^1.0.1", ++ "has-property-descriptors": "^1.0.2" + }, + "engines": { +- "node": ">=10" ++ "node": ">= 0.4" + } + }, +- "node_modules/patch-package/node_modules/slash": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", +- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", +- "dev": true, ++ "node_modules/set-function-name": { ++ "version": "2.0.2", ++ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", ++ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", ++ "dependencies": { ++ "define-data-property": "^1.1.4", ++ "es-errors": "^1.3.0", ++ "functions-have-names": "^1.2.3", ++ "has-property-descriptors": "^1.0.2" ++ }, + "engines": { +- "node": ">=6" ++ "node": ">= 0.4" + } + }, +- "node_modules/patch-package/node_modules/supports-color": { +- "version": "7.2.0", +- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", +- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", +- "dev": true, ++ "node_modules/shebang-command": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", ++ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { +- "has-flag": "^4.0.0" ++ "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, +- "node_modules/patch-package/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 +- }, +- "node_modules/path-is-absolute": { +- "version": "1.0.1", +- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", +- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", +- "dev": true, +- "engines": { +- "node": ">=0.10.0" +- } +- }, +- "node_modules/path-key": { +- "version": "3.1.1", +- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", +- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", ++ "node_modules/shebang-regex": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", ++ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, +- "node_modules/path-parse": { +- "version": "1.0.7", +- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", +- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", +- "dev": true +- }, +- "node_modules/path-scurry": { +- "version": "1.10.1", +- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", +- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", ++ "node_modules/side-channel": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", ++ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { +- "lru-cache": "^9.1.1 || ^10.0.0", +- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" ++ "call-bind": "^1.0.7", ++ "es-errors": "^1.3.0", ++ "get-intrinsic": "^1.2.4", ++ "object-inspect": "^1.13.1" + }, + "engines": { +- "node": ">=16 || 14 >=14.17" ++ "node": ">= 0.4" + }, + "funding": { +- "url": "https://github.com/sponsors/isaacs" ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/path-scurry/node_modules/lru-cache": { +- "version": "10.0.0", +- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", +- "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", ++ "node_modules/signal-exit": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", ++ "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "engines": { +- "node": "14 || >=16.14" ++ "node": ">=14" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/isaacs" + } + }, +- "node_modules/path-type": { +- "version": "4.0.0", +- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", +- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", ++ "node_modules/sizzle": { ++ "version": "2.3.10", ++ "resolved": "https://registry.npmjs.org/sizzle/-/sizzle-2.3.10.tgz", ++ "integrity": "sha512-kPGev+SiByuzi/YPDTqCwdKLWCaN9+14ve86yH0gP6Efue04xjLYWJrcLC6y1buFyIVXkwHNXPsOTEd1MYVPbQ==", ++ "dev": true ++ }, ++ "node_modules/slash": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", ++ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, +- "node_modules/picocolors": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", +- "dev": true, +- "peer": true +- }, +- "node_modules/picomatch": { +- "version": "2.3.1", +- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", +- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", ++ "node_modules/slice-ansi": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", ++ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, ++ "dependencies": { ++ "ansi-styles": "^4.0.0", ++ "astral-regex": "^2.0.0", ++ "is-fullwidth-code-point": "^3.0.0" ++ }, + "engines": { +- "node": ">=8.6" ++ "node": ">=10" + }, + "funding": { +- "url": "https://github.com/sponsors/jonschlinkert" ++ "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, +- "node_modules/process": { +- "version": "0.11.10", +- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", +- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", ++ "node_modules/slice-ansi/node_modules/ansi-styles": { ++ "version": "4.3.0", ++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", ++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, +- "engines": { +- "node": ">= 0.6.0" +- } +- }, +- "node_modules/prop-types": { +- "version": "15.8.1", +- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", +- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { +- "loose-envify": "^1.4.0", +- "object-assign": "^4.1.1", +- "react-is": "^16.13.1" +- } +- }, +- "node_modules/punycode": { +- "version": "2.3.0", +- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", +- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", +- "dev": true, +- "peer": true, +- "engines": { +- "node": ">=6" +- } +- }, +- "node_modules/queue-microtask": { +- "version": "1.2.3", +- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", +- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", +- "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" +- } +- ] ++ "color-convert": "^2.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ }, ++ "funding": { ++ "url": "https://github.com/chalk/ansi-styles?sponsor=1" ++ } + }, +- "node_modules/qunit": { +- "version": "2.19.4", +- "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.19.4.tgz", +- "integrity": "sha512-aqUzzUeCqlleWYKlpgfdHHw9C6KxkB9H3wNfiBg5yHqQMzy0xw/pbCRHYFkjl8MsP/t8qkTQE+JTYL71azgiew==", ++ "node_modules/slice-ansi/node_modules/color-convert": { ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", ++ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { +- "commander": "7.2.0", +- "node-watch": "0.7.3", +- "tiny-glob": "0.2.9" +- }, +- "bin": { +- "qunit": "bin/qunit.js" ++ "color-name": "~1.1.4" + }, + "engines": { +- "node": ">=10" ++ "node": ">=7.0.0" + } + }, +- "node_modules/qunit/node_modules/commander": { +- "version": "7.2.0", +- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", +- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", ++ "node_modules/slice-ansi/node_modules/color-name": { ++ "version": "1.1.4", ++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", ++ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", ++ "dev": true ++ }, ++ "node_modules/source-map": { ++ "version": "0.6.1", ++ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", ++ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, ++ "peer": true, + "engines": { +- "node": ">= 10" ++ "node": ">=0.10.0" + } + }, +- "node_modules/randombytes": { +- "version": "2.1.0", +- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", +- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", ++ "node_modules/source-map-js": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", ++ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/source-map-support": { ++ "version": "0.5.21", ++ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", ++ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { +- "safe-buffer": "^5.1.0" ++ "buffer-from": "^1.0.0", ++ "source-map": "^0.6.0" + } + }, +- "node_modules/react": { +- "version": "18.2.0", +- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", +- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", ++ "node_modules/sourcemap-codec": { ++ "version": "1.4.8", ++ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", ++ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", ++ "deprecated": "Please use @jridgewell/sourcemap-codec instead", ++ "dev": true ++ }, ++ "node_modules/stop-iteration-iterator": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", ++ "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", ++ "peer": true, + "dependencies": { +- "loose-envify": "^1.1.0" ++ "internal-slot": "^1.0.4" + }, + "engines": { +- "node": ">=0.10.0" ++ "node": ">= 0.4" + } + }, +- "node_modules/react-dom": { +- "version": "18.2.0", +- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", +- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", ++ "node_modules/string_decoder": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", ++ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", ++ "dev": true, + "dependencies": { +- "loose-envify": "^1.1.0", +- "scheduler": "^0.23.0" +- }, +- "peerDependencies": { +- "react": "^18.2.0" ++ "safe-buffer": "~5.2.0" + } + }, +- "node_modules/react-dropzone": { +- "version": "14.2.3", +- "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", +- "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", ++ "node_modules/string-width": { ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", ++ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { +- "attr-accept": "^2.2.2", +- "file-selector": "^0.6.0", +- "prop-types": "^15.8.1" ++ "eastasianwidth": "^0.2.0", ++ "emoji-regex": "^9.2.2", ++ "strip-ansi": "^7.0.1" + }, + "engines": { +- "node": ">= 10.13" ++ "node": ">=12" + }, +- "peerDependencies": { +- "react": ">= 16.8 || 18.0.0" ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/react-is": { +- "version": "16.13.1", +- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", +- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" +- }, +- "node_modules/react-xml-parser": { +- "version": "1.1.8", +- "resolved": "https://registry.npmjs.org/react-xml-parser/-/react-xml-parser-1.1.8.tgz", +- "integrity": "sha512-yX9k9LNCRzzNnFWoyo9cWEjtor6n6VD0Uh7z1ww5rIP6h5vdhJKEmowsm9RumEJMRdr7akcT4mMBScpsz573qQ==" +- }, +- "node_modules/readable-stream": { +- "version": "4.5.2", +- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", +- "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", +- "dev": true, ++ "node_modules/string-width-cjs": { ++ "name": "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==", + "dependencies": { +- "abort-controller": "^3.0.0", +- "buffer": "^6.0.3", +- "events": "^3.3.0", +- "process": "^0.11.10", +- "string_decoder": "^1.3.0" ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" + }, + "engines": { +- "node": "^12.22.0 || ^14.17.0 || >=16.0.0" ++ "node": ">=8" + } + }, +- "node_modules/readdirp": { +- "version": "3.6.0", +- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", +- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", +- "dev": true, ++ "node_modules/string-width-cjs/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/string-width-cjs/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==" ++ }, ++ "node_modules/string-width-cjs/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==", + "dependencies": { +- "picomatch": "^2.2.1" ++ "ansi-regex": "^5.0.1" + }, + "engines": { +- "node": ">=8.10.0" ++ "node": ">=8" + } + }, +- "node_modules/regenerator-runtime": { +- "version": "0.13.11", +- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", +- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", +- "peer": true +- }, +- "node_modules/regexp.prototype.flags": { +- "version": "1.5.0", +- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", +- "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", +- "peer": true, ++ "node_modules/string.prototype.matchall": { ++ "version": "4.0.11", ++ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", ++ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", ++ "dev": true, + "dependencies": { +- "call-bind": "^1.0.2", +- "define-properties": "^1.2.0", +- "functions-have-names": "^1.2.3" ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.2", ++ "es-errors": "^1.3.0", ++ "es-object-atoms": "^1.0.0", ++ "get-intrinsic": "^1.2.4", ++ "gopd": "^1.0.1", ++ "has-symbols": "^1.0.3", ++ "internal-slot": "^1.0.7", ++ "regexp.prototype.flags": "^1.5.2", ++ "set-function-name": "^2.0.2", ++ "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" +@@ -3963,384 +6909,421 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/resolve": { +- "version": "1.22.2", +- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", +- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", ++ "node_modules/string.prototype.repeat": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", ++ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { +- "is-core-module": "^2.11.0", +- "path-parse": "^1.0.7", +- "supports-preserve-symlinks-flag": "^1.0.0" +- }, +- "bin": { +- "resolve": "bin/resolve" +- }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" ++ "define-properties": "^1.1.3", ++ "es-abstract": "^1.17.5" + } + }, +- "node_modules/reusify": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", +- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", ++ "node_modules/string.prototype.trim": { ++ "version": "1.2.9", ++ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", ++ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-abstract": "^1.23.0", ++ "es-object-atoms": "^1.0.0" ++ }, + "engines": { +- "iojs": ">=1.0.0", +- "node": ">=0.10.0" ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/rimraf": { +- "version": "2.7.1", +- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", +- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", ++ "node_modules/string.prototype.trimend": { ++ "version": "1.0.8", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", ++ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { +- "glob": "^7.1.3" ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-object-atoms": "^1.0.0" + }, +- "bin": { +- "rimraf": "bin.js" ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/rimraf/node_modules/brace-expansion": { +- "version": "1.1.11", +- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", +- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", ++ "node_modules/string.prototype.trimstart": { ++ "version": "1.0.8", ++ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", ++ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { +- "balanced-match": "^1.0.0", +- "concat-map": "0.0.1" ++ "call-bind": "^1.0.7", ++ "define-properties": "^1.2.1", ++ "es-object-atoms": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" + } + }, +- "node_modules/rimraf/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, ++ "node_modules/strip-ansi": { ++ "version": "7.1.0", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", ++ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "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" ++ "ansi-regex": "^6.0.1" + }, + "engines": { +- "node": "*" ++ "node": ">=12" + }, + "funding": { +- "url": "https://github.com/sponsors/isaacs" ++ "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, +- "node_modules/rimraf/node_modules/minimatch": { +- "version": "3.1.2", +- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", +- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", ++ "node_modules/strip-ansi-cjs": { ++ "name": "strip-ansi", ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", ++ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", ++ "dependencies": { ++ "ansi-regex": "^5.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/strip-bom": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", ++ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, +- "dependencies": { +- "brace-expansion": "^1.1.7" +- }, + "engines": { +- "node": "*" ++ "node": ">=4" + } + }, +- "node_modules/rome": { +- "version": "12.1.3", +- "resolved": "https://registry.npmjs.org/rome/-/rome-12.1.3.tgz", +- "integrity": "sha512-e+ff72hxDpe/t5/Us7YRBVw3PBET7SeczTQNn6tvrWdrCaAw3qOukQQ+tDCkyFtS4yGsnhjrJbm43ctNbz27Yg==", ++ "node_modules/strip-json-comments": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", ++ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, +- "hasInstallScript": true, +- "bin": { +- "rome": "bin/rome" +- }, + "engines": { +- "node": ">=14.*" ++ "node": ">=8" + }, +- "optionalDependencies": { +- "@rometools/cli-darwin-arm64": "12.1.3", +- "@rometools/cli-darwin-x64": "12.1.3", +- "@rometools/cli-linux-arm64": "12.1.3", +- "@rometools/cli-linux-x64": "12.1.3", +- "@rometools/cli-win32-arm64": "12.1.3", +- "@rometools/cli-win32-x64": "12.1.3" ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/run-parallel": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", +- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", ++ "node_modules/stylelint": { ++ "version": "16.7.0", ++ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", ++ "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", + "dev": true, + "funding": [ + { +- "type": "github", +- "url": "https://github.com/sponsors/feross" +- }, +- { +- "type": "patreon", +- "url": "https://www.patreon.com/feross" ++ "type": "opencollective", ++ "url": "https://opencollective.com/stylelint" + }, + { +- "type": "consulting", +- "url": "https://feross.org/support" ++ "type": "github", ++ "url": "https://github.com/sponsors/stylelint" + } + ], + "dependencies": { +- "queue-microtask": "^1.2.2" ++ "@csstools/css-parser-algorithms": "^2.7.1", ++ "@csstools/css-tokenizer": "^2.4.1", ++ "@csstools/media-query-list-parser": "^2.1.13", ++ "@csstools/selector-specificity": "^3.1.1", ++ "@dual-bundle/import-meta-resolve": "^4.1.0", ++ "balanced-match": "^2.0.0", ++ "colord": "^2.9.3", ++ "cosmiconfig": "^9.0.0", ++ "css-functions-list": "^3.2.2", ++ "css-tree": "^2.3.1", ++ "debug": "^4.3.5", ++ "fast-glob": "^3.3.2", ++ "fastest-levenshtein": "^1.0.16", ++ "file-entry-cache": "^9.0.0", ++ "global-modules": "^2.0.0", ++ "globby": "^11.1.0", ++ "globjoin": "^0.1.4", ++ "html-tags": "^3.3.1", ++ "ignore": "^5.3.1", ++ "imurmurhash": "^0.1.4", ++ "is-plain-object": "^5.0.0", ++ "known-css-properties": "^0.34.0", ++ "mathml-tag-names": "^2.1.3", ++ "meow": "^13.2.0", ++ "micromatch": "^4.0.7", ++ "normalize-path": "^3.0.0", ++ "picocolors": "^1.0.1", ++ "postcss": "^8.4.39", ++ "postcss-resolve-nested-selector": "^0.1.1", ++ "postcss-safe-parser": "^7.0.0", ++ "postcss-selector-parser": "^6.1.0", ++ "postcss-value-parser": "^4.2.0", ++ "resolve-from": "^5.0.0", ++ "string-width": "^4.2.3", ++ "strip-ansi": "^7.1.0", ++ "supports-hyperlinks": "^3.0.0", ++ "svg-tags": "^1.0.0", ++ "table": "^6.8.2", ++ "write-file-atomic": "^5.0.1" ++ }, ++ "bin": { ++ "stylelint": "bin/stylelint.mjs" ++ }, ++ "engines": { ++ "node": ">=18.12.0" + } + }, +- "node_modules/safe-buffer": { +- "version": "5.2.1", +- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", +- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", ++ "node_modules/stylelint-config-recommended": { ++ "version": "14.0.1", ++ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", ++ "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", + "dev": true, + "funding": [ + { +- "type": "github", +- "url": "https://github.com/sponsors/feross" +- }, +- { +- "type": "patreon", +- "url": "https://www.patreon.com/feross" ++ "type": "opencollective", ++ "url": "https://opencollective.com/stylelint" + }, + { +- "type": "consulting", +- "url": "https://feross.org/support" ++ "type": "github", ++ "url": "https://github.com/sponsors/stylelint" + } +- ] +- }, +- "node_modules/safer-buffer": { +- "version": "2.1.2", +- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", +- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", +- "dev": true ++ ], ++ "engines": { ++ "node": ">=18.12.0" ++ }, ++ "peerDependencies": { ++ "stylelint": "^16.1.0" ++ } + }, +- "node_modules/sass": { +- "version": "1.64.1", +- "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", +- "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", ++ "node_modules/stylelint-config-recommended-scss": { ++ "version": "14.0.0", ++ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz", ++ "integrity": "sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==", + "dev": true, + "dependencies": { +- "chokidar": ">=3.0.0 <4.0.0", +- "immutable": "^4.0.0", +- "source-map-js": ">=0.6.2 <2.0.0" +- }, +- "bin": { +- "sass": "sass.js" ++ "postcss-scss": "^4.0.9", ++ "stylelint-config-recommended": "^14.0.0", ++ "stylelint-scss": "^6.0.0" + }, + "engines": { +- "node": ">=14.0.0" +- } +- }, +- "node_modules/scheduler": { +- "version": "0.23.0", +- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", +- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", +- "dependencies": { +- "loose-envify": "^1.1.0" ++ "node": ">=18.12.0" ++ }, ++ "peerDependencies": { ++ "postcss": "^8.3.3", ++ "stylelint": "^16.0.2" ++ }, ++ "peerDependenciesMeta": { ++ "postcss": { ++ "optional": true ++ } + } + }, +- "node_modules/schema-utils": { +- "version": "3.3.0", +- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", +- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", ++ "node_modules/stylelint-config-standard": { ++ "version": "36.0.1", ++ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", ++ "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", + "dev": true, +- "peer": true, ++ "funding": [ ++ { ++ "type": "opencollective", ++ "url": "https://opencollective.com/stylelint" ++ }, ++ { ++ "type": "github", ++ "url": "https://github.com/sponsors/stylelint" ++ } ++ ], + "dependencies": { +- "@types/json-schema": "^7.0.8", +- "ajv": "^6.12.5", +- "ajv-keywords": "^3.5.2" ++ "stylelint-config-recommended": "^14.0.1" + }, + "engines": { +- "node": ">= 10.13.0" ++ "node": ">=18.12.0" + }, +- "funding": { +- "type": "opencollective", +- "url": "https://opencollective.com/webpack" +- } +- }, +- "node_modules/semver": { +- "version": "6.3.1", +- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", +- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", +- "dev": true, +- "bin": { +- "semver": "bin/semver.js" ++ "peerDependencies": { ++ "stylelint": "^16.1.0" + } + }, +- "node_modules/serialize-javascript": { +- "version": "6.0.1", +- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", +- "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", ++ "node_modules/stylelint-config-standard-scss": { ++ "version": "13.1.0", ++ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz", ++ "integrity": "sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA==", + "dev": true, +- "peer": true, +- "dependencies": { +- "randombytes": "^2.1.0" +- } +- }, +- "node_modules/shebang-command": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", +- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { +- "shebang-regex": "^3.0.0" ++ "stylelint-config-recommended-scss": "^14.0.0", ++ "stylelint-config-standard": "^36.0.0" + }, + "engines": { +- "node": ">=8" +- } +- }, +- "node_modules/shebang-regex": { +- "version": "3.0.0", +- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", +- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", +- "engines": { +- "node": ">=8" ++ "node": ">=18.12.0" ++ }, ++ "peerDependencies": { ++ "postcss": "^8.3.3", ++ "stylelint": "^16.3.1" ++ }, ++ "peerDependenciesMeta": { ++ "postcss": { ++ "optional": true ++ } + } + }, +- "node_modules/side-channel": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", +- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", +- "peer": true, ++ "node_modules/stylelint-formatter-pretty": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/stylelint-formatter-pretty/-/stylelint-formatter-pretty-4.0.0.tgz", ++ "integrity": "sha512-tVuAEhvdTcLzlupqPEPhpBoszX3hB6AnI/OSqEIZOxRatHDHSlu/MaU13MUDzEPOgdoFfDzsVqhp4j2DltaIvg==", ++ "dev": true, ++ "funding": [ ++ { ++ "type": "kofi", ++ "url": "https://ko-fi.com/mrcgrtz" ++ }, ++ { ++ "type": "liberapay", ++ "url": "https://liberapay.com/mrcgrtz/" ++ } ++ ], + "dependencies": { +- "call-bind": "^1.0.0", +- "get-intrinsic": "^1.0.2", +- "object-inspect": "^1.9.0" ++ "ansi-escapes": "^6.2.0", ++ "log-symbols": "^6.0.0", ++ "picocolors": "^1.0.0", ++ "plur": "^5.1.0", ++ "string-width": "^7.0.0", ++ "supports-hyperlinks": "^3.0.0" + }, +- "funding": { +- "url": "https://github.com/sponsors/ljharb" +- } +- }, +- "node_modules/signal-exit": { +- "version": "4.0.2", +- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", +- "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "engines": { +- "node": ">=14" ++ "node": ">=18.12.0" + }, +- "funding": { +- "url": "https://github.com/sponsors/isaacs" ++ "peerDependencies": { ++ "stylelint": ">=16.0.0" + } + }, +- "node_modules/sizzle": { +- "version": "2.3.10", +- "resolved": "https://registry.npmjs.org/sizzle/-/sizzle-2.3.10.tgz", +- "integrity": "sha512-kPGev+SiByuzi/YPDTqCwdKLWCaN9+14ve86yH0gP6Efue04xjLYWJrcLC6y1buFyIVXkwHNXPsOTEd1MYVPbQ==", ++ "node_modules/stylelint-formatter-pretty/node_modules/emoji-regex": { ++ "version": "10.3.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", ++ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true + }, +- "node_modules/slash": { +- "version": "3.0.0", +- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", +- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", ++ "node_modules/stylelint-formatter-pretty/node_modules/string-width": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", ++ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, ++ "dependencies": { ++ "emoji-regex": "^10.3.0", ++ "get-east-asian-width": "^1.0.0", ++ "strip-ansi": "^7.1.0" ++ }, + "engines": { +- "node": ">=8" ++ "node": ">=18" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } + }, +- "node_modules/source-map": { +- "version": "0.6.1", +- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", +- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", ++ "node_modules/stylelint-scss": { ++ "version": "6.4.1", ++ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.4.1.tgz", ++ "integrity": "sha512-+clI2bQC2FPOt06ZwUlXZZ95IO2C5bKTP0GLN1LNQPVvISfSNcgMKv/VTwym1mK9vnqhHbOk8lO4rj4nY7L9pw==", + "dev": true, +- "peer": true, ++ "dependencies": { ++ "known-css-properties": "^0.34.0", ++ "postcss-media-query-parser": "^0.2.3", ++ "postcss-resolve-nested-selector": "^0.1.1", ++ "postcss-selector-parser": "^6.1.0", ++ "postcss-value-parser": "^4.2.0" ++ }, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=18.12.0" ++ }, ++ "peerDependencies": { ++ "stylelint": "^16.0.2" + } + }, +- "node_modules/source-map-js": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", +- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", ++ "node_modules/stylelint/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { +- "node": ">=0.10.0" ++ "node": ">=8" + } + }, +- "node_modules/source-map-support": { +- "version": "0.5.21", +- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", +- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", +- "dev": true, +- "peer": true, +- "dependencies": { +- "buffer-from": "^1.0.0", +- "source-map": "^0.6.0" +- } ++ "node_modules/stylelint/node_modules/balanced-match": { ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", ++ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", ++ "dev": true + }, +- "node_modules/sourcemap-codec": { +- "version": "1.4.8", +- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", +- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", +- "deprecated": "Please use @jridgewell/sourcemap-codec instead", ++ "node_modules/stylelint/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 + }, +- "node_modules/stop-iteration-iterator": { +- "version": "1.0.0", +- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", +- "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", +- "peer": true, ++ "node_modules/stylelint/node_modules/file-entry-cache": { ++ "version": "9.0.0", ++ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", ++ "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", ++ "dev": true, + "dependencies": { +- "internal-slot": "^1.0.4" ++ "flat-cache": "^5.0.0" + }, + "engines": { +- "node": ">= 0.4" ++ "node": ">=18" + } + }, +- "node_modules/string_decoder": { +- "version": "1.3.0", +- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", +- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", ++ "node_modules/stylelint/node_modules/flat-cache": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", ++ "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "dependencies": { +- "safe-buffer": "~5.2.0" ++ "flatted": "^3.3.1", ++ "keyv": "^4.5.4" ++ }, ++ "engines": { ++ "node": ">=18" + } + }, +- "node_modules/string-width": { +- "version": "5.1.2", +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", +- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", +- "dependencies": { +- "eastasianwidth": "^0.2.0", +- "emoji-regex": "^9.2.2", +- "strip-ansi": "^7.0.1" +- }, ++ "node_modules/stylelint/node_modules/resolve-from": { ++ "version": "5.0.0", ++ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", ++ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", ++ "dev": true, + "engines": { +- "node": ">=12" +- }, +- "funding": { +- "url": "https://github.com/sponsors/sindresorhus" ++ "node": ">=8" + } + }, +- "node_modules/string-width-cjs": { +- "name": "string-width", ++ "node_modules/stylelint/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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" +- }, +- "engines": { +- "node": ">=8" +- } +- }, +- "node_modules/string-width-cjs/node_modules/ansi-regex": { +- "version": "5.0.1", +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ }, + "engines": { + "node": ">=8" + } + }, +- "node_modules/string-width-cjs/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==" +- }, +- "node_modules/string-width-cjs/node_modules/strip-ansi": { ++ "node_modules/stylelint/node_modules/string-width/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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, +@@ -4348,50 +7331,50 @@ + "node": ">=8" + } + }, +- "node_modules/strip-ansi": { +- "version": "7.1.0", +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", +- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", ++ "node_modules/supports-color": { ++ "version": "5.5.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", ++ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "dev": true, + "dependencies": { +- "ansi-regex": "^6.0.1" ++ "has-flag": "^3.0.0" + }, + "engines": { +- "node": ">=12" +- }, +- "funding": { +- "url": "https://github.com/chalk/strip-ansi?sponsor=1" ++ "node": ">=4" + } + }, +- "node_modules/strip-ansi-cjs": { +- "name": "strip-ansi", +- "version": "6.0.1", +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", +- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", ++ "node_modules/supports-hyperlinks": { ++ "version": "3.0.0", ++ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", ++ "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", ++ "dev": true, + "dependencies": { +- "ansi-regex": "^5.0.1" ++ "has-flag": "^4.0.0", ++ "supports-color": "^7.0.0" + }, + "engines": { +- "node": ">=8" ++ "node": ">=14.18" + } + }, +- "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { +- "version": "5.0.1", +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "node_modules/supports-hyperlinks/node_modules/has-flag": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", ++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", ++ "dev": true, + "engines": { + "node": ">=8" + } + }, +- "node_modules/supports-color": { +- "version": "5.5.0", +- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", +- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", ++ "node_modules/supports-hyperlinks/node_modules/supports-color": { ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", ++ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { +- "has-flag": "^3.0.0" ++ "has-flag": "^4.0.0" + }, + "engines": { +- "node": ">=4" ++ "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { +@@ -4406,11 +7389,96 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/svg-tags": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", ++ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", ++ "dev": true ++ }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, ++ "node_modules/table": { ++ "version": "6.8.2", ++ "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", ++ "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", ++ "dev": true, ++ "dependencies": { ++ "ajv": "^8.0.1", ++ "lodash.truncate": "^4.4.2", ++ "slice-ansi": "^4.0.0", ++ "string-width": "^4.2.3", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=10.0.0" ++ } ++ }, ++ "node_modules/table/node_modules/ajv": { ++ "version": "8.17.1", ++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", ++ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", ++ "dev": true, ++ "dependencies": { ++ "fast-deep-equal": "^3.1.3", ++ "fast-uri": "^3.0.1", ++ "json-schema-traverse": "^1.0.0", ++ "require-from-string": "^2.0.2" ++ }, ++ "funding": { ++ "type": "github", ++ "url": "https://github.com/sponsors/epoberezkin" ++ } ++ }, ++ "node_modules/table/node_modules/ansi-regex": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", ++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/table/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 ++ }, ++ "node_modules/table/node_modules/json-schema-traverse": { ++ "version": "1.0.0", ++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", ++ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", ++ "dev": true ++ }, ++ "node_modules/table/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, ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, ++ "node_modules/table/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, ++ "dependencies": { ++ "ansi-regex": "^5.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", +@@ -4481,6 +7549,12 @@ + "dev": true, + "peer": true + }, ++ "node_modules/text-table": { ++ "version": "0.2.0", ++ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", ++ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", ++ "dev": true ++ }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", +@@ -4524,6 +7598,18 @@ + "node": ">=8.0" + } + }, ++ "node_modules/ts-api-utils": { ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", ++ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=16" ++ }, ++ "peerDependencies": { ++ "typescript": ">=4.2.0" ++ } ++ }, + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", +@@ -4646,15 +7732,136 @@ + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, ++ "node_modules/tsconfig-paths": { ++ "version": "3.15.0", ++ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", ++ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", ++ "dev": true, ++ "dependencies": { ++ "@types/json5": "^0.0.29", ++ "json5": "^1.0.2", ++ "minimist": "^1.2.6", ++ "strip-bom": "^3.0.0" ++ } ++ }, ++ "node_modules/tsconfig-paths/node_modules/json5": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", ++ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", ++ "dev": true, ++ "dependencies": { ++ "minimist": "^1.2.0" ++ }, ++ "bin": { ++ "json5": "lib/cli.js" ++ } ++ }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + }, ++ "node_modules/type-check": { ++ "version": "0.4.0", ++ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", ++ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", ++ "dev": true, ++ "dependencies": { ++ "prelude-ls": "^1.2.1" ++ }, ++ "engines": { ++ "node": ">= 0.8.0" ++ } ++ }, ++ "node_modules/type-fest": { ++ "version": "0.20.2", ++ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", ++ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", ++ "dev": true, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } ++ }, ++ "node_modules/typed-array-buffer": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", ++ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "es-errors": "^1.3.0", ++ "is-typed-array": "^1.1.13" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ } ++ }, ++ "node_modules/typed-array-byte-length": { ++ "version": "1.0.1", ++ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", ++ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "for-each": "^0.3.3", ++ "gopd": "^1.0.1", ++ "has-proto": "^1.0.3", ++ "is-typed-array": "^1.1.13" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/typed-array-byte-offset": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", ++ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", ++ "dev": true, ++ "dependencies": { ++ "available-typed-arrays": "^1.0.7", ++ "call-bind": "^1.0.7", ++ "for-each": "^0.3.3", ++ "gopd": "^1.0.1", ++ "has-proto": "^1.0.3", ++ "is-typed-array": "^1.1.13" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, ++ "node_modules/typed-array-length": { ++ "version": "1.0.6", ++ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", ++ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.7", ++ "for-each": "^0.3.3", ++ "gopd": "^1.0.1", ++ "has-proto": "^1.0.3", ++ "is-typed-array": "^1.1.13", ++ "possible-typed-array-names": "^1.0.0" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/typescript": { +- "version": "5.1.6", +- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", +- "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", ++ "version": "5.5.3", ++ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", ++ "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", +@@ -4664,6 +7871,21 @@ + "node": ">=14.17" + } + }, ++ "node_modules/unbox-primitive": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", ++ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", ++ "dev": true, ++ "dependencies": { ++ "call-bind": "^1.0.2", ++ "has-bigints": "^1.0.2", ++ "has-symbols": "^1.0.3", ++ "which-boxed-primitive": "^1.0.2" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", +@@ -4709,11 +7931,23 @@ + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, +- "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, ++ "node_modules/util-deprecate": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", ++ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", ++ "dev": true ++ }, ++ "node_modules/varint": { ++ "version": "6.0.0", ++ "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", ++ "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", ++ "dev": true, ++ "peer": true ++ }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", +@@ -4804,7 +8038,6 @@ + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", +- "peer": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", +@@ -4816,11 +8049,36 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/which-builtin-type": { ++ "version": "1.1.3", ++ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", ++ "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", ++ "dev": true, ++ "dependencies": { ++ "function.prototype.name": "^1.1.5", ++ "has-tostringtag": "^1.0.0", ++ "is-async-function": "^2.0.0", ++ "is-date-object": "^1.0.5", ++ "is-finalizationregistry": "^1.0.2", ++ "is-generator-function": "^1.0.10", ++ "is-regex": "^1.1.4", ++ "is-weakref": "^1.0.2", ++ "isarray": "^2.0.5", ++ "which-boxed-primitive": "^1.0.2", ++ "which-collection": "^1.0.1", ++ "which-typed-array": "^1.1.9" ++ }, ++ "engines": { ++ "node": ">= 0.4" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } ++ }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", +- "peer": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", +@@ -4832,16 +8090,15 @@ + } + }, + "node_modules/which-typed-array": { +- "version": "1.1.11", +- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", +- "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", +- "peer": true, ++ "version": "1.1.15", ++ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", ++ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { +- "available-typed-arrays": "^1.0.5", +- "call-bind": "^1.0.2", ++ "available-typed-arrays": "^1.0.7", ++ "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", +- "has-tostringtag": "^1.0.0" ++ "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" +@@ -4850,6 +8107,15 @@ + "url": "https://github.com/sponsors/ljharb" + } + }, ++ "node_modules/word-wrap": { ++ "version": "1.2.5", ++ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", ++ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", ++ "dev": true, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", +@@ -4967,6 +8233,19 @@ + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, ++ "node_modules/write-file-atomic": { ++ "version": "5.0.1", ++ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", ++ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", ++ "dev": true, ++ "dependencies": { ++ "imurmurhash": "^0.1.4", ++ "signal-exit": "^4.0.1" ++ }, ++ "engines": { ++ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" ++ } ++ }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", +@@ -5003,6 +8282,18 @@ + "engines": { + "node": ">= 14" + } ++ }, ++ "node_modules/yocto-queue": { ++ "version": "0.1.0", ++ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", ++ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", ++ "dev": true, ++ "engines": { ++ "node": ">=10" ++ }, ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" ++ } + } + } + } +diff --git a/package.json b/package.json +index 62afd37..8aa4749 100644 +--- a/package.json ++++ b/package.json +@@ -1,51 +1,71 @@ + { +- "name": "tukit", +- "description": "Cockpit module for Transactional Update", +- "type": "module", +- "main": "index.js", +- "repository": "https://github.com/openSUSE/cockpit-tukit", +- "author": "", +- "license": "LGPL-2.1", +- "scripts": { +- "watch": "ESBUILD_WATCH='true' ./build.js", +- "build": "tsc -noEmit && ./build.js", +- "lint": "biome check .", +- "format": "biome format . --write", +- "postinstall": "patch-package" +- }, +- "devDependencies": { +- "@babel/preset-typescript": "^7.21.4", +- "@biomejs/biome": "1.8.3", +- "@types/react": "^18.0.37", +- "@types/react-dom": "^18.0.11", +- "argparse": "^2.0.1", +- "chrome-remote-interface": "^0.32.1", +- "esbuild": "^0.18.6", +- "esbuild-plugin-copy": "^2.1.1", +- "esbuild-plugin-replace": "^1.3.0", +- "esbuild-sass-plugin": "^2.10.0", +- "gettext-parser": "7.0.1", +- "htmlparser": "^1.7.7", +- "jed": "^1.1.1", +- "patch-package": "^7.0.2", +- "qunit": "^2.9.3", +- "sass": "^1.61.0", +- "sizzle": "^2.3.3", +- "ts-loader": "^9.4.2", +- "typescript": "^5.0.4" +- }, +- "peerDependencies": { +- "date-fns": "^2.30.0", +- "deep-equal": "^2.2.2" +- }, +- "dependencies": { +- "@patternfly/patternfly": "5.0.0-alpha.64", +- "@patternfly/react-core": "5.0.0-alpha.115", +- "@patternfly/react-icons": "5.0.0-alpha.19", +- "@patternfly/react-styles": "5.0.0-alpha.16", +- "glob": "^10.3.3", +- "react": "18.2.0", +- "react-dom": "18.2.0", +- "react-xml-parser": "^1.1.8" +- } ++ "name": "tukit", ++ "description": "Cockpit module for Transactional Update", ++ "type": "module", ++ "main": "index.js", ++ "repository": "https://github.com/openSUSE/cockpit-tukit", ++ "author": "", ++ "license": "LGPL-2.1", ++ "scripts": { ++ "watch": "ESBUILD_WATCH='true' ./build.js", ++ "build": "tsc -noEmit && ./build.js", ++ "eslint": "eslint src/", ++ "eslint:fix": "eslint --fix src/", ++ "stylelint": "stylelint src/*{.css,scss}", ++ "stylelint:fix": "stylelint --fix src/*{.css,scss}", ++ "lint": "biome check .", ++ "format": "biome format . --write", ++ "ci": "biome ci && npm run eslint && npm run stylelint", ++ "postinstall": "patch-package" ++ }, ++ "devDependencies": { ++ "@babel/preset-typescript": "^7.21.4", ++ "@biomejs/biome": "1.8.3", ++ "@types/react": "^18.3.3", ++ "@types/react-dom": "^18.3.0", ++ "@typescript-eslint/eslint-plugin": "7.17.0", ++ "argparse": "^2.0.1", ++ "chrome-remote-interface": "^0.33.0", ++ "esbuild": "^0.23.0", ++ "esbuild-plugin-copy": "^2.1.1", ++ "esbuild-plugin-replace": "^1.4.0", ++ "esbuild-sass-plugin": "^3.3.1", ++ "eslint": "^8.57.0", ++ "eslint-config-standard": "^17.1.0", ++ "eslint-config-standard-jsx": "^11.0.0", ++ "eslint-config-standard-react": "^13.0.0", ++ "eslint-plugin-import": "^2.29.1", ++ "eslint-plugin-node": "^11.1.0", ++ "eslint-plugin-promise": "^6.6.0", ++ "eslint-plugin-react": "^7.35.0", ++ "eslint-plugin-react-hooks": "^4.6.2", ++ "gettext-parser": "8.0.0", ++ "htmlparser": "^1.7.7", ++ "jed": "^1.1.1", ++ "patch-package": "^7.0.2", ++ "qunit": "^2.21.1", ++ "sass": "^1.77.8", ++ "sizzle": "^2.3.3", ++ "stylelint": "16.7.0", ++ "stylelint-config-recommended-scss": "14.0.0", ++ "stylelint-config-standard": "36.0.1", ++ "stylelint-config-standard-scss": "13.1.0", ++ "stylelint-formatter-pretty": "4.0.0", ++ "ts-loader": "^9.4.2", ++ "typescript": "5.5.3" ++ }, ++ "peerDependencies": { ++ "date-fns": "^2.30.0", ++ "deep-equal": "^2.2.2" ++ }, ++ "dependencies": { ++ "@patternfly/patternfly": "5.3.1", ++ "@patternfly/react-core": "5.3.4", ++ "@patternfly/react-icons": "5.3.2", ++ "@patternfly/react-styles": "5.3.1", ++ "glob": "^11.0.0", ++ "react": "18.3.1", ++ "react-dom": "18.3.1", ++ "react-xml-parser": "^1.1.8" ++ } + } +diff --git a/cockpit-tukit.spec.in b/packaging/cockpit-tukit.spec.in +similarity index 100% +rename from cockpit-tukit.spec.in +rename to packaging/cockpit-tukit.spec.in +diff --git a/patches/glob+10.3.3.patch b/patches/glob+10.3.3.patch +deleted file mode 100644 +index 1fcc64d..0000000 +--- a/patches/glob+10.3.3.patch ++++ /dev/null +@@ -1,11 +0,0 @@ +-diff --git a/node_modules/glob/dist/mjs/index.js b/node_modules/glob/dist/mjs/index.js +-index 7b27011..76b7c27 100644 +---- a/node_modules/glob/dist/mjs/index.js +-+++ b/node_modules/glob/dist/mjs/index.js +-@@ -53,4 +53,5 @@ export const glob = Object.assign(glob_, { +- unescape, +- }); +- glob.glob = glob; +-+export {glob as default}; +- //# sourceMappingURL=index.js.map +-\ No newline at end of file +diff --git a/patches/glob+11.0.0.patch b/patches/glob+11.0.0.patch +new file mode 100644 +index 0000000..b4b9e9c +--- /dev/null ++++ b/patches/glob+11.0.0.patch +@@ -0,0 +1,11 @@ ++diff --git a/node_modules/glob/dist/esm/index.js b/node_modules/glob/dist/esm/index.js ++index e15c1f9..0eda344 100644 ++--- a/node_modules/glob/dist/esm/index.js +++++ b/node_modules/glob/dist/esm/index.js ++@@ -52,4 +52,5 @@ export const glob = Object.assign(glob_, { ++ unescape, ++ }); ++ glob.glob = glob; +++export { glob as default }; ++ //# sourceMappingURL=index.js.map ++\ No newline at end of file +diff --git a/src/app.tsx b/src/app.tsx +index c3d0a84..e0090d3 100644 +--- a/src/app.tsx ++++ b/src/app.tsx +@@ -25,19 +25,19 @@ import "cockpit-dark-theme"; + import { page_status } from "notifications"; + import React, { useState, useEffect } from "react"; + import { +- Button, +- Card, +- CardBody, +- CardTitle, +- DataList, +- EmptyState, +- EmptyStateBody, +- EmptyStateIcon, +- Gallery, +- Page, +- PageSection, +- Spinner, +- Title, ++ Button, ++ Card, ++ CardBody, ++ CardTitle, ++ DataList, ++ EmptyState, ++ EmptyStateBody, ++ EmptyStateIcon, ++ Gallery, ++ Page, ++ PageSection, ++ Spinner, ++ Title, + } from "@patternfly/react-core"; + import { ExclamationCircleIcon, RedoIcon } from "@patternfly/react-icons"; + +@@ -47,10 +47,10 @@ import StatusPanel from "./components/StatusPanel"; + import UpdatesPanel from "./components/UpdatesPanel"; + + import { +- type Snapshot, +- createSnapshot, +- snapshotsProxy, +- tukitdProxy, ++ type Snapshot, ++ createSnapshot, ++ snapshotsProxy, ++ tukitdProxy, + } from "./tukit"; + import { type Status, mostSevereStatus } from "./status"; + import type { Update } from "./update"; +@@ -60,213 +60,213 @@ const _ = cockpit.gettext; + superuser.reload_page_on_change(); + + const Application = () => { +- const [status, setStatus] = useState([]); ++ const [status, setStatus] = useState([]); + +- const [snapshots, setSnapshots] = useState([]); +- const [snapshotsWaiting, setSnapshotsWaiting] = useState(null); +- const [snapshotsDirty, setSnapshotsDirty] = useState(true); ++ const [snapshots, setSnapshots] = useState([]); ++ const [snapshotsWaiting, setSnapshotsWaiting] = useState(null); ++ const [snapshotsDirty, setSnapshotsDirty] = useState(true); + +- const [updates, setUpdates] = useState([]); +- const [updatesWaiting, setUpdatesWaiting] = useState(null); +- const [updatesError, setUpdatesError] = useState(null); +- const [updatesDirty, setUpdatesDirty] = useState(true); ++ const [updates, setUpdates] = useState([]); ++ const [updatesWaiting, setUpdatesWaiting] = useState(null); ++ const [updatesError, setUpdatesError] = useState(null); ++ const [updatesDirty, setUpdatesDirty] = useState(true); + +- const [serviceReady, setServiceReady] = useState(false); ++ const [serviceReady, setServiceReady] = useState(false); + +- useEvent(superuser, "changed"); ++ useEvent(superuser, "changed"); + +- const setDirty = (v: boolean) => { +- setSnapshotsDirty(v); +- setUpdatesDirty(v); +- }; ++ const setDirty = (v: boolean) => { ++ setSnapshotsDirty(v); ++ setUpdatesDirty(v); ++ }; + +- useEffect(() => { +- if (superuser.allowed) getSnapshots(); +- // TODO: FIX! +- // eslint-disable-next-line react-hooks/exhaustive-deps +- }, [snapshotsDirty, superuser.allowed]); ++ useEffect(() => { ++ if (superuser.allowed) getSnapshots(); ++ // TODO: FIX! ++ // eslint-disable-next-line react-hooks/exhaustive-deps ++ }, [snapshotsDirty, superuser.allowed]); + +- // forward status to Cockpit +- useEffect(() => { +- if (status.length > 0) { +- // page_status can show only one status +- // use most important one +- page_status.set_own(mostSevereStatus(status)); +- } else { +- page_status.set_own(null); +- } +- }, [status]); ++ // forward status to Cockpit ++ useEffect(() => { ++ if (status.length > 0) { ++ // page_status can show only one status ++ // use most important one ++ page_status.set_own(mostSevereStatus(status)); ++ } else { ++ page_status.set_own(null); ++ } ++ }, [status]); + +- const showServiceDetails = () => { +- cockpit.jump("/system/services#/tukitd.service", cockpit.transport.host); +- }; ++ const showServiceDetails = () => { ++ cockpit.jump("/system/services#/tukitd.service", cockpit.transport.host); ++ }; + +- const loading = () => { +- return ( +- +- +- {_("Loading...")} +- +- ); +- }; ++ const loading = () => { ++ return ( ++ ++ ++ {_("Loading...")} ++ ++ ); ++ }; + +- const serviceProblem = () => { +- // service proxy not ready yet? +- if (!serviceReady) { +- tukitdProxy().wait(() => { +- setServiceReady(true); +- }); +- return loading(); +- } +- if (!tukitdProxy().exists) { +- return ( +- +- +- +- {_("Transactional update service not installed")} +- +- +- {_("Please ensure package tukitd is installed.")} +- +- +- ); +- } +- if (tukitdProxy().state !== "running") { +- return ( +- +- +- +- {_("Transactional update service not running")} +- +- +- +- +- +- ); +- } +- if (!superuser.allowed) { +- return ( +- +- +- +- {_( +- "Administrative access is required to access updates and snapshots.", +- )} +- +- +- ); +- } +- return false; +- }; ++ const serviceProblem = () => { ++ // service proxy not ready yet? ++ if (!serviceReady) { ++ tukitdProxy().wait(() => { ++ setServiceReady(true); ++ }); ++ return loading(); ++ } ++ if (!tukitdProxy().exists) { ++ return ( ++ ++ ++ ++ {_("Transactional update service not installed")} ++ ++ ++ {_("Please ensure package tukitd is installed.")} ++ ++ ++ ); ++ } ++ if (tukitdProxy().state !== "running") { ++ return ( ++ ++ ++ ++ {_("Transactional update service not running")} ++ ++ ++ ++ ++ ++ ); ++ } ++ if (!superuser.allowed) { ++ return ( ++ ++ ++ ++ {_( ++ "Administrative access is required to access updates and snapshots.", ++ )} ++ ++ ++ ); ++ } ++ return false; ++ }; + +- const getSnapshots = () => { +- if (!snapshotsDirty) { +- return; +- } +- setSnapshotsDirty(false); ++ const getSnapshots = () => { ++ if (!snapshotsDirty) { ++ return; ++ } ++ setSnapshotsDirty(false); + +- setSnapshotsWaiting(_("Fetching snapshots...")); +- const proxy = snapshotsProxy(); +- proxy.wait(async () => { +- try { +- const snaps = ( +- await proxy.List("number,default,active,date,description") +- ).map((snap) => createSnapshot(snap)); +- // remove "current" snapshot +- snaps.shift(); +- snaps.sort((a, b) => b.number - a.number); +- // mark old snapshots +- let active: Snapshot | null = null; +- for (const snap of snaps) { +- if (active) snap.old = true; +- if (snap.active) active = snap; +- } +- setSnapshots(snaps); +- } catch (e) { +- // service problems are reported in serviceProblem() +- if (serviceReady && tukitdProxy().state === "running") { +- alert(`ERROR ${e}`); +- } +- } +- setSnapshotsWaiting(null); +- }); +- }; ++ setSnapshotsWaiting(_("Fetching snapshots...")); ++ const proxy = snapshotsProxy(); ++ proxy.wait(async () => { ++ try { ++ const snaps = ( ++ await proxy.List("number,default,active,date,description") ++ ).map((snap) => createSnapshot(snap)); ++ // remove "current" snapshot ++ snaps.shift(); ++ snaps.sort((a, b) => b.number - a.number); ++ // mark old snapshots ++ let active: Snapshot | null = null; ++ for (const snap of snaps) { ++ if (active) snap.old = true; ++ if (snap.active) active = snap; ++ } ++ setSnapshots(snaps); ++ } catch (e) { ++ // service problems are reported in serviceProblem() ++ if (serviceReady && tukitdProxy().state === "running") { ++ alert(`ERROR ${e}`); ++ } ++ } ++ setSnapshotsWaiting(null); ++ }); ++ }; + +- return ( +- +- +- +- +- +- +- +- {_("Snapshots & Updates")} +- +- +- +- {serviceProblem() || (snapshotsWaiting && loading()) || ( +- +- {updates.length > 0 && ( +- +- )} +- {snapshots.map((item) => ( +- +- ))} +- +- )} +- +- +- +- +- +- ); ++ return ( ++ ++ ++ ++ ++ ++ ++ ++ {_("Snapshots & Updates")} ++ ++ ++ ++ {serviceProblem() || (snapshotsWaiting && loading()) || ( ++ ++ {updates.length > 0 && ( ++ ++ )} ++ {snapshots.map((item) => ( ++ ++ ))} ++ ++ )} ++ ++ ++ ++ ++ ++ ); + }; + + export default Application; +diff --git a/src/components/SnapshotItem.tsx b/src/components/SnapshotItem.tsx +index 4000496..014eb2c 100644 +--- a/src/components/SnapshotItem.tsx ++++ b/src/components/SnapshotItem.tsx +@@ -20,25 +20,25 @@ + + import cockpit from "cockpit"; + import * as timeformat from "timeformat"; +-import type React from "react"; +-import { useState } from "react"; ++// biome-ignore lint/style/useImportType: this is not used as a type ++import React, { useState } from "react"; + import { +- Badge, +- Button, +- DataListItem, +- DataListToggle, +- DataListItemRow, +- DataListItemCells, +- DataListCell, +- DataListAction, +- DataListContent, +- Dropdown, +- DropdownItem, +- Label, +- Tooltip, +- type MenuToggleElement, +- MenuToggle, +- DropdownList, ++ Badge, ++ Button, ++ DataListItem, ++ DataListToggle, ++ DataListItemRow, ++ DataListItemCells, ++ DataListCell, ++ DataListAction, ++ DataListContent, ++ Dropdown, ++ DropdownItem, ++ Label, ++ Tooltip, ++ type MenuToggleElement, ++ MenuToggle, ++ DropdownList, + } from "@patternfly/react-core"; + import { DropdownPosition } from "@patternfly/react-core/deprecated"; + import { CheckCircleIcon, EllipsisVIcon } from "@patternfly/react-icons"; +@@ -47,180 +47,180 @@ import type { Snapshot } from "@/tukit"; + const _ = cockpit.gettext; + + type SnapshotItemProps = { +- item: Snapshot; +- waiting: string | null; +- setWaiting: (waiting: string | null) => void; +- setDirty: (dirty: boolean) => void; ++ item: Snapshot; ++ waiting: string | null; ++ setWaiting: (waiting: string | null) => void; ++ setDirty: (dirty: boolean) => void; + }; + + const SnapshotItem = ({ +- item, +- setDirty, +- setWaiting, +- waiting, ++ item, ++ setDirty, ++ setWaiting, ++ waiting, + }: SnapshotItemProps) => { +- const [expanded, setExpanded] = useState(false); +- const [menuOpen, setMenuOpen] = useState(false); ++ const [expanded, setExpanded] = useState(false); ++ const [menuOpen, setMenuOpen] = useState(false); + +- const rollback = async (snap: Snapshot, msg: string, reboot: boolean) => { +- setWaiting(msg); +- try { +- let script = `transactional-update rollback ${snap.number}`; +- if (reboot) { +- script = `${script} && reboot`; +- } +- const out = await cockpit.script(script, { +- superuser: "require", +- err: "message", +- }); +- console.log(`rollback output: ${out}`); +- setDirty(true); +- } catch (e) { +- console.log(`rollback error: ${e}`); +- // TODO: better error handling +- alert(e); +- } +- setWaiting(null); +- }; +- const rollbackAndReboot = (snap: Snapshot) => { +- rollback(snap, _("Rolling back..."), true); +- }; +- const rollbackOnly = (snap: Snapshot) => { +- rollback(snap, _("Rolling back..."), false); +- }; +- const activateAndReboot = (snap: Snapshot) => { +- rollback(snap, _("Activating..."), true); +- }; +- const activateOnly = (snap: Snapshot) => { +- rollback(snap, _("Activating..."), false); +- }; +- const actions = (item: Snapshot): JSX.Element[] | undefined => { +- if (item.old) { +- return [ +- { +- rollbackOnly(item); +- }} +- > +- {_("Rollback without Reboot")} +- , +- ]; +- } +- if (!item.active && !item.old) { +- return [ +- { +- activateOnly(item); +- }} +- > +- {_("Activate without Reboot")} +- , +- ]; +- } +- return undefined; +- }; +- return ( +- +- +- { +- setExpanded(!expanded); +- }} +- isExpanded={expanded} +- /> +- +- #{item.number} +- , +- +- {item.description} +- , +- +- +- {timeformat.distanceToNow(item.date, false)} +- +- , +- +- {item.active && ( +- +- )} +- {item.default && } +- , +- +- {!item.active && !item.old && ( +- +- )} +- {item.old && ( +- +- )} +- , +- ]} +- /> +- +- {actions(item) && ( +- ) => ( +- { +- setMenuOpen(!menuOpen); +- }} +- isExpanded={menuOpen} +- > +- +- +- )} +- popperProps={{ +- position: DropdownPosition.right, +- }} +- > +- {actions(item)} +- +- )} +- +- +- +- More details about selected snapshot More details about selected +- snapshot More details about selected snapshot More details about +- selected snapshot +- +- +- ); ++ const rollback = async (snap: Snapshot, msg: string, reboot: boolean) => { ++ setWaiting(msg); ++ try { ++ let script = `transactional-update rollback ${snap.number}`; ++ if (reboot) { ++ script = `${script} && reboot`; ++ } ++ const out = await cockpit.script(script, { ++ superuser: "require", ++ err: "message", ++ }); ++ console.log(`rollback output: ${out}`); ++ setDirty(true); ++ } catch (e) { ++ console.log(`rollback error: ${e}`); ++ // TODO: better error handling ++ alert(e); ++ } ++ setWaiting(null); ++ }; ++ const rollbackAndReboot = (snap: Snapshot) => { ++ rollback(snap, _("Rolling back..."), true); ++ }; ++ const rollbackOnly = (snap: Snapshot) => { ++ rollback(snap, _("Rolling back..."), false); ++ }; ++ const activateAndReboot = (snap: Snapshot) => { ++ rollback(snap, _("Activating..."), true); ++ }; ++ const activateOnly = (snap: Snapshot) => { ++ rollback(snap, _("Activating..."), false); ++ }; ++ const actions = (item: Snapshot): JSX.Element[] | undefined => { ++ if (item.old) { ++ return [ ++ { ++ rollbackOnly(item); ++ }} ++ > ++ {_("Rollback without Reboot")} ++ , ++ ]; ++ } ++ if (!item.active && !item.old) { ++ return [ ++ { ++ activateOnly(item); ++ }} ++ > ++ {_("Activate without Reboot")} ++ , ++ ]; ++ } ++ return undefined; ++ }; ++ return ( ++ ++ ++ { ++ setExpanded(!expanded); ++ }} ++ isExpanded={expanded} ++ /> ++ ++ #{item.number} ++ , ++ ++ {item.description} ++ , ++ ++ ++ {timeformat.distanceToNow(item.date, false)} ++ ++ , ++ ++ {item.active && ( ++ ++ )} ++ {item.default && } ++ , ++ ++ {!item.active && !item.old && ( ++ ++ )} ++ {item.old && ( ++ ++ )} ++ , ++ ]} ++ /> ++ ++ {actions(item) && ( ++ ) => ( ++ { ++ setMenuOpen(!menuOpen); ++ }} ++ isExpanded={menuOpen} ++ > ++ ++ ++ )} ++ popperProps={{ ++ position: DropdownPosition.right, ++ }} ++ > ++ {actions(item)} ++ ++ )} ++ ++ ++ ++ More details about selected snapshot More details about selected ++ snapshot More details about selected snapshot More details about ++ selected snapshot ++ ++ ++ ); + }; + + export default SnapshotItem; +diff --git a/src/components/StatusPanel.tsx b/src/components/StatusPanel.tsx +index 6c4cf69..1836fa6 100644 +--- a/src/components/StatusPanel.tsx ++++ b/src/components/StatusPanel.tsx +@@ -21,19 +21,19 @@ + import cockpit from "cockpit"; + import React, { useEffect } from "react"; + import { +- Card, +- CardBody, +- CardTitle, +- List, +- ListItem, +- Tooltip, ++ Card, ++ CardBody, ++ CardTitle, ++ List, ++ ListItem, ++ Tooltip, + } from "@patternfly/react-core"; + import { +- CheckCircleIcon, +- ExclamationCircleIcon, +- ExclamationTriangleIcon, +- InfoCircleIcon, +- PendingIcon, ++ CheckCircleIcon, ++ ExclamationCircleIcon, ++ ExclamationTriangleIcon, ++ InfoCircleIcon, ++ PendingIcon, + } from "@patternfly/react-icons"; + + import "./StatusPanel.scss"; +@@ -44,109 +44,109 @@ import type { Snapshot } from "@/tukit"; + const _ = cockpit.gettext; + + type StatusPanelProps = { +- updates: Update[]; +- waiting: string | null | boolean; +- status: Status[]; +- setStatus: (status: Status[]) => void; +- updatesError: string | null; +- snapshots: Snapshot[]; ++ updates: Update[]; ++ waiting: string | null | boolean; ++ status: Status[]; ++ setStatus: (status: Status[]) => void; ++ updatesError: string | null; ++ snapshots: Snapshot[]; + }; + + const StatusPanel = ({ +- waiting, +- status, +- setStatus, +- updates, +- updatesError, +- snapshots, ++ waiting, ++ status, ++ setStatus, ++ updates, ++ updatesError, ++ snapshots, + }: StatusPanelProps) => { +- // update page status +- useEffect(() => { +- if (waiting) { +- setStatus([ +- { +- type: "", +- key: "wait", +- title: waiting, +- details: { icon: "pending" }, +- }, +- ]); +- return; +- } +- const s: Status[] = []; +- if (updatesError) { +- s.push({ +- key: "updates-error", +- type: "error", +- title: updatesError, +- }); +- } +- if (snapshots.length > 0 && !snapshots[0].active) { +- s.push({ +- key: "new-snapshot", +- type: "info", +- title: cockpit.format( +- _("New snapshot #$1 available: $0"), +- snapshots[0].description, +- snapshots[0].number, +- ), +- }); +- } +- if (updates.length > 0) { +- const security_updates = updates.filter((u) => u.category === "security"); +- const [t, msg] = +- security_updates.length > 0 +- ? (["warning", _("Security updates available")] as const) +- : (["info", _("Updates available")] as const); +- s.push({ +- key: "updates", +- type: t, +- title: msg, +- }); +- } +- // no status? it's good! +- if (s.length === 0) { +- s.push({ +- type: "", +- key: "system-ok", +- title: _("System is up to date"), +- details: { icon: "check" }, +- }); +- } +- setStatus(s); +- }, [waiting, snapshots, updates, updatesError, setStatus]); ++ // update page status ++ useEffect(() => { ++ if (waiting) { ++ setStatus([ ++ { ++ type: "", ++ key: "wait", ++ title: waiting, ++ details: { icon: "pending" }, ++ }, ++ ]); ++ return; ++ } ++ const s: Status[] = []; ++ if (updatesError) { ++ s.push({ ++ key: "updates-error", ++ type: "error", ++ title: updatesError, ++ }); ++ } ++ if (snapshots.length > 0 && !snapshots[0].active) { ++ s.push({ ++ key: "new-snapshot", ++ type: "info", ++ title: cockpit.format( ++ _("New snapshot #$1 available: $0"), ++ snapshots[0].description, ++ snapshots[0].number, ++ ), ++ }); ++ } ++ if (updates.length > 0) { ++ const security_updates = updates.filter((u) => u.category === "security"); ++ const [t, msg] = ++ security_updates.length > 0 ++ ? (["warning", _("Security updates available")] as const) ++ : (["info", _("Updates available")] as const); ++ s.push({ ++ key: "updates", ++ type: t, ++ title: msg, ++ }); ++ } ++ // no status? it's good! ++ if (s.length === 0) { ++ s.push({ ++ type: "", ++ key: "system-ok", ++ title: _("System is up to date"), ++ details: { icon: "check" }, ++ }); ++ } ++ setStatus(s); ++ }, [waiting, snapshots, updates, updatesError, setStatus]); + +- const icon = (s: Status) => { +- const i = s.details?.icon || s.type; +- const c = `tukit-status-${i}`; +- if (i === "error") return ; +- if (i === "warning") return ; +- if (i === "check") return ; +- if (i === "pending") return ; +- return ; +- }; +- return ( +- +- {_("Status")} +- +- +- {status.map((s) => ( +- +- +- {s.title} +- +- +- ))} +- +- +- +- ); ++ const icon = (s: Status) => { ++ const i = s.details?.icon || s.type; ++ const c = `tukit-status-${i}`; ++ if (i === "error") return ; ++ if (i === "warning") return ; ++ if (i === "check") return ; ++ if (i === "pending") return ; ++ return ; ++ }; ++ return ( ++ ++ {_("Status")} ++ ++ ++ {status.map((s) => ( ++ ++ ++ {s.title} ++ ++ ++ ))} ++ ++ ++ ++ ); + }; + + export default StatusPanel; +diff --git a/src/components/UpdatesItem.tsx b/src/components/UpdatesItem.tsx +index 1aa159c..9e1b856 100644 +--- a/src/components/UpdatesItem.tsx ++++ b/src/components/UpdatesItem.tsx +@@ -19,35 +19,35 @@ + */ + + import cockpit from "cockpit"; +-import type React from "react"; +-import { useState } from "react"; ++// biome-ignore lint/style/useImportType: this is not used as a type ++import React, { useState } from "react"; + import { +- Button, +- DataList, +- DataListItem, +- DataListToggle, +- DataListItemRow, +- DataListItemCells, +- DataListCell, +- DataListAction, +- DataListContent, +- Dropdown, +- DropdownItem, +- Label, +- Modal, +- ModalVariant, +- Tooltip, +- DropdownList, +- type MenuToggleElement, +- MenuToggle, ++ Button, ++ DataList, ++ DataListItem, ++ DataListToggle, ++ DataListItemRow, ++ DataListItemCells, ++ DataListCell, ++ DataListAction, ++ DataListContent, ++ Dropdown, ++ DropdownItem, ++ Label, ++ Modal, ++ ModalVariant, ++ Tooltip, ++ DropdownList, ++ type MenuToggleElement, ++ MenuToggle, + } from "@patternfly/react-core"; + import { DropdownPosition } from "@patternfly/react-core/deprecated"; + import { +- BugIcon, +- ExclamationTriangleIcon, +- InfoCircleIcon, +- PackageIcon, +- EllipsisVIcon, ++ BugIcon, ++ ExclamationTriangleIcon, ++ InfoCircleIcon, ++ PackageIcon, ++ EllipsisVIcon, + } from "@patternfly/react-icons"; + import { transactionsProxy } from "../tukit"; + import { type Update, categoryProps, severityProps } from "../update"; +@@ -58,313 +58,313 @@ import "./UpdatesItem.scss"; + const _ = cockpit.gettext; + + const UpdateDetails = ({ u }: { u: Update }) => { +- const [dialogVisible, setDialogVisible] = useState(false); +- return ( +- <> +- +- {dialogVisible && ( +- setDialogVisible(false)} +- actions={[ +- , +- ]} +- > +- +- {Object.entries(u).map(([k, v]) => ( +- +- +- +- {k} +- , +- +- +- {v ? linkify(v) : ""} +- +- , +- ]} +- /> +- +- +- ))} +- +- +- )} +- +- ); ++ const [dialogVisible, setDialogVisible] = useState(false); ++ return ( ++ <> ++ ++ {dialogVisible && ( ++ setDialogVisible(false)} ++ actions={[ ++ , ++ ]} ++ > ++ ++ {Object.entries(u).map(([k, v]) => ( ++ ++ ++ ++ {k} ++ , ++ ++ ++ {v ? linkify(v) : ""} ++ ++ , ++ ]} ++ /> ++ ++ ++ ))} ++ ++ ++ )} ++ ++ ); + }; + + const UpdateItem = ({ u }: { u: Update }) => { +- const icon = () => { +- if (u.kind === "package") return ; +- if (u.kind === "patch") return ; +- return ; +- }; +- const updateCells = (u: Update) => { +- // package +- if (u.kind === "package") +- return [ +- +- +- {u.name} +- +- , +- +- +- {u.edition} +- +- , +- +- +- {u["edition-old"]} +- +- , +- ]; +- // patch +- return [ +- +- +- {u.name} +- +- , +- +- {u.summary} +- , +- +- +- +- , +- ]; +- }; +- return ( +- +- +- +- {icon()} +- , +- ...updateCells(u), +- ]} +- /> +- +- +- +- +- +- ); ++ const icon = () => { ++ if (u.kind === "package") return ; ++ if (u.kind === "patch") return ; ++ return ; ++ }; ++ const updateCells = (u: Update) => { ++ // package ++ if (u.kind === "package") ++ return [ ++ ++ ++ {u.name} ++ ++ , ++ ++ ++ {u.edition} ++ ++ , ++ ++ ++ {u["edition-old"]} ++ ++ , ++ ]; ++ // patch ++ return [ ++ ++ ++ {u.name} ++ ++ , ++ ++ {u.summary} ++ , ++ ++ ++ ++ , ++ ]; ++ }; ++ return ( ++ ++ ++ ++ {icon()} ++ , ++ ...updateCells(u), ++ ]} ++ /> ++ ++ ++ ++ ++ ++ ); + }; + + type UpdatesItemProps = { +- updates: Update[]; +- waiting: string | null | boolean; +- setWaiting: (waiting: string | null) => void; +- setError: (error: string | null) => void; +- setDirty: (dirty: boolean) => void; ++ updates: Update[]; ++ waiting: string | null | boolean; ++ setWaiting: (waiting: string | null) => void; ++ setError: (error: string | null) => void; ++ setDirty: (dirty: boolean) => void; + }; + + const UpdatesItem = ({ +- updates, +- setError, +- setDirty, +- setWaiting, +- waiting, ++ updates, ++ setError, ++ setDirty, ++ setWaiting, ++ waiting, + }: UpdatesItemProps) => { +- const [expanded, setExpanded] = useState(false); +- const [menuOpen, setMenuOpen] = useState(false); ++ const [expanded, setExpanded] = useState(false); ++ const [menuOpen, setMenuOpen] = useState(false); + +- const update = async (reboot: boolean) => { +- setWaiting(_("Installing updates...")); +- const proxy = transactionsProxy(); ++ const update = async (reboot: boolean) => { ++ setWaiting(_("Installing updates...")); ++ const proxy = transactionsProxy(); + +- function finishedHandler( +- ev: CustomEvent, +- snapID: string, +- exitcode: number, +- output: string, +- ) { +- console.log("command finished"); +- console.log(`exit ${exitcode}`); +- console.log(`output: ${output}`); +- setWaiting(null); +- setDirty(true); +- // run once (no {once: true} support in cockpit's event_mixin) +- proxy.removeEventListener("CommandExecuted", finishedHandler); +- } ++ function finishedHandler( ++ ev: CustomEvent, ++ snapID: string, ++ exitcode: number, ++ output: string, ++ ) { ++ console.log("command finished"); ++ console.log(`exit ${exitcode}`); ++ console.log(`output: ${output}`); ++ setWaiting(null); ++ setDirty(true); ++ // run once (no {once: true} support in cockpit's event_mixin) ++ proxy.removeEventListener("CommandExecuted", finishedHandler); ++ } + +- function errorHandler( +- ev: CustomEvent, +- snapID: string, +- exitcode: number, +- output: string, +- ) { +- console.log(`exit ${exitcode}`); +- console.log(`output: ${output}`); +- setError( +- cockpit.format( +- _("Error installing updates: command exited with code $0"), +- exitcode, +- ), +- ); +- setWaiting(null); +- // don't reload to not loose the error status +- // setDirty(true); +- // run once (no {once: true} support in cockpit's event_mixin) +- proxy.removeEventListener("Error", errorHandler); +- } ++ function errorHandler( ++ ev: CustomEvent, ++ snapID: string, ++ exitcode: number, ++ output: string, ++ ) { ++ console.log(`exit ${exitcode}`); ++ console.log(`output: ${output}`); ++ setError( ++ cockpit.format( ++ _("Error installing updates: command exited with code $0"), ++ exitcode, ++ ), ++ ); ++ setWaiting(null); ++ // don't reload to not loose the error status ++ // setDirty(true); ++ // run once (no {once: true} support in cockpit's event_mixin) ++ proxy.removeEventListener("Error", errorHandler); ++ } + +- proxy.wait(async () => { +- try { +- // You can find the "CommandExecuted" | "Error" events and `ExecuteAndReboot` function from here: +- // https://github.com/openSUSE/transactional-update/blob/master/dbus/org.opensuse.tukit.Transaction.xml +- proxy.addEventListener("CommandExecuted", finishedHandler); +- proxy.addEventListener("Error", errorHandler); +- const cmd = "zypper --non-interactive up"; +- const rebootMethod = reboot ? "systemd" : "none"; +- // base: default, active or number of base snapshot +- // reboot: auto, rebootmgr, systemd, kured, kexec, none +- const snapID = await proxy.ExecuteAndReboot( +- "default", +- cmd, +- rebootMethod, +- ); +- console.log(`new snapshot: ${snapID}`); +- } catch (_e) { +- const e = _e as Error; +- setWaiting(null); +- // this is "early" error returned directly from method +- setError(e.toString()); +- } +- }); +- }; ++ proxy.wait(async () => { ++ try { ++ // You can find the "CommandExecuted" | "Error" events and `ExecuteAndReboot` function from here: ++ // https://github.com/openSUSE/transactional-update/blob/master/dbus/org.opensuse.tukit.Transaction.xml ++ proxy.addEventListener("CommandExecuted", finishedHandler); ++ proxy.addEventListener("Error", errorHandler); ++ const cmd = "zypper --non-interactive up"; ++ const rebootMethod = reboot ? "systemd" : "none"; ++ // base: default, active or number of base snapshot ++ // reboot: auto, rebootmgr, systemd, kured, kexec, none ++ const snapID = await proxy.ExecuteAndReboot( ++ "default", ++ cmd, ++ rebootMethod, ++ ); ++ console.log(`new snapshot: ${snapID}`); ++ } catch (_e) { ++ const e = _e as Error; ++ setWaiting(null); ++ // this is "early" error returned directly from method ++ setError(e.toString()); ++ } ++ }); ++ }; + +- const updateAndReboot = () => { +- update(true); +- }; +- const updateOnly = () => { +- update(false); +- }; ++ const updateAndReboot = () => { ++ update(true); ++ }; ++ const updateOnly = () => { ++ update(false); ++ }; + +- return ( +- +- +- { +- setExpanded(!expanded); +- }} +- isExpanded={expanded} +- /> +- +- +- , +- +- +- {cockpit.format(_("Available updates ($0)"), updates.length)} +- +- , +- +- +- , +- ]} +- /> +- +- ) => ( +- { +- setMenuOpen(!menuOpen); +- }} +- isExpanded={menuOpen} +- > +- +- +- )} +- popperProps={{ +- position: DropdownPosition.right, +- }} +- > +- +- { +- updateOnly(); +- }} +- > +- {_("Update without Reboot")} +- +- +- +- +- +- +- +- {updates.map((u: Update) => ( +- +- ))} +- +- +- +- ); ++ return ( ++ ++ ++ { ++ setExpanded(!expanded); ++ }} ++ isExpanded={expanded} ++ /> ++ ++ ++ , ++ ++ ++ {cockpit.format(_("Available updates ($0)"), updates.length)} ++ ++ , ++ ++ ++ , ++ ]} ++ /> ++ ++ ) => ( ++ { ++ setMenuOpen(!menuOpen); ++ }} ++ isExpanded={menuOpen} ++ > ++ ++ ++ )} ++ popperProps={{ ++ position: DropdownPosition.right, ++ }} ++ > ++ ++ { ++ updateOnly(); ++ }} ++ > ++ {_("Update without Reboot")} ++ ++ ++ ++ ++ ++ ++ ++ {updates.map((u: Update) => ( ++ ++ ))} ++ ++ ++ ++ ); + }; + + export default UpdatesItem; +diff --git a/src/components/UpdatesPanel.tsx b/src/components/UpdatesPanel.tsx +index 79ed5f1..9654933 100644 +--- a/src/components/UpdatesPanel.tsx ++++ b/src/components/UpdatesPanel.tsx +@@ -22,22 +22,22 @@ import * as timeformat from "timeformat"; + import React, { useState, useEffect } from "react"; + import XMLParser, { type XMLElement } from "react-xml-parser"; + import { +- Button, +- Card, +- CardBody, +- CardTitle, +- Flex, +- FlexItem, +- Text, ++ Button, ++ Card, ++ CardBody, ++ CardTitle, ++ Flex, ++ FlexItem, ++ Text, + } from "@patternfly/react-core"; + import { +- kindPrio, +- categoryPrio, +- severityPrio, +- type KindValues, +- type CategoryValues, +- type SeverityValues, +- type Update, ++ kindPrio, ++ categoryPrio, ++ severityPrio, ++ type KindValues, ++ type CategoryValues, ++ type SeverityValues, ++ type Update, + } from "../update"; + import { decodeHTMLEntities } from "../utils"; + +@@ -45,148 +45,149 @@ const _ = cockpit.gettext; + + // simplify structure of XMLParser return values + const flattenXMLData = (data: XMLElement, prefix = ""): Update => { +- // TODO: safer parsing to make sure we actually have a valid Update object +- const values: any = {}; +- // NOTE: this will make {"": value} for root item +- if (data.value) values[prefix] = data.value; +- if (prefix !== "") prefix = `${prefix}_`; +- for (const key of Object.keys(data.attributes)) { +- values[`${prefix}${key}`] = data.attributes[key]; +- } +- for (const child of data.children) { +- Object.assign(values, flattenXMLData(child, `${prefix}${child.name}`)); +- } +- return values as Update; ++ // TODO: safer parsing to make sure we actually have a valid Update object ++ // eslint-disable-next-line @typescript-eslint/no-explicit-any ++ const values: any = {}; ++ // NOTE: this will make {"": value} for root item ++ if (data.value) values[prefix] = data.value; ++ if (prefix !== "") prefix = `${prefix}_`; ++ for (const key of Object.keys(data.attributes)) { ++ values[`${prefix}${key}`] = data.attributes[key]; ++ } ++ for (const child of data.children) { ++ Object.assign(values, flattenXMLData(child, `${prefix}${child.name}`)); ++ } ++ return values as Update; + }; + + type UpdatesPanelProps = { +- dirty: boolean; +- adminAccess: boolean; +- waiting: string | null; +- setUpdates: (updates: Update[]) => void; +- setError: (error: string | null) => void; +- setWaiting: (waiting: string | null) => void; +- setDirty: (dirty: boolean) => void; ++ dirty: boolean; ++ adminAccess: boolean; ++ waiting: string | null; ++ setUpdates: (updates: Update[]) => void; ++ setError: (error: string | null) => void; ++ setWaiting: (waiting: string | null) => void; ++ setDirty: (dirty: boolean) => void; + }; + + const UpdatesPanel = ({ +- adminAccess, +- setUpdates, +- setError, +- dirty, +- setDirty, +- waiting, +- setWaiting, ++ adminAccess, ++ setUpdates, ++ setError, ++ dirty, ++ setDirty, ++ waiting, ++ setWaiting, + }: UpdatesPanelProps) => { +- const [lastCheck, setLastCheck] = useState(); ++ const [lastCheck, setLastCheck] = useState(); + +- const getUpdates = async (arg: string) => { +- const cmd = ["zypper", "-q", "--xmlout", arg]; +- let out: string = await cockpit.spawn(cmd, { +- superuser: "require", +- err: "message", // TODO: check if it works as expected +- }); +- // convert line breaks in descriptions to not loose them during +- // xml parsing +- out = out.replaceAll(/[^<]+<\/description>/g, (d) => +- d +- // only keep newlines followed by space (indent) or bullet char +- .replaceAll(/\n([-* ])/g, (_, fc) => ` ${fc}`) +- // escape percentage sign to avoid URI decoding problems in XMLParser +- .replaceAll(/%/g, "%25"), +- ); +- const xml = new XMLParser().parseFromString(out); +- return xml +- .getElementsByTagName("update") +- .map((e) => flattenXMLData(e)) +- .map((u) => { +- return { +- ...u, +- description: decodeHTMLEntities(u.description), +- }; +- }); +- }; +- const updateKey = ( +- u: Update, +- ): [KindValues, CategoryValues, SeverityValues, string] => { +- return [ +- kindPrio[u.kind], +- categoryPrio[u.category], +- severityPrio[u.severity], +- u.name, +- ]; +- }; +- const updateCmp = (a: Update, b: Update) => { +- const ak = updateKey(a); +- const bk = updateKey(b); +- if (ak > bk) return 1; +- if (ak < bk) return -1; +- return 0; +- }; +- const checkUpdates = async () => { +- if (!dirty) { +- return; +- } +- setDirty(false); ++ const getUpdates = async (arg: string) => { ++ const cmd = ["zypper", "-q", "--xmlout", arg]; ++ let out: string = await cockpit.spawn(cmd, { ++ superuser: "require", ++ err: "message", // TODO: check if it works as expected ++ }); ++ // convert line breaks in descriptions to not loose them during ++ // xml parsing ++ out = out.replaceAll(/[^<]+<\/description>/g, (d) => ++ d ++ // only keep newlines followed by space (indent) or bullet char ++ .replaceAll(/\n([-* ])/g, (_, fc) => ` ${fc}`) ++ // escape percentage sign to avoid URI decoding problems in XMLParser ++ .replaceAll(/%/g, "%25"), ++ ); ++ const xml = new XMLParser().parseFromString(out); ++ return xml ++ .getElementsByTagName("update") ++ .map((e) => flattenXMLData(e)) ++ .map((u) => { ++ return { ++ ...u, ++ description: decodeHTMLEntities(u.description), ++ }; ++ }); ++ }; ++ const updateKey = ( ++ u: Update, ++ ): [KindValues, CategoryValues, SeverityValues, string] => { ++ return [ ++ kindPrio[u.kind], ++ categoryPrio[u.category], ++ severityPrio[u.severity], ++ u.name, ++ ]; ++ }; ++ const updateCmp = (a: Update, b: Update) => { ++ const ak = updateKey(a); ++ const bk = updateKey(b); ++ if (ak > bk) return 1; ++ if (ak < bk) return -1; ++ return 0; ++ }; ++ const checkUpdates = async () => { ++ if (!dirty) { ++ return; ++ } ++ setDirty(false); + +- setError(null); +- setWaiting(_("Checking for updates...")); +- try { +- const refcmd = ["zypper", "ref"]; +- await cockpit.spawn(refcmd, { superuser: true, err: "message" }); +- const updates = Array.prototype.concat( +- await getUpdates("list-updates"), +- await getUpdates("list-patches"), +- ); +- updates.sort(updateCmp); +- setUpdates(updates); +- setLastCheck(new Date()); +- } catch (_e) { +- const e: Error = _e as Error; +- setError( +- cockpit.format(_("Error checking for updates: $0"), e.toString()), +- ); +- } +- setWaiting(null); +- }; ++ setError(null); ++ setWaiting(_("Checking for updates...")); ++ try { ++ const refcmd = ["zypper", "ref"]; ++ await cockpit.spawn(refcmd, { superuser: true, err: "message" }); ++ const updates = Array.prototype.concat( ++ await getUpdates("list-updates"), ++ await getUpdates("list-patches"), ++ ); ++ updates.sort(updateCmp); ++ setUpdates(updates); ++ setLastCheck(new Date()); ++ } catch (_e) { ++ const e: Error = _e as Error; ++ setError( ++ cockpit.format(_("Error checking for updates: $0"), e.toString()), ++ ); ++ } ++ setWaiting(null); ++ }; + +- useEffect(() => { +- // auto-check updates on initial load +- checkUpdates(); +- // TODO: FIX! +- // eslint-disable-next-line react-hooks/exhaustive-deps +- }, [dirty]); +- return ( +- +- {_("Updates")} +- +- +- +- {lastCheck && ( +- +- {cockpit.format( +- _("Last Checked: $0"), +- timeformat.dateTime(lastCheck), +- )} +- +- )} +- +- +- +- +- +- +- +- ); ++ useEffect(() => { ++ // auto-check updates on initial load ++ checkUpdates(); ++ // TODO: FIX! ++ // eslint-disable-next-line react-hooks/exhaustive-deps ++ }, [dirty]); ++ return ( ++ ++ {_("Updates")} ++ ++ ++ ++ {lastCheck && ( ++ ++ {cockpit.format( ++ _("Last Checked: $0"), ++ timeformat.dateTime(lastCheck), ++ )} ++ ++ )} ++ ++ ++ ++ ++ ++ ++ ++ ); + }; + + export default UpdatesPanel; +diff --git a/src/index.ts b/src/index.ts +index f8955b1..af745ed 100644 +--- a/src/index.ts ++++ b/src/index.ts +@@ -15,7 +15,7 @@ + * along with Cockpit; If not, see . + */ + +-import "../pkg/lib/patternfly/patternfly-5-cockpit.scss"; ++import "patternfly/patternfly-5-cockpit.scss"; + + import React from "react"; + import { createRoot } from "react-dom/client"; +@@ -28,15 +28,15 @@ import Application from "./app"; + * out of the dist/index.js and since it will maintain the order of the imported CSS, + * the overrides will be correctly in the end of our stylesheet. + */ +-import "../pkg/lib/patternfly/patternfly-5-overrides.scss"; ++import "patternfly/patternfly-5-overrides.scss"; + import "./app.scss"; + /* + console.log(foo("foo")) + */ + document.addEventListener("DOMContentLoaded", () => { +- const container = document.getElementById("app"); +- if (container) { +- const root = createRoot(container); +- root.render(React.createElement(Application, {})); +- } ++ const container = document.getElementById("app"); ++ if (container) { ++ const root = createRoot(container); ++ root.render(React.createElement(Application, {})); ++ } + }); +diff --git a/src/manifest.json b/src/manifest.json +index 9857830..522ba2b 100644 +--- a/src/manifest.json ++++ b/src/manifest.json +@@ -1,18 +1,18 @@ + { +- "name": "updates", +- "requires": { +- "cockpit": "251" +- }, +- "tools": { +- "index": { +- "label": "Software Updates", +- "docs": [ +- { +- "label": "Transactional Update", +- "url": "https://documentation.suse.com/sle-micro/html/SLE-Micro-all/article-administration-slemicro.html#sec-transactional-udate" +- } +- ] +- } +- }, +- "preload": ["index"] ++ "name": "updates", ++ "requires": { ++ "cockpit": "251" ++ }, ++ "tools": { ++ "index": { ++ "label": "Software Updates", ++ "docs": [ ++ { ++ "label": "Transactional Update", ++ "url": "https://documentation.suse.com/sle-micro/html/SLE-Micro-all/article-administration-slemicro.html#sec-transactional-udate" ++ } ++ ] ++ } ++ }, ++ "preload": ["index"] + } +diff --git a/src/status.ts b/src/status.ts +index eb9486c..316daa9 100644 +--- a/src/status.ts ++++ b/src/status.ts +@@ -19,26 +19,26 @@ + */ + + const statusSeverity = { +- "": -1, +- info: 0, +- warning: 1, +- error: 2, ++ "": -1, ++ info: 0, ++ warning: 1, ++ error: 2, + } as const; + + type StatusSeverity = keyof typeof statusSeverity; + + export type Status = { +- key: "wait" | "updates" | "updates-error" | "new-snapshot" | "system-ok"; +- title: string | null | boolean; +- type: StatusSeverity; +- details?: { icon: string }; ++ key: "wait" | "updates" | "updates-error" | "new-snapshot" | "system-ok"; ++ title: string | null | boolean; ++ type: StatusSeverity; ++ details?: { icon: string }; + }; + + export const mostSevereStatus = (statuses: Status[]): Status | null => { +- if (statuses.length === 0) return null; +- let ret = statuses[0]; +- for (const status of statuses) { +- if (statusSeverity[status.type] > statusSeverity[ret.type]) ret = status; +- } +- return ret; ++ if (statuses.length === 0) return null; ++ let ret = statuses[0]; ++ for (const status of statuses) { ++ if (statusSeverity[status.type] > statusSeverity[ret.type]) ret = status; ++ } ++ return ret; + }; +diff --git a/src/tukit.ts b/src/tukit.ts +index 4aab7b2..c5a1e8f 100644 +--- a/src/tukit.ts ++++ b/src/tukit.ts +@@ -24,146 +24,146 @@ import { stringToBool } from "./utils"; + + let _dbusClient: DbusClient; + const dbusClient = (): DbusClient => { +- if (!_dbusClient) { +- _dbusClient = cockpit.dbus("org.opensuse.tukit", { +- bus: "system", +- superuser: "try", +- }); +- } +- return _dbusClient; ++ if (!_dbusClient) { ++ _dbusClient = cockpit.dbus("org.opensuse.tukit", { ++ bus: "system", ++ superuser: "try", ++ }); ++ } ++ return _dbusClient; + }; + + type SnapshotRecordKeys = T extends `${infer K},${infer Rest}` +- ? K | SnapshotRecordKeys +- : T extends `${infer K}` +- ? K +- : never; ++ ? K | SnapshotRecordKeys ++ : T extends `${infer K}` ++ ? K ++ : never; + + export type SnapshotRecord = { +- [k in SnapshotRecordKeys]: string; ++ [k in SnapshotRecordKeys]: string; + }; + + type SnapshotMethods = { +- List: (args: T) => SnapshotRecord[]; ++ List: (args: T) => SnapshotRecord[]; + }; + + let _snapshotProxy: Proxy; + const snapshotsProxy = () => { +- if (!_snapshotProxy) { +- _snapshotProxy = dbusClient().proxy( +- "org.opensuse.tukit.Snapshot", +- "/org/opensuse/tukit/Snapshot", +- ); +- } +- return _snapshotProxy; ++ if (!_snapshotProxy) { ++ _snapshotProxy = dbusClient().proxy( ++ "org.opensuse.tukit.Snapshot", ++ "/org/opensuse/tukit/Snapshot", ++ ); ++ } ++ return _snapshotProxy; + }; + + type SnapIn = { +- number: string; +- default: string; +- active: string; +- date: string; +- description: string; ++ number: string; ++ default: string; ++ active: string; ++ date: string; ++ description: string; + }; + + export type Snapshot = { +- number: number; +- default: boolean; +- active: boolean; +- date: Date; +- description: string; +- old?: boolean; ++ number: number; ++ default: boolean; ++ active: boolean; ++ date: Date; ++ description: string; ++ old?: boolean; + }; + + const createSnapshot = (snap: SnapIn): Snapshot => { +- if (Array.isArray(snap)) { +- const [number, dflt, active, date, description] = snap; +- return { +- number: Number.parseInt(number), +- default: stringToBool(dflt), +- active: stringToBool(active), +- date: new Date(`${date}Z`), // dates are UTC but have no marking +- description, +- }; +- } +- return { +- number: Number.parseInt(snap.number), +- default: stringToBool(snap.default), +- active: stringToBool(snap.active), +- date: new Date(`${snap.date}Z`), // dates are UTC but have no marking +- description: snap.description, +- }; ++ if (Array.isArray(snap)) { ++ const [number, dflt, active, date, description] = snap; ++ return { ++ number: Number.parseInt(number), ++ default: stringToBool(dflt), ++ active: stringToBool(active), ++ date: new Date(`${date}Z`), // dates are UTC but have no marking ++ description, ++ }; ++ } ++ return { ++ number: Number.parseInt(snap.number), ++ default: stringToBool(snap.default), ++ active: stringToBool(snap.active), ++ date: new Date(`${snap.date}Z`), // dates are UTC but have no marking ++ description: snap.description, ++ }; + }; + + type TransactionEvent = "TransactionOpened" | "CommandExecuted" | "Error"; + + type TransactionEventCallback = +- T extends "TransactionOpened" +- ? (event: CustomEvent, snapshot: string) => void +- : T extends "Error" +- ? ( +- event: CustomEvent, +- snapshot: string, +- returncode: number, +- output: string, +- ) => void +- : T extends "CommandExecuted" +- ? ( +- event: CustomEvent, +- snapshot: string, +- returncode: number, +- output: string, +- ) => void +- : never; ++ T extends "TransactionOpened" ++ ? (event: CustomEvent, snapshot: string) => void ++ : T extends "Error" ++ ? ( ++ event: CustomEvent, ++ snapshot: string, ++ returncode: number, ++ output: string, ++ ) => void ++ : T extends "CommandExecuted" ++ ? ( ++ event: CustomEvent, ++ snapshot: string, ++ returncode: number, ++ output: string, ++ ) => void ++ : never; + + // https://kubic.opensuse.org/documentation/man-pages/transactional-update.conf.5.html#REBOOT_METHOD + type TransactionReboot = +- | "auto" +- | "cured" +- | "rebootmgr" +- | "systemd" +- | "kexec" +- | "notify" +- | "none"; ++ | "auto" ++ | "cured" ++ | "rebootmgr" ++ | "systemd" ++ | "kexec" ++ | "notify" ++ | "none"; + type TransactionsMethods = { +- addEventListener: ( +- event: T, +- callback: TransactionEventCallback, +- ) => void; +- removeEventListener: ( +- event: T, +- callback: TransactionEventCallback, +- ) => void; +- ExecuteAndReboot: ( +- base: "default" | "base" | string, +- command: string, +- rebootmethod: TransactionReboot, +- ) => Promise; ++ addEventListener: ( ++ event: T, ++ callback: TransactionEventCallback, ++ ) => void; ++ removeEventListener: ( ++ event: T, ++ callback: TransactionEventCallback, ++ ) => void; ++ ExecuteAndReboot: ( ++ base: "default" | "base" | string, ++ command: string, ++ rebootmethod: TransactionReboot, ++ ) => Promise; + }; + + let _transactionsProxy: Proxy; + const transactionsProxy = () => { +- if (!_transactionsProxy) { +- _transactionsProxy = dbusClient().proxy( +- "org.opensuse.tukit.Transaction", +- "/org/opensuse/tukit/Transaction", +- ); +- } +- return _transactionsProxy; ++ if (!_transactionsProxy) { ++ _transactionsProxy = dbusClient().proxy( ++ "org.opensuse.tukit.Transaction", ++ "/org/opensuse/tukit/Transaction", ++ ); ++ } ++ return _transactionsProxy; + }; + + let _tukitdProxy: ServiceProxy; + const tukitdProxy = () => { +- if (!_tukitdProxy) { +- _tukitdProxy = serviceProxy("tukitd"); +- } +- return _tukitdProxy; ++ if (!_tukitdProxy) { ++ _tukitdProxy = serviceProxy("tukitd"); ++ } ++ return _tukitdProxy; + }; + + export { +- dbusClient, +- snapshotsProxy, +- createSnapshot, +- transactionsProxy, +- tukitdProxy, ++ dbusClient, ++ snapshotsProxy, ++ createSnapshot, ++ transactionsProxy, ++ tukitdProxy, + }; +diff --git a/src/update.tsx b/src/update.tsx +index 8ee8ebf..d43cc82 100644 +--- a/src/update.tsx ++++ b/src/update.tsx +@@ -20,9 +20,9 @@ + + import React from "react"; + import { +- ExclamationCircleIcon, +- ExclamationTriangleIcon, +- InfoCircleIcon, ++ ExclamationCircleIcon, ++ ExclamationTriangleIcon, ++ InfoCircleIcon, + } from "@patternfly/react-icons"; + + type ConstValues = T[keyof T]; +@@ -31,9 +31,9 @@ export const kindPrio = { patch: 0, package: 1 } as const; + export type KindKeys = keyof typeof kindPrio; + export type KindValues = ConstValues; + export const categoryPrio = { +- security: 0, +- recommended: 1, +- feature: 2, ++ security: 0, ++ recommended: 1, ++ feature: 2, + } as const; + export type CategoryKeys = keyof typeof categoryPrio; + export type CategoryValues = ConstValues; +@@ -42,14 +42,14 @@ export type SeverityKeys = keyof typeof severityPrio; + export type SeverityValues = ConstValues; + + export type Update = { +- kind: KindKeys; +- category: CategoryKeys; +- severity: SeverityKeys; +- name: string; +- description: string | null; +- edition: string; +- "edition-old": string; +- summary: string; ++ kind: KindKeys; ++ category: CategoryKeys; ++ severity: SeverityKeys; ++ name: string; ++ description: string | null; ++ edition: string; ++ "edition-old": string; ++ summary: string; + }; + + const prioLabelColor = { 0: "red", 1: "blue", 2: "auto" } as const; +@@ -61,23 +61,23 @@ type Undefined = T extends E ? undefined : T; + type FAKE_LABEL_TYPE2 = Undefined; + + const prioIcon = { +- 0: , +- 1: , +- 2: , ++ 0: , ++ 1: , ++ 2: , + } as const; + + // remove _disabled to enable props + const prioProps = (p: keyof typeof prioLabelColor) => { +- return { +- color: prioLabelColor[p] as unknown as FAKE_LABEL_TYPE2< +- typeof prioLabelColor +- >, +- icon_disabled: prioIcon[p], +- variant: "outline" as const, +- }; ++ return { ++ color: prioLabelColor[p] as unknown as FAKE_LABEL_TYPE2< ++ typeof prioLabelColor ++ >, ++ icon_disabled: prioIcon[p], ++ variant: "outline" as const, ++ }; + }; + + export const categoryProps = (u: { category: CategoryKeys }) => +- prioProps(categoryPrio[u.category]); ++ prioProps(categoryPrio[u.category]); + export const severityProps = (u: { severity: SeverityKeys }) => +- prioProps(severityPrio[u.severity]); ++ prioProps(severityPrio[u.severity]); +diff --git a/src/utils.tsx b/src/utils.tsx +index b879d03..d9eb242 100644 +--- a/src/utils.tsx ++++ b/src/utils.tsx +@@ -20,43 +20,43 @@ + import React, { type Key } from "react"; + + export const stringToBool = (s: string) => { +- return ["yes", "true", "1"].includes(s.toLowerCase()); ++ return ["yes", "true", "1"].includes(s.toLowerCase()); + }; + + // decode selected named html entities found in zypper's xml output and generic + // numeric ones. + // see: https://github.com/openSUSE/libzypp/blob/master/zypp-core/parser/xml/XmlEscape.cc + export const decodeHTMLEntities = (s: string | null): string | null => { +- if (!s) return null; ++ if (!s) return null; + +- const entities = { lt: "<", gt: ">", amp: "&", apos: "'", quot: '"' }; +- return s +- .replaceAll(/&#(\d+);/g, (_, num) => String.fromCharCode(num)) +- .replaceAll( +- /&([a-z]+);/g, +- (m, e: keyof typeof entities) => entities[e] || m, +- ); ++ const entities = { lt: "<", gt: ">", amp: "&", apos: "'", quot: '"' }; ++ return s ++ .replaceAll(/&#(\d+);/g, (_, num) => String.fromCharCode(num)) ++ .replaceAll( ++ /&([a-z]+);/g, ++ (m, e: keyof typeof entities) => entities[e] || m, ++ ); + }; + + const tagURLPrefix = { +- bsc: "https://bugzilla.suse.com/show_bug.cgi?id=", +- boo: "https://bugzilla.opensuse.org/show_bug.cgi?id=", ++ bsc: "https://bugzilla.suse.com/show_bug.cgi?id=", ++ boo: "https://bugzilla.opensuse.org/show_bug.cgi?id=", + }; + // convert tagged items found in text to clickable links + export const linkify = (s: string) => { +- const parts = s.split(/((?:bsc|boo)#\d+)/); +- return parts.map((p) => { +- const m = p.match(/(bsc|boo)#(\d+)/); +- if (m === null) return p; +- return ( +- +- {m[0]} +- +- ); +- }); ++ const parts = s.split(/((?:bsc|boo)#\d+)/); ++ return parts.map((p) => { ++ const m = p.match(/(bsc|boo)#(\d+)/); ++ if (m === null) return p; ++ return ( ++ ++ {m[0]} ++ ++ ); ++ }); + }; +diff --git a/tsconfig.json b/tsconfig.json +index eb645a3..59efb8d 100644 +--- a/tsconfig.json ++++ b/tsconfig.json +@@ -1,24 +1,24 @@ + { +- "compilerOptions": { +- "target": "es6", +- "module": "es6", +- "strict": true, +- "importHelpers": true, +- "moduleResolution": "node", +- "experimentalDecorators": true, +- "esModuleInterop": true, +- "allowSyntheticDefaultImports": true, +- "sourceMap": true, +- "skipLibCheck": true, +- "baseUrl": ".", +- "jsx": "react", +- "allowJs": true, +- "paths": { +- "@/*": ["src/*"], +- "*": ["types/*"] +- }, +- "lib": ["dom", "dom.iterable", "ES2021.String", "ES2021"] +- }, +- "include": ["src/*.ts", "src/*.tsx", "src/**/*.ts", "src/**/*.tsx"], +- "exclude": ["node_modules", "types"] ++ "compilerOptions": { ++ "target": "es6", ++ "module": "es6", ++ "strict": true, ++ "importHelpers": true, ++ "moduleResolution": "node", ++ "experimentalDecorators": true, ++ "esModuleInterop": true, ++ "allowSyntheticDefaultImports": true, ++ "sourceMap": true, ++ "skipLibCheck": true, ++ "baseUrl": ".", ++ "jsx": "react", ++ "allowJs": true, ++ "paths": { ++ "@/*": ["src/*"], ++ "*": ["types/*"] ++ }, ++ "lib": ["dom", "dom.iterable", "ES2021.String", "ES2021"] ++ }, ++ "include": ["src/*.ts", "src/*.tsx", "src/**/*.ts", "src/**/*.tsx"], ++ "exclude": ["node_modules", "types"] + } +diff --git a/types/cockpit.d.ts b/types/cockpit.d.ts +index c497028..1c8e98c 100644 +--- a/types/cockpit.d.ts ++++ b/types/cockpit.d.ts +@@ -1,112 +1,112 @@ + // https://github.com/cockpit-project/cockpit/pull/13214 + + declare module "cockpit" { +- type Func1 = (arg: T) => R; +- +- type DbusOptions = { +- bus: "session" | "user" | "system" | "none"; +- address?: string; +- superuser?: "require" | "try"; +- track?: boolean; +- }; +- +- type Fail = { +- message: string; +- problem?: string; +- }; +- +- type SpawnFail = Fail & { +- exit_status?: number; +- exit_signal?: number; +- }; +- +- type ErrorConfig = "message" | "out" | "ignore" | "pty"; +- +- /** +- * https://github.com/cockpit-project/cockpit/blob/main/src/bridge/cockpitrouter.c#L615-L621 +- * @deprecated boolean is tecnically valid but it's not well documented +- */ +- type SuperUserBool = boolean; +- type Superuser = "require" | "try" | SuperUserBool; +- type ProblemCodes = +- | "access-denied" +- | "authentication-failed" +- | "internal-error" +- | "no-cockpit" +- | "no-session" +- | "not-found" +- | "terminated" +- | "timeout" +- | "unknown-hostkey" +- | "no-forwarding"; +- +- type SpawnConfig = { +- err?: ErrorConfig; +- binary?: boolean; +- directory?: string; +- host?: string; +- environ?: string[]; +- pty?: boolean; +- batch?: boolean; +- latency?: number; +- superuser?: Superuser; +- }; +- +- type ProxyMethods any>> = { +- [k in keyof T]: T[k]; +- }; +- +- type Proxy any> = {}> = +- ProxyMethods & { +- client: DbusClient; +- path: string; +- iface: string; +- valid: boolean; +- data: Object; +- wait: (callback: () => void) => Promise; +- }; +- +- type DbusEvent = "close" | "owner"; +- +- type DBusEventCallback = T extends "close" +- ? (event: CustomEvent, options: { problem?: string }) => void +- : T extends "owner" +- ? (event: CustomEvent, owner?: string | null) => void +- : never; +- +- interface DbusClient { +- wait: (callback: () => void) => Promise; +- close(problem?: string): void; +- proxy any> = {}>( +- interface?: string, +- path?: string, +- ): Proxy; +- proxies(interface?: string[], path?: string[]): Proxy[]; +- addEventListener( +- event: T, +- callback: DBusEventCallback, +- ): void; +- options: DbusOptions; +- unique_name: string; +- } +- +- interface ClosableWithProblem { +- close(problem?: ProblemCodes): void; +- } +- +- interface SpawnPromise extends Promise, ClosableWithProblem { +- stream(callback: Func1): SpawnPromise; +- input(data?: string | Uint8Array, stream?: boolean): SpawnPromise; +- } +- +- function gettext(text: string): string; +- function gettext(context: string, text: string): string; +- function format(template: string, args: string | Object): string; +- function format(template: string, ...args: string[] | Object[]): string; +- function dbus(name: string, options?: DbusOptions): DbusClient; +- function jump(todo: string, host?: string | null): void; +- function script(execute: string, args: SpawnConfig): SpawnPromise; +- function spawn(args: string | string[], options?: SpawnConfig): SpawnPromise; +- +- const transport: { host?: string | null }; ++ type Func1 = (arg: T) => R; ++ ++ type DbusOptions = { ++ bus: "session" | "user" | "system" | "none"; ++ address?: string; ++ superuser?: "require" | "try"; ++ track?: boolean; ++ }; ++ ++ type Fail = { ++ message: string; ++ problem?: string; ++ }; ++ ++ type SpawnFail = Fail & { ++ exit_status?: number; ++ exit_signal?: number; ++ }; ++ ++ type ErrorConfig = "message" | "out" | "ignore" | "pty"; ++ ++ /** ++ * https://github.com/cockpit-project/cockpit/blob/main/src/bridge/cockpitrouter.c#L615-L621 ++ * @deprecated boolean is tecnically valid but it's not well documented ++ */ ++ type SuperUserBool = boolean; ++ type Superuser = "require" | "try" | SuperUserBool; ++ type ProblemCodes = ++ | "access-denied" ++ | "authentication-failed" ++ | "internal-error" ++ | "no-cockpit" ++ | "no-session" ++ | "not-found" ++ | "terminated" ++ | "timeout" ++ | "unknown-hostkey" ++ | "no-forwarding"; ++ ++ type SpawnConfig = { ++ err?: ErrorConfig; ++ binary?: boolean; ++ directory?: string; ++ host?: string; ++ environ?: string[]; ++ pty?: boolean; ++ batch?: boolean; ++ latency?: number; ++ superuser?: Superuser; ++ }; ++ ++ type ProxyMethods any>> = { ++ [k in keyof T]: T[k]; ++ }; ++ ++ type Proxy any> = {}> = ++ ProxyMethods & { ++ client: DbusClient; ++ path: string; ++ iface: string; ++ valid: boolean; ++ data: Object; ++ wait: (callback: () => void) => Promise; ++ }; ++ ++ type DbusEvent = "close" | "owner"; ++ ++ type DBusEventCallback = T extends "close" ++ ? (event: CustomEvent, options: { problem?: string }) => void ++ : T extends "owner" ++ ? (event: CustomEvent, owner?: string | null) => void ++ : never; ++ ++ interface DbusClient { ++ wait: (callback: () => void) => Promise; ++ close(problem?: string): void; ++ proxy any> = {}>( ++ interface?: string, ++ path?: string, ++ ): Proxy; ++ proxies(interface?: string[], path?: string[]): Proxy[]; ++ addEventListener( ++ event: T, ++ callback: DBusEventCallback, ++ ): void; ++ options: DbusOptions; ++ unique_name: string; ++ } ++ ++ interface ClosableWithProblem { ++ close(problem?: ProblemCodes): void; ++ } ++ ++ interface SpawnPromise extends Promise, ClosableWithProblem { ++ stream(callback: Func1): SpawnPromise; ++ input(data?: string | Uint8Array, stream?: boolean): SpawnPromise; ++ } ++ ++ function gettext(text: string): string; ++ function gettext(context: string, text: string): string; ++ function format(template: string, args: string | Object): string; ++ function format(template: string, ...args: string[] | Object[]): string; ++ function dbus(name: string, options?: DbusOptions): DbusClient; ++ function jump(todo: string, host?: string | null): void; ++ function script(execute: string, args: SpawnConfig): SpawnPromise; ++ function spawn(args: string | string[], options?: SpawnConfig): SpawnPromise; ++ ++ const transport: { host?: string | null }; + } +diff --git a/types/hooks.d.ts b/types/hooks.d.ts +index a656971..b38d4f7 100644 +--- a/types/hooks.d.ts ++++ b/types/hooks.d.ts +@@ -1,5 +1,5 @@ + import type { Superuser } from "superuser"; + + declare module "hooks" { +- function useEvent(obj: Superuser, event: "changed"): void; ++ function useEvent(obj: Superuser, event: "changed"): void; + } +diff --git a/types/notifications.d.ts b/types/notifications.d.ts +index fe2b558..8bc69a8 100644 +--- a/types/notifications.d.ts ++++ b/types/notifications.d.ts +@@ -2,11 +2,11 @@ + import type { Status } from "@/status"; + + declare module "notifications" { +- class PageStatus { +- constructor(); +- get(page: string, host: string): string | null; +- set_own(status: Status | null): void; +- } ++ class PageStatus { ++ constructor(); ++ get(page: string, host: string): string | null; ++ set_own(status: Status | null): void; ++ } + +- const page_status: PageStatus; ++ const page_status: PageStatus; + } +diff --git a/types/react-xml-parser.d.ts b/types/react-xml-parser.d.ts +index 8fd59ab..b502cc3 100644 +--- a/types/react-xml-parser.d.ts ++++ b/types/react-xml-parser.d.ts +@@ -1,19 +1,19 @@ + // Copied and modified from https://github.com/matanshiloah/xml-parser/pull/42 + + declare module "react-xml-parser" { +- interface XMLElement { +- name: string; +- attributes: { +- [name: string]: string; +- }; +- value: string; +- children: XMLElement[]; +- } ++ interface XMLElement { ++ name: string; ++ attributes: { ++ [name: string]: string; ++ }; ++ value: string; ++ children: XMLElement[]; ++ } + +- export default class XMLParser { +- constructor(); +- public parseFromString(string: string): XMLParser; +- public toString(xml: XMLElement): string; +- public getElementsByTagName(tagName: string): XMLElement[]; +- } ++ export default class XMLParser { ++ constructor(); ++ public parseFromString(string: string): XMLParser; ++ public toString(xml: XMLElement): string; ++ public getElementsByTagName(tagName: string): XMLElement[]; ++ } + } +diff --git a/types/service.d.ts b/types/service.d.ts +index f3a2975..88b452e 100644 +--- a/types/service.d.ts ++++ b/types/service.d.ts +@@ -1,18 +1,18 @@ + declare module "service" { +- type ServiceProxy = { +- exists: boolean | null; +- state: +- | "starting" +- | "running" +- | "stopping" +- | "stopped" +- | "failed" +- | null +- | undefined; +- enabled: boolean | null | undefined; +- wait: (callback: () => void) => Promise; ++ type ServiceProxy = { ++ exists: boolean | null; ++ state: ++ | "starting" ++ | "running" ++ | "stopping" ++ | "stopped" ++ | "failed" ++ | null ++ | undefined; ++ enabled: boolean | null | undefined; ++ wait: (callback: () => void) => Promise; + +- /* ++ /* + start: start, + stop: stop, + restart: restart, +@@ -22,7 +22,7 @@ declare module "service" { + disable: disable, + + getRunJournal: getRunJournal, */ +- }; ++ }; + +- function proxy(name: string, kind?: string): ServiceProxy; ++ function proxy(name: string, kind?: string): ServiceProxy; + } +diff --git a/types/superuser.d.ts b/types/superuser.d.ts +index ff13f07..a31dfa6 100644 +--- a/types/superuser.d.ts ++++ b/types/superuser.d.ts +@@ -1,8 +1,8 @@ + declare module "superuser" { +- type Superuser = { +- allowed: boolean | null; +- reload_page_on_change(): void; +- }; ++ type Superuser = { ++ allowed: boolean | null; ++ reload_page_on_change(): void; ++ }; + +- const superuser: Superuser; ++ const superuser: Superuser; + } +diff --git a/types/timeformat.d.ts b/types/timeformat.d.ts +index 9f0a6d4..b0fb400 100644 +--- a/types/timeformat.d.ts ++++ b/types/timeformat.d.ts +@@ -1,14 +1,14 @@ + declare module "timeformat" { +- function dateFormatLang(): string; +- function formatter(options?: Intl.DateTimeFormatOptions | undefined): string; +- function time(t: Date | number): string; +- function timeSeconds(t: Date | number): string; +- function date(t: Date | number): string; +- function dateShort(t: Date | number): string; +- function dateTime(t: Date | number): string; +- function dateTimeSeconds(t: Date | number): string; +- function dateTimeNoYear(t: Date | number): string; +- function weekdayDate(t: Date | number): string; +- function dateShortFormat(): string; +- function distanceToNow(t: Date | number, addSuffix?: boolean): string; ++ function dateFormatLang(): string; ++ function formatter(options?: Intl.DateTimeFormatOptions | undefined): string; ++ function time(t: Date | number): string; ++ function timeSeconds(t: Date | number): string; ++ function date(t: Date | number): string; ++ function dateShort(t: Date | number): string; ++ function dateTime(t: Date | number): string; ++ function dateTimeSeconds(t: Date | number): string; ++ function dateTimeNoYear(t: Date | number): string; ++ function weekdayDate(t: Date | number): string; ++ function dateShortFormat(): string; ++ function distanceToNow(t: Date | number, addSuffix?: boolean): string; + } +diff --git a/webpack.config.js b/webpack.config.js +deleted file mode 100644 +index 8831788..0000000 +--- a/webpack.config.js ++++ /dev/null +@@ -1,154 +0,0 @@ +-const fs = require("node:fs"); +-const path = require("node:path"); +- +-const copy = require("copy-webpack-plugin"); +-const extract = require("mini-css-extract-plugin"); +-const TerserJSPlugin = require("terser-webpack-plugin"); +-const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); +-const CompressionPlugin = require("compression-webpack-plugin"); +-const CockpitPoPlugin = require("./src/lib/cockpit-po-plugin"); +-const CockpitRsyncPlugin = require("./src/lib/cockpit-rsync-plugin"); +- +-/* A standard nodejs and webpack pattern */ +-const production = process.env.NODE_ENV === "production"; +- +-// Obtain package name from package.json +-const packageJson = JSON.parse(fs.readFileSync("package.json")); +- +-// Non-JS files which are copied verbatim to dist/ +-const copy_files = ["./src/index.html", "./src/manifest.json"]; +- +-const plugins = [ +- new copy({ patterns: copy_files }), +- new extract({ filename: "[name].css" }), +- +- new CockpitPoPlugin(), +- new CockpitRsyncPlugin({ dest: packageJson.name }), +-]; +- +-/* Only minimize when in production mode */ +-if (production) { +- plugins.unshift( +- new CompressionPlugin({ +- test: /\.(js|html|css)$/, +- deleteOriginalAssets: true, +- }), +- ); +-} +- +-module.exports = { +- mode: production ? "production" : "development", +- resolve: { +- // extensions:['.ts','.tsx'], +- extensions: ["*", ".js", ".jsx", ".tsx", ".ts"], +- modules: ["node_modules", path.resolve(__dirname, "src/lib")], +- alias: { "font-awesome": "font-awesome-sass/assets/stylesheets" }, +- }, +- resolveLoader: { +- modules: ["node_modules", path.resolve(__dirname, "src/lib")], +- }, +- watchOptions: { +- ignored: /node_modules/, +- }, +- entry: { +- index: "./src/index.ts", +- }, +- // cockpit.js gets included via