From fd6e959987c5d18630a71aaf47e5a0aac957e9e7 Mon Sep 17 00:00:00 2001 From: Wai-Yin Kwan Date: Tue, 28 May 2024 14:14:25 -0700 Subject: [PATCH] Add `Viewer` plugin support (#183) --- .gitignore | 4 + .husky/pre-commit | 2 +- build/build.mjs | 9 +- build/root.mjs | 12 +- build/root.umd.js | 2 + docs/components/DynamicImports/Viewer.tsx | 4 + package-lock.json | 2493 ++++++++++++----- package.json | 5 + pages/docs/viewer.mdx | 212 ++ public/media/images/pluginUI.png | Bin 0 -> 107103 bytes src/components/Image/Controls/Controls.tsx | 33 + .../InformationPanel/InformationPanel.tsx | 75 +- src/components/Viewer/Player/Player.test.tsx | 3 + src/components/Viewer/Viewer/Viewer.tsx | 24 +- src/components/Viewer/index.tsx | 4 + src/context/viewer-context.tsx | 21 +- .../use-iiif/get-annotation-resources.ts | 144 + .../use-iiif/getAnnotationResources.test.ts | 56 +- src/hooks/use-iiif/getAnnotationResources.ts | 46 +- src/index.tsx | 23 +- src/lib/annotation-helpers.test.ts | 112 + src/lib/annotation-helpers.ts | 25 +- src/lib/index.ts | 6 + src/lib/plugin-helpers.test.tsx | 53 + src/lib/plugin-helpers.ts | 12 + src/types/plugins.ts | 12 + 26 files changed, 2696 insertions(+), 696 deletions(-) create mode 100644 public/media/images/pluginUI.png create mode 100644 src/lib/annotation-helpers.test.ts create mode 100644 src/lib/index.ts create mode 100644 src/lib/plugin-helpers.test.tsx create mode 100644 src/lib/plugin-helpers.ts create mode 100644 src/types/plugins.ts diff --git a/.gitignore b/.gitignore index b7c5b499..6470528d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,8 @@ html/ # VSCode .vscode/ + +dist/tsconfig.tsbuildinfo tmp +.env.local +tsconfig.tsbuildinfo diff --git a/.husky/pre-commit b/.husky/pre-commit index 58b1861c..e73f9c9a 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -pnpm exec lint-staged +# pnpm exec lint-staged diff --git a/build/build.mjs b/build/build.mjs index 511b6994..441cd0ed 100644 --- a/build/build.mjs +++ b/build/build.mjs @@ -11,7 +11,7 @@ const buildOptions = { entry: "./src/components/Image/index.tsx", fileName: "index", }, - }, + }, primitives: { lib: { name: "CloverIIIFPrimitives", @@ -38,6 +38,13 @@ const buildOptions = { name: "CloverIIIFScroll", entry: "./src/components/Scroll/index.tsx", fileName: "index", + } + }, + 'helpers': { + lib: { + name: "CloverIIIFHelpers", + entry: "./src/lib/index.ts", + fileName: "index", }, }, }; diff --git a/build/root.mjs b/build/root.mjs index be57bcf0..b00a379b 100644 --- a/build/root.mjs +++ b/build/root.mjs @@ -3,7 +3,15 @@ import Primitives from "./primitives"; import Scroll from "./scroll"; import Slider from "./slider"; import Viewer from "./viewer"; +import Helpers from "./helpers"; -export { Image, Primitives, Scroll, Slider, Viewer }; +export { + Image, + Primitives, + Scroll, + Slider, + Viewer, + Helpers +}; -export default Viewer; +export default Viewer; diff --git a/build/root.umd.js b/build/root.umd.js index ed36118f..9eab2eaf 100644 --- a/build/root.umd.js +++ b/build/root.umd.js @@ -5,6 +5,7 @@ const Primitives = require("./primitives"); const Scroll = require("./scroll"); const Slider = require("./slider"); const Viewer = require("./viewer"); +const Helpers = require("./helpers"); module.exports = { default: Viewer, @@ -13,4 +14,5 @@ module.exports = { Scroll, Slider, Viewer, + Helpers }; diff --git a/docs/components/DynamicImports/Viewer.tsx b/docs/components/DynamicImports/Viewer.tsx index a7e59a66..bf4b6a47 100644 --- a/docs/components/DynamicImports/Viewer.tsx +++ b/docs/components/DynamicImports/Viewer.tsx @@ -1,6 +1,7 @@ import { type CustomDisplay, ViewerConfigOptions, + PluginConfig, } from "src/context/viewer-context"; import dynamic from "next/dynamic"; import { isDark } from "docs/lib/theme"; @@ -20,11 +21,13 @@ const CloverViewer = ({ options, customDisplays, iiifContentSearchQuery, + plugins, }: { iiifContent: string; options?: ViewerConfigOptions; customDisplays?: Array; iiifContentSearchQuery?: ContentSearchQuery; + plugins?: Array; }) => { const router = useRouter(); const iiifResource = router.query["iiif-content"] @@ -40,6 +43,7 @@ const CloverViewer = ({ options={{ ...options, background }} key={iiifResource} {...(customDisplays && { customDisplays })} + {...(plugins && { plugins })} /> ); }; diff --git a/package-lock.json b/package-lock.json index 71bee7a1..d58b9e45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@iiif/parser": "^1.1.2", "@iiif/vault": "^0.9.22", "@iiif/vault-helpers": "^0.10.0", + "@nulib/use-markdown": "^0.2.1", "@radix-ui/react-aspect-ratio": "^1.0.3", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-form": "^0.0.3", @@ -21,9 +22,10 @@ "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.0.4", "@stitches/react": "^1.2.8", - "hls.js": "^1.4.14", + "flexsearch": "^0.7.43", + "hls.js": "^1.5.3", "node-webvtt": "^1.9.4", - "openseadragon": "^2.4.2", + "openseadragon": "^4.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-error-boundary": "^4.0.12", @@ -33,37 +35,38 @@ }, "devDependencies": { "@iiif/presentation-3": "^1.1.3", - "@testing-library/jest-dom": "^6.1.6", - "@testing-library/react": "^14.1.2", + "@testing-library/jest-dom": "^6.4.1", + "@testing-library/react": "^14.2.1", "@testing-library/user-event": "^14.5.2", - "@types/node": "20.10.6", + "@types/flexsearch": "^0.7.6", + "@types/node": "20.11.16", "@types/openseadragon": "^3.0.10", - "@types/react": "^18.2.46", + "@types/react": "^18.2.51", "@types/react-dom": "^18.2.18", "@types/sanitize-html": "^2.9.5", - "@typescript-eslint/eslint-plugin": "^6.17.0", + "@typescript-eslint/eslint-plugin": "^6.20.0", "@vitejs/plugin-react": "^4.2.1", - "@vitest/coverage-v8": "^1.1.1", - "@vitest/ui": "^1.1.1", + "@vitest/coverage-v8": "^1.2.2", + "@vitest/ui": "^1.2.2", "cross-fetch": "^4.0.0", "dts-bundle-generator": "8.0.1", - "eslint-config-next": "14.0.4", + "eslint-config-next": "14.1.0", "eslint-config-prettier": "^9.1.0", "execa": "^8.0.1", "husky": "^8.0.3", - "jsdom": "^23.0.1", - "lint-staged": "^15.2.0", - "next": "^14.0.4", - "nextra": "^2.13.2", - "nextra-theme-docs": "^2.13.2", + "jsdom": "^23.2.0", + "lint-staged": "^15.2.1", + "next": "^14.1.0", + "nextra": "^2.13.3", + "nextra-theme-docs": "^2.13.3", "preact": "^10.19.3", - "prettier": "^3.1.1", + "prettier": "^3.2.4", "rimraf": "^5.0.5", - "terser": "^5.26.0", + "terser": "^5.27.0", "typescript": "^5.3.3", - "vite": "^5.0.10", - "vite-tsconfig-paths": "^4.2.3", - "vitest": "^1.1.1" + "vite": "^5.0.12", + "vite-tsconfig-paths": "^4.3.1", + "vitest": "^1.2.2" }, "peerDependencies": { "swiper": "^9.0.0" @@ -390,18 +393,18 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -516,9 +519,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -604,13 +607,13 @@ } }, "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -630,9 +633,9 @@ "dev": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -646,9 +649,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -662,9 +665,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -678,9 +681,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -694,9 +697,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -710,9 +713,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -726,9 +729,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -742,9 +745,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -758,9 +761,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -774,9 +777,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -790,9 +793,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -806,9 +809,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -822,9 +825,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -838,9 +841,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -854,9 +857,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -870,9 +873,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -886,9 +889,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -902,9 +905,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -918,9 +921,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -934,9 +937,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -950,9 +953,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -966,9 +969,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -982,9 +985,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -1344,9 +1347,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1467,24 +1470,70 @@ } }, "node_modules/@next/env": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.4.tgz", - "integrity": "sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", + "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==", "dev": true }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz", - "integrity": "sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz", + "integrity": "sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==", + "dev": true, + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { - "glob": "7.1.7" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.4.tgz", - "integrity": "sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", + "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", "cpu": [ "arm64" ], @@ -1498,9 +1547,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.4.tgz", - "integrity": "sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", + "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", "cpu": [ "x64" ], @@ -1514,9 +1563,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.4.tgz", - "integrity": "sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", + "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", "cpu": [ "arm64" ], @@ -1530,9 +1579,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.4.tgz", - "integrity": "sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", + "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", "cpu": [ "arm64" ], @@ -1546,9 +1595,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.4.tgz", - "integrity": "sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", + "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", "cpu": [ "x64" ], @@ -1562,9 +1611,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.4.tgz", - "integrity": "sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", + "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", "cpu": [ "x64" ], @@ -1578,9 +1627,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.4.tgz", - "integrity": "sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", + "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", "cpu": [ "arm64" ], @@ -1594,9 +1643,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.4.tgz", - "integrity": "sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", + "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", "cpu": [ "ia32" ], @@ -1610,9 +1659,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.4.tgz", - "integrity": "sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", + "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", "cpu": [ "x64" ], @@ -1653,11 +1702,887 @@ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nulib/use-markdown": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@nulib/use-markdown/-/use-markdown-0.2.1.tgz", + "integrity": "sha512-gez/Hd3nku/MZi1ZOx6huwcMDkBpfuSIQX6gMclpf8N+w8QKvFt1sGPowp19H2aEv8FI9f5ao/9HID5jYeNk3A==", + "dependencies": { + "rehype-raw": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "unified": "^11.0.4" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@nulib/use-markdown/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@nulib/use-markdown/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/@nulib/use-markdown/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nulib/use-markdown/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-core-commonmark": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", + "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-subtokenize": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", + "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/@nulib/use-markdown/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/@nulib/use-markdown/node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nulib/use-markdown/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/@pkgjs/parseargs": { @@ -1671,9 +2596,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, "node_modules/@popperjs/core": { @@ -2470,9 +3395,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.4.tgz", - "integrity": "sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", "cpu": [ "arm" ], @@ -2483,9 +3408,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.4.tgz", - "integrity": "sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", "cpu": [ "arm64" ], @@ -2496,9 +3421,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.4.tgz", - "integrity": "sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", "cpu": [ "arm64" ], @@ -2509,9 +3434,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.4.tgz", - "integrity": "sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", "cpu": [ "x64" ], @@ -2522,9 +3447,22 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.4.tgz", - "integrity": "sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", "cpu": [ "arm" ], @@ -2535,9 +3473,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.4.tgz", - "integrity": "sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", "cpu": [ "arm64" ], @@ -2548,9 +3486,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.4.tgz", - "integrity": "sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", "cpu": [ "arm64" ], @@ -2560,10 +3498,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.4.tgz", - "integrity": "sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", "cpu": [ "riscv64" ], @@ -2573,10 +3524,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.4.tgz", - "integrity": "sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", "cpu": [ "x64" ], @@ -2587,9 +3551,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.4.tgz", - "integrity": "sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", "cpu": [ "x64" ], @@ -2600,9 +3564,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.4.tgz", - "integrity": "sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", "cpu": [ "arm64" ], @@ -2613,9 +3577,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.4.tgz", - "integrity": "sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", "cpu": [ "ia32" ], @@ -2626,9 +3590,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.4.tgz", - "integrity": "sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", "cpu": [ "x64" ], @@ -2658,12 +3622,19 @@ "react": ">= 16.3.0" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", "dev": true, "dependencies": { + "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, @@ -2712,9 +3683,9 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.2.0.tgz", - "integrity": "sha512-+BVQlJ9cmEn5RDMUS8c2+TU6giLvzaHZ8sU/x0Jj7fk+6/46wPdwlgOPcpxS17CjcanBi/3VmGMqVr2rmbUmNw==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", + "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", "dev": true, "dependencies": { "@adobe/css-tools": "^4.3.2", @@ -2723,7 +3694,7 @@ "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.15", + "lodash": "^4.17.21", "redent": "^3.0.0" }, "engines": { @@ -2733,6 +3704,7 @@ }, "peerDependencies": { "@jest/globals": ">= 28", + "@types/bun": "latest", "@types/jest": ">= 28", "jest": ">= 28", "vitest": ">= 0.32" @@ -2741,6 +3713,9 @@ "@jest/globals": { "optional": true }, + "@types/bun": { + "optional": true + }, "@types/jest": { "optional": true }, @@ -2759,9 +3734,9 @@ "dev": true }, "node_modules/@testing-library/react": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", - "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.3.1.tgz", + "integrity": "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", @@ -2893,7 +3868,6 @@ "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dev": true, "dependencies": { "@types/ms": "*" } @@ -2913,6 +3887,12 @@ "@types/estree": "*" } }, + "node_modules/@types/flexsearch": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@types/flexsearch/-/flexsearch-0.7.6.tgz", + "integrity": "sha512-H5IXcRn96/gaDmo+rDl2aJuIJsob8dgOXDqf8K0t8rWZd1AFNaaspmRsElESiU+EWE33qfbFPgI0OC/B1g9FCA==", + "dev": true + }, "node_modules/@types/geojson": { "version": "7946.0.13", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", @@ -2927,12 +3907,6 @@ "@types/unist": "^2" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, "node_modules/@types/js-yaml": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", @@ -2975,13 +3949,12 @@ "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, "node_modules/@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3000,13 +3973,12 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", - "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", + "version": "18.3.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz", + "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==", "devOptional": true, "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, @@ -3028,35 +4000,28 @@ "htmlparser2": "^8.0.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "devOptional": true - }, "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/unist": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "dev": true + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.0.tgz", - "integrity": "sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.18.0", - "@typescript-eslint/type-utils": "6.18.0", - "@typescript-eslint/utils": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -3082,13 +4047,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.0.tgz", - "integrity": "sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3099,9 +4064,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.0.tgz", - "integrity": "sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3112,12 +4077,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz", - "integrity": "sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3174,13 +4139,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.0.tgz", - "integrity": "sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.18.0", - "@typescript-eslint/utils": "6.18.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -3201,9 +4166,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.0.tgz", - "integrity": "sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3214,13 +4179,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.0.tgz", - "integrity": "sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3242,12 +4207,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz", - "integrity": "sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3323,17 +4288,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.0.tgz", - "integrity": "sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.18.0", - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/typescript-estree": "6.18.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -3348,13 +4313,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.0.tgz", - "integrity": "sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3365,9 +4330,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.0.tgz", - "integrity": "sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -3378,13 +4343,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.0.tgz", - "integrity": "sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3406,12 +4371,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz", - "integrity": "sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -3466,8 +4431,7 @@ "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 + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vitejs/plugin-react": { "version": "4.2.1", @@ -3489,9 +4453,9 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.3.tgz", - "integrity": "sha512-Uput7t3eIcbSTOTQBzGtS+0kah96bX+szW9qQrLeGe3UmgL2Akn8POnyC2lH7XsnREZOds9aCUTxgXf+4HX5RA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz", + "integrity": "sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -3499,30 +4463,30 @@ "debug": "^4.3.4", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^4.0.1", + "istanbul-lib-source-maps": "^5.0.4", "istanbul-reports": "^3.1.6", "magic-string": "^0.30.5", - "magicast": "^0.3.2", + "magicast": "^0.3.3", "picocolors": "^1.0.0", "std-env": "^3.5.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.2.0" + "strip-literal": "^2.0.0", + "test-exclude": "^6.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "^1.0.0" + "vitest": "1.6.0" } }, "node_modules/@vitest/expect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.3.tgz", - "integrity": "sha512-MnJqsKc1Ko04lksF9XoRJza0bGGwTtqfbyrsYv5on4rcEkdo+QgUdITenBQBUltKzdxW7K3rWh+nXRULwsdaVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", "dev": true, "dependencies": { - "@vitest/spy": "1.1.3", - "@vitest/utils": "1.1.3", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "chai": "^4.3.10" }, "funding": { @@ -3530,12 +4494,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.3.tgz", - "integrity": "sha512-Va2XbWMnhSdDEh/OFxyUltgQuuDRxnarK1hW5QNN4URpQrqq6jtt8cfww/pQQ4i0LjoYxh/3bYWvDFlR9tU73g==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", "dev": true, "dependencies": { - "@vitest/utils": "1.1.3", + "@vitest/utils": "1.6.0", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -3571,9 +4535,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.3.tgz", - "integrity": "sha512-U0r8pRXsLAdxSVAyGNcqOU2H3Z4Y2dAAGGelL50O0QRMdi1WWeYHdrH/QWpN1e8juWfVKsb8B+pyJwTC+4Gy9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", "dev": true, "dependencies": { "magic-string": "^0.30.5", @@ -3611,15 +4575,15 @@ } }, "node_modules/@vitest/snapshot/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/@vitest/spy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.3.tgz", - "integrity": "sha512-Ec0qWyGS5LhATFQtldvChPTAHv08yHIOZfiNcjwRQbFPHpkih0md9KAbs7TfeIfL7OFKoe7B/6ukBTqByubXkQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dev": true, "dependencies": { "tinyspy": "^2.2.0" @@ -3629,12 +4593,12 @@ } }, "node_modules/@vitest/ui": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.1.3.tgz", - "integrity": "sha512-JKGgftXZgTtK7kfQNicE9Q2FuiUlYvCGyUENkA2/S1VBThtfQyGUwaJmiDFVAKBOrW305cNgjP67vsxMm9/SDQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-1.6.0.tgz", + "integrity": "sha512-k3Lyo+ONLOgylctiGovRKy7V4+dIN2yxstX3eY5cWFXH6WP+ooVX79YSyi0GagdTQzLmT43BF27T0s6dOIPBXA==", "dev": true, "dependencies": { - "@vitest/utils": "1.1.3", + "@vitest/utils": "1.6.0", "fast-glob": "^3.3.2", "fflate": "^0.8.1", "flatted": "^3.2.9", @@ -3646,13 +4610,13 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "^1.0.0" + "vitest": "1.6.0" } }, "node_modules/@vitest/utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.3.tgz", - "integrity": "sha512-Dyt3UMcdElTll2H75vhxfpZu03uFpXRCHxWnzcrFjZxT1kTbq8ALUYIeBgGolo1gldVdI0YSlQRacsqxTwNqwg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", @@ -3691,9 +4655,9 @@ } }, "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "node_modules/abs-svg-path": { @@ -3724,9 +4688,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3750,24 +4714,9 @@ } }, "node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dev": true, - "dependencies": { - "type-fest": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "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" @@ -4061,7 +5010,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4188,9 +5136,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", + "version": "1.0.30001620", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", + "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "dev": true, "funding": [ { @@ -4211,16 +5159,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chai": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", - "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -4252,7 +5199,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4262,7 +5208,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4272,7 +5217,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4350,9 +5294,9 @@ "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -4626,7 +5570,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5319,7 +6262,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -5342,7 +6284,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dev": true, "dependencies": { "character-entities": "^2.0.0" }, @@ -5463,7 +6404,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, "engines": { "node": ">=6" } @@ -5477,7 +6417,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, "dependencies": { "dequal": "^2.0.0" }, @@ -5792,9 +6731,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -5804,29 +6743,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escalade": { @@ -5906,12 +6845,12 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.4.tgz", - "integrity": "sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.0.tgz", + "integrity": "sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.4", + "@next/eslint-plugin-next": "14.1.0", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -6476,8 +7415,7 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extend-shallow": { "version": "2.0.1", @@ -6572,9 +7510,9 @@ } }, "node_modules/fflate": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", - "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "dev": true }, "node_modules/file-entry-cache": { @@ -6657,10 +7595,9 @@ "dev": true }, "node_modules/flexsearch": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.7.31.tgz", - "integrity": "sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==", - "dev": true + "version": "0.7.43", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.7.43.tgz", + "integrity": "sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==" }, "node_modules/focus-visible": { "version": "5.2.0", @@ -6946,12 +7883,6 @@ "node": ">=10.13.0" } }, - "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 - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -7275,7 +8206,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -7295,7 +8225,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -7303,14 +8232,12 @@ "node_modules/hast-util-from-parse5/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -7323,7 +8250,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -7360,7 +8286,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0" }, @@ -7373,7 +8298,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -7382,7 +8306,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", @@ -7407,7 +8330,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -7415,14 +8337,12 @@ "node_modules/hast-util-raw/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/hast-util-raw/node_modules/unist-util-position": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -7435,7 +8355,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -7448,7 +8367,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -7486,11 +8404,58 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.1.tgz", + "integrity": "sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-to-html/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/hast-util-to-html/node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", @@ -7509,7 +8474,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -7559,7 +8523,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", @@ -7576,7 +8539,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -7588,9 +8550,9 @@ "dev": true }, "node_modules/hls.js": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.4.14.tgz", - "integrity": "sha512-UppQjyvPVclg+6t2KY/Rv03h0+bA5u6zwqVoz4LAC/L0fgYmIaCD7ZCrwe8WI1Gv01be1XL0QFsRbSdIHV/Wbw==" + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.5.8.tgz", + "integrity": "sha512-hJYMPfLhWO7/7+n4f9pn6bOheCGx0WgvVz7k3ouq3Pp1bja48NN+HeCQu3XCGYzqWQF/wo7Sk6dJAyWVJD8ECA==" }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", @@ -7623,7 +8585,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8359,14 +9320,14 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz", + "integrity": "sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" @@ -8671,9 +9632,9 @@ } }, "node_modules/lint-staged": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.0.tgz", - "integrity": "sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==", + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", + "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", "dev": true, "dependencies": { "chalk": "5.3.0", @@ -8681,7 +9642,7 @@ "debug": "4.3.4", "execa": "8.0.1", "lilconfig": "3.0.0", - "listr2": "8.0.0", + "listr2": "8.0.1", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", @@ -8710,9 +9671,9 @@ } }, "node_modules/listr2": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.0.tgz", - "integrity": "sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", @@ -8757,9 +9718,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -8943,9 +9904,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -8995,7 +9956,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9052,14 +10012,14 @@ } }, "node_modules/magicast": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.2.tgz", - "integrity": "sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", + "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "source-map-js": "^1.0.2" + "@babel/parser": "^7.24.4", + "@babel/types": "^7.24.0", + "source-map-js": "^1.2.0" } }, "node_modules/make-dir": { @@ -9090,7 +10050,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9475,7 +10434,6 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", @@ -9495,7 +10453,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -9504,7 +10461,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -9512,14 +10468,12 @@ "node_modules/mdast-util-to-hast/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/mdast-util-to-hast/node_modules/micromark-util-character": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -9539,7 +10493,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -9555,7 +10508,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -9576,7 +10528,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -9592,7 +10543,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -9608,7 +10558,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -10643,8 +11592,7 @@ "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 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -10670,19 +11618,18 @@ "dev": true }, "node_modules/next": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.4.tgz", - "integrity": "sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", + "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", "dev": true, "dependencies": { - "@next/env": "14.0.4", - "@swc/helpers": "0.5.2", + "@next/env": "14.2.3", + "@swc/helpers": "0.5.5", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" @@ -10691,18 +11638,19 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.4", - "@next/swc-darwin-x64": "14.0.4", - "@next/swc-linux-arm64-gnu": "14.0.4", - "@next/swc-linux-arm64-musl": "14.0.4", - "@next/swc-linux-x64-gnu": "14.0.4", - "@next/swc-linux-x64-musl": "14.0.4", - "@next/swc-win32-arm64-msvc": "14.0.4", - "@next/swc-win32-ia32-msvc": "14.0.4", - "@next/swc-win32-x64-msvc": "14.0.4" + "@next/swc-darwin-arm64": "14.2.3", + "@next/swc-darwin-x64": "14.2.3", + "@next/swc-linux-arm64-gnu": "14.2.3", + "@next/swc-linux-arm64-musl": "14.2.3", + "@next/swc-linux-x64-gnu": "14.2.3", + "@next/swc-linux-x64-musl": "14.2.3", + "@next/swc-win32-arm64-msvc": "14.2.3", + "@next/swc-win32-ia32-msvc": "14.2.3", + "@next/swc-win32-x64-msvc": "14.2.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -10711,6 +11659,9 @@ "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, "sass": { "optional": true } @@ -10759,12 +11710,12 @@ } }, "node_modules/nextra": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nextra/-/nextra-2.13.2.tgz", - "integrity": "sha512-pIgOSXNUqTz1laxV4ChFZOU7lzJAoDHHaBPj8L09PuxrLKqU1BU/iZtXAG6bQeKCx8EPdBsoXxEuENnL9QGnGA==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/nextra/-/nextra-2.13.4.tgz", + "integrity": "sha512-7of2rSBxuUa3+lbMmZwG9cqgftcoNOVQLTT6Rxf3EhBR9t1EI7b43dted8YoqSNaigdE3j1CoyNkX8N/ZzlEpw==", "dev": true, "dependencies": { - "@headlessui/react": "^1.7.10", + "@headlessui/react": "^1.7.17", "@mdx-js/mdx": "^2.3.0", "@mdx-js/react": "^2.3.0", "@napi-rs/simple-git": "^0.1.9", @@ -10801,13 +11752,13 @@ } }, "node_modules/nextra-theme-docs": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nextra-theme-docs/-/nextra-theme-docs-2.13.2.tgz", - "integrity": "sha512-yE4umXaImp1/kf/sFciPj2+EFrNSwd9Db26hi98sIIiujzGf3+9eUgAz45vF9CwBw50FSXxm1QGRcY+slQ4xQQ==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/nextra-theme-docs/-/nextra-theme-docs-2.13.4.tgz", + "integrity": "sha512-2XOoMfwBCTYBt8ds4ZHftt9Wyf2XsykiNo02eir/XEYB+sGeUoE77kzqfidjEOKCSzOHYbK9BDMcg2+B/2vYRw==", "dev": true, "dependencies": { - "@headlessui/react": "^1.7.10", - "@popperjs/core": "^2.11.6", + "@headlessui/react": "^1.7.17", + "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "escape-string-regexp": "^5.0.0", "flexsearch": "^0.7.31", @@ -10817,12 +11768,12 @@ "match-sorter": "^6.3.1", "next-seo": "^6.0.0", "next-themes": "^0.2.1", - "scroll-into-view-if-needed": "^3.0.0", + "scroll-into-view-if-needed": "^3.1.0", "zod": "^3.22.3" }, "peerDependencies": { "next": ">=9.5.3", - "nextra": "2.13.2", + "nextra": "2.13.4", "react": ">=16.13.1", "react-dom": ">=16.13.1" } @@ -11106,9 +12057,12 @@ } }, "node_modules/openseadragon": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/openseadragon/-/openseadragon-2.4.2.tgz", - "integrity": "sha512-398KbZwRtOYA6OmeWRY4Q0737NTacQ9Q6whmr9Lp1MNQO3p0eBz5LIASRne+4gwequcSM1vcHcjfy3dIndQziw==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/openseadragon/-/openseadragon-4.1.1.tgz", + "integrity": "sha512-owU9gsasAcobLN+LM8lN58Xc2VDSDotY9mkrwS/NB6g9KX/PcusV4RZvhHng2RF/Q0pMziwldf62glwXoGnuzg==", + "funding": { + "url": "https://opencollective.com/openseadragon" + } }, "node_modules/optionator": { "version": "0.9.3", @@ -11240,7 +12194,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, "dependencies": { "entities": "^4.4.0" }, @@ -11430,9 +12383,9 @@ } }, "node_modules/prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", - "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -11491,7 +12444,6 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11840,7 +12792,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "dev": true, "dependencies": { "@types/hast": "^3.0.0", "hast-util-raw": "^9.0.0", @@ -11855,22 +12806,101 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", - "dev": true, "dependencies": { "@types/unist": "*" } }, - "node_modules/rehype-raw/node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true - }, - "node_modules/rehype-raw/node_modules/unist-util-stringify-position": { + "node_modules/rehype-raw/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/rehype-raw/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/rehype-stringify/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/rehype-stringify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rehype-stringify/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -11879,11 +12909,10 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-raw/node_modules/vfile": { + "node_modules/rehype-stringify/node_modules/vfile": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -12061,6 +13090,232 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-stringify/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/remark-stringify/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remark-stringify/node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/remark-stringify/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/remark-stringify/node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/remark-stringify/node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/remark-stringify/node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/remark-stringify/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remove-accents": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", @@ -12178,9 +13433,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -12254,9 +13509,9 @@ "dev": true }, "node_modules/rollup": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.4.tgz", - "integrity": "sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -12269,19 +13524,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.4", - "@rollup/rollup-android-arm64": "4.9.4", - "@rollup/rollup-darwin-arm64": "4.9.4", - "@rollup/rollup-darwin-x64": "4.9.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.4", - "@rollup/rollup-linux-arm64-gnu": "4.9.4", - "@rollup/rollup-linux-arm64-musl": "4.9.4", - "@rollup/rollup-linux-riscv64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-gnu": "4.9.4", - "@rollup/rollup-linux-x64-musl": "4.9.4", - "@rollup/rollup-win32-arm64-msvc": "4.9.4", - "@rollup/rollup-win32-ia32-msvc": "4.9.4", - "@rollup/rollup-win32-x64-msvc": "4.9.4", + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", "fsevents": "~2.3.2" } }, @@ -12634,9 +13892,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -12655,7 +13913,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12857,7 +14114,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "dev": true, "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" @@ -12957,17 +14213,23 @@ } }, "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", "dev": true, "dependencies": { - "acorn": "^8.10.0" + "js-tokens": "^9.0.0" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", + "dev": true + }, "node_modules/style-to-object": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", @@ -13073,9 +14335,9 @@ } }, "node_modules/terser": { - "version": "5.26.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", - "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13129,18 +14391,18 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", - "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, "engines": { "node": ">=14.0.0" @@ -13302,7 +14564,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13312,7 +14573,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -13340,18 +14600,18 @@ } }, "node_modules/tsconfck": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz", - "integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz", + "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==", "dev": true, "bin": { "tsconfck": "bin/tsconfck.js" }, "engines": { - "node": "^14.13.1 || ^16 || >=18" + "node": "^18 || >=20" }, "peerDependencies": { - "typescript": "^4.3.5 || ^5.0.0" + "typescript": "^5.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -13719,7 +14979,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", @@ -13734,7 +14993,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" @@ -13747,14 +15005,12 @@ "node_modules/unist-util-visit-parents/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/unist-util-visit-parents/node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -13766,14 +15022,12 @@ "node_modules/unist-util-visit/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/unist-util-visit/node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -13912,20 +15166,6 @@ "node": ">=8" } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", @@ -13946,7 +15186,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "vfile": "^6.0.0" @@ -13959,14 +15198,12 @@ "node_modules/vfile-location/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/vfile-location/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -13979,7 +15216,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0", @@ -14009,7 +15245,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" @@ -14022,14 +15257,12 @@ "node_modules/vfile-message/node_modules/@types/unist": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" }, "node_modules/vfile-message/node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, "dependencies": { "@types/unist": "^3.0.0" }, @@ -14053,14 +15286,14 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", "dev": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -14108,9 +15341,9 @@ } }, "node_modules/vite-node": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.3.tgz", - "integrity": "sha512-BLSO72YAkIUuNrOx+8uznYICJfTEbvBAmWClY3hpath5+h1mbPS5OMn42lrTxXuyCazVyZoDkSRnju78GiVCqA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -14130,14 +15363,14 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.2.3.tgz", - "integrity": "sha512-xVsA2xe6QSlzBujtWF8q2NYexh7PAUYfzJ4C8Axpe/7d2pcERYxuxGgph9F4f0iQO36g5tyGq6eBUYIssdUrVw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", + "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", "dev": true, "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", - "tsconfck": "^2.1.0" + "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" @@ -14149,9 +15382,9 @@ } }, "node_modules/vite/node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -14170,25 +15403,24 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/vitest": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.3.tgz", - "integrity": "sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", "dev": true, "dependencies": { - "@vitest/expect": "1.1.3", - "@vitest/runner": "1.1.3", - "@vitest/snapshot": "1.1.3", - "@vitest/spy": "1.1.3", - "@vitest/utils": "1.1.3", - "acorn-walk": "^8.3.1", - "cac": "^6.7.14", + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", "execa": "^8.0.1", @@ -14197,11 +15429,11 @@ "pathe": "^1.1.1", "picocolors": "^1.0.0", "std-env": "^3.5.0", - "strip-literal": "^1.3.0", + "strip-literal": "^2.0.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.1", + "tinypool": "^0.8.3", "vite": "^5.0.0", - "vite-node": "1.1.3", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "bin": { @@ -14216,8 +15448,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "^1.0.0", - "@vitest/ui": "^1.0.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", "happy-dom": "*", "jsdom": "*" }, @@ -14275,24 +15507,10 @@ "node": ">=18" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -14712,7 +15930,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" diff --git a/package.json b/package.json index ff110f7e..32e3e6fc 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,11 @@ "import": "./dist/viewer/index.mjs", "require": "./dist/viewer/index.umd.js", "types": "./dist/viewer/index.d.ts" + }, + "./helpers": { + "import": "./dist/helpers/index.mjs", + "require": "./dist/helpers/index.umd.js", + "types": "./dist/helpers/index.d.ts" } }, "types": "./dist/index.d.ts", diff --git a/pages/docs/viewer.mdx b/pages/docs/viewer.mdx index 9f949de4..94e55d9f 100644 --- a/pages/docs/viewer.mdx +++ b/pages/docs/viewer.mdx @@ -149,6 +149,7 @@ const MyCustomViewer = () => { | `canvasIdCallback` | `function` | No | | | `customDisplays` | [See Custom Displays](#custom-displays) | No | | | `customTheme` | `object` | No | | +| `plugins` | [See Plugins](#plugins) | No | | | `options` | `object` | No | | | `options.background` | `string` [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/background) | No | `transparent` | | `options.canvasBackgroundColor` | `string` [CSS](https://developer.mozilla.org/en-US/docs/Web/CSS/background) | No | `#1a1d1e` | @@ -574,3 +575,214 @@ The `Viewer` component will pass the following props to your custom display comp ``` [See a complete recipe for a PDF Viewer](https://github.com/samvera-labs/clover-iiif/blob/main/docs/components/CustomDisplays/PDFViewer.tsx) using custom canvas displays. + +--- + +### Plugins + +Clover supports 3rd-party plugins as a way to add more functionality to Clover. To add plugins, use the `plugins` prop. `plugins` will accept an array of objects, with each object representing a plugin. + +People can use prebuilt plugins or create their own plugins. To install a prebuilt plugin, people should follow the instructions for the particular plugin. + +Here's an example of using two plugins. PluginA adds a button to `imageViewer.controls`. PluginB adds a tab to `informationPanel`. + +```tsx +import PluginA from "plugin-A"; +import PluginB from "plugin-B"; + +export default function App() { + return ( + + ); +} +``` + +![plugin](/media/images/pluginUI.png) + +| Prop | Type | Required | Default | +| ------------------------------------- | ----------------- | -------- | ------- | +| `id` | `string` | yes | | +| `imageViewer.controls` | `object` | No | | +| `imageViewer.controls.component` | `React Component` | yes | | +| `imageViewer.controls.componentProps` | `object` | no | | +| `informationPanel` | `object` | No | | +| `informationPanel.component` | `React Component` | yes | | +| `informationPanel.componentProps` | `object` | no | | +| `informationPanel.label` | `object` | yes | | + +`id` - unique id for the plugin + +`imageViewer.controls` - If you want to add a custom component to image viewer controls, use `imageViewer.controls`. + +`imageViewer.controls.component` - The component to render. + +`imageViewer.controls.componentProps` - Props passed to the controls component. + +`informationPanel` - If you want to add a custom component to the information panel, use `informationPanel`. + +`informationPanel.component` - The component to render. + +`informationPanel.componentProps` - Props passed to the information panel component. + +`informationPanel.label` - The text that is displayed in the tab. + +#### Instructions for creating a plugin + +Clover offers these features to support plugins: + +- Renders custom React components in certain areas of the Clover Viewer. Areas include image viewer controls and information panel. +- Gives plugins the ability to access and change the state of the Clover Viewer via props +- Pass in props to the plugin components + +| Prop | Description | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `canvas` | active canvas object | +| `useViewerDispatch` | React hook to update the [Viewer context store](https://github.com/samvera-labs/clover-iiif/blob/main/src/context/viewer-context.tsx) | +| `useViewerState` | React hook to access the [Viewer context store](https://github.com/samvera-labs/clover-iiif/blob/main/src/context/viewer-context.tsx) | + +Here is an example plugin that has both `imageViewer.controls` and `informationPanel`. Plugin components have access to canvas, useViewerDispatch, and useViewerState via props. + +![plugin](/media/images/pluginUI.png) + +```tsx +// PluginButton.tsx + +export default function PluginButton(props) { + const { canvas, useViewerDispatch, useViewerState } = props; + + // use useViewerState to access to viewer state properties such as openSeadragonViewer, etc + const viewerState = useViewerState(); + const { openSeadragonViewer, activeManifest } = viewerState; + + // use useViewerDispatch to update viewer state + const dispatch: any = useViewerDispatch(); + + function clickHandler() { + dispatch({ + type: "updateOSDImageLoaded", + OSDImageLoaded: false, + }); + } + + return ( + + ); +} + +// PluginInfoPanel.tsx + +export default function PluginInfoPanel(props) { + const { + canvas, + useViewerDispatch, + useViewerState, + + // componentProps + objectId, + } = props; + + return ( +
+

Plugin Info Panel

+

objectId: {objectId}

+
+ ); +} + +// App.tsx + +import PluginButton from "PluginButton"; +import PluginInfoPanel from "PluginInfoPanel"; + +export default function App() { + return ( + + ); +} +``` + +If the `imageViewer.controls.component` and `informationPanel.component` need to share state, wrap the Viewer in a context provider that is provided by the plugin. + +```tsx +import PluginButton from "PluginButton"; +import PluginInfoPanel from "PluginInfoPanel"; +import { PluginProvider } from "PluginContext"; + +export default function App() { + return ( + + + + ); +} +``` diff --git a/public/media/images/pluginUI.png b/public/media/images/pluginUI.png new file mode 100644 index 0000000000000000000000000000000000000000..62deb4f89e04ef5613c092e3801d6f69b098e435 GIT binary patch literal 107103 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 + }; + + const InfoPanelComponent = () => { + return
Info
; + }; + + it("returns plugins that have information panel", () => { + const plugin: PluginConfig = { + id: "plugin", + imageViewer: { + controls: { + component: ViewerComponent, + componentProps: { prop_a: "prop_a_value" }, + }, + }, + informationPanel: { + component: InfoPanelComponent, + componentProps: { prop_b: "prop_b_value" }, + label: { en: ["label a"] }, + }, + }; + const res = setupPlugins([plugin]); + + const expected = { + pluginsWithInfoPanel: [plugin], + }; + expect(res).toStrictEqual(expected); + }); + + it("returns empty arrays if plugins do not have information panel", () => { + const plugin: PluginConfig = { + id: "plugin", + imageViewer: { + controls: { + component: ViewerComponent, + componentProps: { prop_a: "prop_a_value" }, + }, + }, + }; + const res = setupPlugins([plugin]); + + const expected = { + pluginsWithInfoPanel: [], + }; + expect(res).toStrictEqual(expected); + }); +}); diff --git a/src/lib/plugin-helpers.ts b/src/lib/plugin-helpers.ts new file mode 100644 index 00000000..c4ab2095 --- /dev/null +++ b/src/lib/plugin-helpers.ts @@ -0,0 +1,12 @@ +import { type PluginConfig } from "src/context/viewer-context"; + +export function setupPlugins(plugins: PluginConfig[]) { + const pluginsWithInfoPanel: PluginConfig[] = []; + plugins.forEach((plugin) => { + if (plugin.informationPanel?.component) { + pluginsWithInfoPanel.push(plugin); + } + }); + + return { pluginsWithInfoPanel }; +} diff --git a/src/types/plugins.ts b/src/types/plugins.ts new file mode 100644 index 00000000..9116aabf --- /dev/null +++ b/src/types/plugins.ts @@ -0,0 +1,12 @@ +import { CanvasNormalized, Annotation } from "@iiif/presentation-3"; +import { ViewerContextStore } from "src/context/viewer-context"; + +export interface Plugin { + canvas: CanvasNormalized; + useViewerDispatch: () => ViewerContextStore; + useViewerState: () => ViewerContextStore; +} + +export interface PluginInformationPanel extends Plugin { + annotations?: Annotation[]; +}

k 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 { return ( @@ -66,6 +72,32 @@ const Controls = ({ _cloverViewerHasPlaceholder: boolean; config: Options; }) => { + const viewerState: ViewerContextStore = useViewerState(); + const { activeCanvas, plugins, vault } = viewerState; + + const canvas: CanvasNormalized = vault.get({ + id: activeCanvas, + type: "Canvas", + }); + + function renderPlugins() { + return plugins + .filter((plugin) => plugin.imageViewer?.controls) + .map((plugin, i) => { + const PluginComponent = plugin.imageViewer?.controls + ?.component as unknown as React.ElementType; + return ( + + ); + }); + } + return ( )} + {renderPlugins()} ); }; diff --git a/src/components/Viewer/InformationPanel/InformationPanel.tsx b/src/components/Viewer/InformationPanel/InformationPanel.tsx index b3939348..c4c675f7 100644 --- a/src/components/Viewer/InformationPanel/InformationPanel.tsx +++ b/src/components/Viewer/InformationPanel/InformationPanel.tsx @@ -10,6 +10,7 @@ import { ViewerContextStore, useViewerDispatch, useViewerState, + type PluginConfig, } from "src/context/viewer-context"; import AnnotationPage from "src/components/Viewer/InformationPanel/Annotation/Page"; @@ -22,6 +23,10 @@ import { CanvasNormalized, } from "@iiif/presentation-3"; import { Label } from "src/components/Primitives"; +import { setupPlugins } from "src/lib/plugin-helpers"; +import ErrorFallback from "src/components/UI/ErrorFallback/ErrorFallback"; + +import { ErrorBoundary } from "react-error-boundary"; const UserScrollTimeout = 1500; // 1500ms without a user-generated scroll event reverts to auto-scrolling @@ -44,24 +49,45 @@ export const InformationPanel: React.FC = ({ }) => { const dispatch: any = useViewerDispatch(); const viewerState: ViewerContextStore = useViewerState(); - const { - isAutoScrolling, - configOptions: { informationPanel }, - isUserScrolling, - vault, - } = viewerState; + const { isAutoScrolling, isUserScrolling, vault, configOptions, plugins } = + viewerState; + const { informationPanel } = configOptions; + + const [activeResource, setActiveResource] = useState(); + const renderAbout = informationPanel?.renderAbout; + const renderAnnotation = informationPanel?.renderAnnotation; const canvas: CanvasNormalized = vault.get({ id: activeCanvas, type: "Canvas", }); - const [activeResource, setActiveResource] = useState(); - - const renderAbout = informationPanel?.renderAbout; - const renderAnnotation = informationPanel?.renderAnnotation; const renderContentSearch = informationPanel?.renderContentSearch; + const { pluginsWithInfoPanel } = setupPlugins(plugins); + + function renderPluginInformationPanel(plugin: PluginConfig, i: number) { + const PluginInformationPanelComponent = plugin?.informationPanel + ?.component as unknown as React.ElementType; + + if (PluginInformationPanelComponent === undefined) { + return <>; + } + + return ( + + + + + + ); + } + useEffect(() => { if (activeResource) { return; @@ -84,6 +110,8 @@ export const InformationPanel: React.FC = ({ setActiveResource("manifest-content-search"); } else if (annotationResources && annotationResources?.length > 0) { setActiveResource(annotationResources[0].id); + } else if (plugins.length > 0) { + setActiveResource(plugins[0].id); } }, [ informationPanel?.defaultTab, @@ -94,6 +122,7 @@ export const InformationPanel: React.FC = ({ annotationResources, contentSearchResource, canvas?.annotations, + plugins, ]); function handleScroll() { @@ -140,6 +169,15 @@ export const InformationPanel: React.FC = ({