From 4c91dfa71b41887e3743e3c1fdf19ff7201219ec Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:45:50 -0700 Subject: [PATCH 01/93] Enhancement: support automatic service discovery services with layout-only nesting (#4900) --- src/utils/config/api-response.js | 55 +++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index 3309eeed..03f155fb 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -85,6 +85,18 @@ export async function widgetsResponse() { return configuredWidgets; } +function convertLayoutGroupToGroup(name, layoutGroup) { + const group = { name, services: [], groups: [] }; + if (layoutGroup) { + Object.entries(layoutGroup).forEach(([key, value]) => { + if (typeof value === "object") { + group.groups.push(convertLayoutGroupToGroup(key, value)); + } + }); + } + return group; +} + function mergeSubgroups(configuredGroups, mergedGroup) { configuredGroups.forEach((group) => { if (group.name === mergedGroup.name) { @@ -96,6 +108,33 @@ function mergeSubgroups(configuredGroups, mergedGroup) { }); } +function ensureParentGroupExists(sortedGroups, configuredGroups, group, definedLayouts) { + // make sure the top level parent group exists in the sortedGroups array + const parentGroupName = group.parent; + const parentGroup = findGroupByName(configuredGroups, parentGroupName); + if (parentGroup && parentGroup.parent) { + ensureParentGroupExists(sortedGroups, configuredGroups, parentGroup); + } else { + const parentGroupIndex = definedLayouts.findIndex((layout) => layout === parentGroupName); + if (parentGroupIndex > -1) { + sortedGroups[parentGroupIndex] = parentGroup; + } + } +} + +function pruneEmptyGroups(groups) { + // remove any groups that have no services + return groups.filter((group) => { + if (group.services.length === 0 && group.groups.length === 0) { + return false; + } + if (group.groups.length > 0) { + group.groups = pruneEmptyGroups(group.groups); + } + return true; + }); +} + export async function servicesResponse() { let discoveredDockerServices; let discoveredKubernetesServices; @@ -150,6 +189,17 @@ export async function servicesResponse() { const sortedGroups = []; const unsortedGroups = []; const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null; + if (definedLayouts) { + // this handles cases where groups are only defined in the settings.yaml layout and not in the services.yaml + const layoutConfiguredGroups = Object.entries(initialSettings.layout).map(([key, value]) => + convertLayoutGroupToGroup(key, value), + ); + layoutConfiguredGroups.forEach((group) => { + if (!configuredServices.find((serviceGroup) => serviceGroup.name === group.name)) { + configuredServices.push(group); + } + }); + } mergedGroupsNames.forEach((groupName) => { const discoveredDockerGroup = findGroupByName(discoveredDockerServices, groupName) || { @@ -174,6 +224,8 @@ export async function servicesResponse() { else if (configuredGroup.parent) { // this is a nested group, so find the parent group and merge the services mergeSubgroups(configuredServices, mergedGroup); + // make sure the top level parent group exists in the sortedGroups array + ensureParentGroupExists(sortedGroups, configuredServices, configuredGroup, definedLayouts); } else unsortedGroups.push(mergedGroup); } else if (configuredGroup.parent) { // this is a nested group, so find the parent group and merge the services @@ -183,5 +235,6 @@ export async function servicesResponse() { } }); - return [...sortedGroups.filter((g) => g), ...unsortedGroups]; + const allGroups = [...sortedGroups.filter((g) => g), ...unsortedGroups]; + return pruneEmptyGroups(allGroups); } From e9630afa3024e9a3884fc43a96443355b6516ad6 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Mar 2025 13:42:49 -0700 Subject: [PATCH 02/93] Chore: add plex container size to requests (#4903) --- src/widgets/plex/proxy.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index 2956f280..53931aca 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -41,7 +41,12 @@ async function fetchFromPlexAPI(endpoint, widget) { const url = new URL(formatApiCall(api, { endpoint, ...widget })); - const [status, contentType, data] = await httpProxy(url); + const [status, contentType, data] = await httpProxy(url, { + headers: { + "X-Plex-Container-Start": `0`, + "X-Plex-Container-Size": `500`, + }, + }); if (status !== 200) { logger.error("HTTP %d communicating with Plex. Data: %s", status, data.toString()); From 955baf9cb1e46619a9a44a17ce0ab98e2a61f672 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Mar 2025 23:59:57 -0700 Subject: [PATCH 03/93] Fix: better display tubearchivist error detail --- src/widgets/tubearchivist/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/tubearchivist/component.jsx b/src/widgets/tubearchivist/component.jsx index aa232bea..6af255cd 100644 --- a/src/widgets/tubearchivist/component.jsx +++ b/src/widgets/tubearchivist/component.jsx @@ -14,8 +14,8 @@ export default function Component({ service }) { const { data: channelsData, error: channelsError } = useWidgetAPI(widget, "channels"); const { data: playlistsData, error: playlistsError } = useWidgetAPI(widget, "playlists"); - if (downloadsError || videosError || channelsError || playlistsError) { - const finalError = downloadsError ?? videosError ?? channelsError ?? playlistsError; + if (downloadsError || videosError || channelsError || playlistsError || (downloadsData && downloadsData.detail)) { + const finalError = downloadsError ?? videosError ?? channelsError ?? playlistsError ?? downloadsData.detail; return <Container service={service} error={finalError} />; } From 9a6489c11734b958aeaeb3efd3012618721b402d Mon Sep 17 00:00:00 2001 From: Jason Sallis <2787+jsallis@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:09:03 -0500 Subject: [PATCH 04/93] Documentation: correct documentation for multiple widgets in docker labels (#4766) --- docs/configs/docker.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/configs/docker.md b/docs/configs/docker.md index 7cea1fdc..992897cb 100644 --- a/docs/configs/docker.md +++ b/docs/configs/docker.md @@ -157,12 +157,12 @@ Multiple widgets can be specified by incrementing the index, e.g. ```yaml labels: ... - - homepage.widget[0].type=emby - - homepage.widget[0].url=http://emby.home - - homepage.widget[0].key=yourembyapikeyhere - - homepage.widget[1].type=uptimekuma - - homepage.widget[1].url=http://uptimekuma.home - - homepage.widget[1].slug=youreventslughere + - homepage.widgets[0].type=emby + - homepage.widgets[0].url=http://emby.home + - homepage.widgets[0].key=yourembyapikeyhere + - homepage.widgets[1].type=uptimekuma + - homepage.widgets[1].url=http://uptimekuma.home + - homepage.widgets[1].slug=youreventslughere ``` You can add specify fields for e.g. the [CustomAPI](../widgets/services/customapi.md) widget by using array-style dot notation: From bb5cb3649159325d18fcf3d16ff3dcb57aab7f76 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Mar 2025 07:11:57 -0700 Subject: [PATCH 05/93] Fix: fix another tailwind automatic error --- src/pages/index.jsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index d203e5c9..e72a65d3 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -536,9 +536,7 @@ export default function Wrapper({ initialSettings, fallback }) { className={classNames( "fixed overflow-auto w-full h-full", backgroundBlur && - `backdrop-blur${initialSettings.background.blur.length ? "-" : ""}${ - initialSettings.background.blur - sm - }`, + `backdrop-blur${initialSettings.background.blur.length ? "-" : ""}${initialSettings.background.blur}`, backgroundSaturate && `backdrop-saturate-${initialSettings.background.saturate}`, backgroundBrightness && `backdrop-brightness-${initialSettings.background.brightness}`, )} From 1f282a1a93991fde9db402d5ebbe802435e18bad Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Mar 2025 09:41:25 -0700 Subject: [PATCH 06/93] Chore: migrate to pnpm only (#4907) --- Dockerfile | 8 +- Dockerfile-tilt | 2 +- README.md | 2 +- package-lock.json | 8767 --------------------------------------------- package.json | 1 + 5 files changed, 8 insertions(+), 8772 deletions(-) delete mode 100644 package-lock.json diff --git a/Dockerfile b/Dockerfile index dc32ae51..066351f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,6 +20,8 @@ RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm i FROM docker.io/node:22-alpine AS builder WORKDIR /app +RUN mkdir config + ARG BUILDTIME ARG VERSION ARG REVISION @@ -28,9 +30,9 @@ COPY --link --from=deps /app/node_modules ./node_modules/ COPY . . SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] -RUN npm run telemetry \ - && mkdir config \ - && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build +RUN npm install -g pnpm \ + && pnpm run telemetry \ + && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build # Production image, copy all the files and run next FROM docker.io/node:22-alpine AS runner diff --git a/Dockerfile-tilt b/Dockerfile-tilt index 431ef2a6..f6cdf4d2 100644 --- a/Dockerfile-tilt +++ b/Dockerfile-tilt @@ -10,7 +10,7 @@ RUN <<EOF apk add libc6-compat apk add --virtual .gyp python3 make g++ npm install -g pnpm - npm install -g next + pnpm install -g next EOF RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store" diff --git a/README.md b/README.md index cc758e59..2f1e7d9e 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ First, clone the repository: git clone https://github.com/gethomepage/homepage.git ``` -Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like): +Then install dependencies and build the production bundle: ```bash pnpm install diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index d2822959..00000000 --- a/package-lock.json +++ /dev/null @@ -1,8767 +0,0 @@ -{ - "name": "homepage", - "version": "0.10.9", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "homepage", - "version": "0.10.9", - "dependencies": { - "@headlessui/react": "^1.7.19", - "@kubernetes/client-node": "^1.0.0", - "cal-parser": "^1.0.2", - "classnames": "^2.5.1", - "compare-versions": "^6.1.1", - "dockerode": "^4.0.4", - "follow-redirects": "^1.15.9", - "gamedig": "^5.2.0", - "i18next": "^21.10.0", - "js-yaml": "^4.1.0", - "json-rpc-2.0": "^1.7.0", - "luxon": "^3.5.0", - "memory-cache": "^0.2.0", - "minecraftstatuspinger": "^1.2.1", - "next": "^15.1.7", - "next-i18next": "^12.1.0", - "ping": "^0.4.4", - "pretty-bytes": "^6.1.1", - "raw-body": "^3.0.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-i18next": "^11.18.6", - "react-icons": "^5.4.0", - "recharts": "^2.15.1", - "rrule": "^2.8.1", - "swr": "^1.3.0", - "systeminformation": "^5.25.11", - "tough-cookie": "^5.1.2", - "urbackup-server-api": "^0.8.9", - "winston": "^3.17.0", - "xml-js": "^1.6.11" - }, - "devDependencies": { - "@tailwindcss/forms": "^0.5.10", - "@tailwindcss/postcss": "^4.0.9", - "eslint": "^9.21.0", - "eslint-config-next": "^15.1.7", - "eslint-config-prettier": "^10.0.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-prettier": "^5.2.3", - "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "^5.1.0", - "postcss": "^8.5.2", - "prettier": "^3.5.2", - "tailwind-scrollbar": "^4.0.1", - "tailwindcss": "^4.0.9", - "typescript": "^5.7.3" - }, - "optionalDependencies": { - "osx-temperature-sensor": "^1.0.8" - } - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", - "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@balena/dockerignore": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", - "license": "Apache-2.0" - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "license": "MIT", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", - "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.12.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.5.tgz", - "integrity": "sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==", - "license": "Apache-2.0", - "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" - }, - "engines": { - "node": ">=12.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", - "license": "Apache-2.0", - "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@headlessui/react": { - "version": "1.7.19", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.19.tgz", - "integrity": "sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==", - "license": "MIT", - "dependencies": { - "@tanstack/react-virtual": "^3.0.0-beta.60", - "client-only": "^0.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18", - "react-dom": "^16 || ^17 || ^18" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/@jsep-plugin/assignment": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", - "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" - } - }, - "node_modules/@jsep-plugin/regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", - "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - }, - "peerDependencies": { - "jsep": "^0.4.0||^1.0.0" - } - }, - "node_modules/@kubernetes/client-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-1.0.0.tgz", - "integrity": "sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==", - "license": "Apache-2.0", - "dependencies": { - "@types/js-yaml": "^4.0.1", - "@types/node": "^22.0.0", - "@types/node-fetch": "^2.6.9", - "@types/stream-buffers": "^3.0.3", - "@types/tar": "^6.1.1", - "@types/ws": "^8.5.4", - "form-data": "^4.0.0", - "isomorphic-ws": "^5.0.0", - "js-yaml": "^4.1.0", - "jsonpath-plus": "^10.2.0", - "node-fetch": "^2.6.9", - "openid-client": "^6.1.3", - "rfc4648": "^1.3.0", - "stream-buffers": "^3.0.2", - "tar": "^7.0.0", - "tmp-promise": "^3.0.2", - "tslib": "^2.5.0", - "ws": "^8.18.0" - } - }, - "node_modules/@next/env": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.7.tgz", - "integrity": "sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.7.tgz", - "integrity": "sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "3.3.1" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.7.tgz", - "integrity": "sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.7.tgz", - "integrity": "sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.7.tgz", - "integrity": "sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.7.tgz", - "integrity": "sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.7.tgz", - "integrity": "sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.7.tgz", - "integrity": "sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.7.tgz", - "integrity": "sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.7.tgz", - "integrity": "sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "license": "BSD-3-Clause" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "license": "BSD-3-Clause" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.5.tgz", - "integrity": "sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tailwindcss/forms": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", - "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.9.tgz", - "integrity": "sha512-tOJvdI7XfJbARYhxX+0RArAhmuDcczTC46DGCEziqxzzbIaPnfYaIyRT31n4u8lROrsO7Q6u/K9bmQHL2uL1bQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "tailwindcss": "4.0.9" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.9.tgz", - "integrity": "sha512-eLizHmXFqHswJONwfqi/WZjtmWZpIalpvMlNhTM99/bkHtUs6IqgI1XQ0/W5eO2HiRQcIlXUogI2ycvKhVLNcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.9", - "@tailwindcss/oxide-darwin-arm64": "4.0.9", - "@tailwindcss/oxide-darwin-x64": "4.0.9", - "@tailwindcss/oxide-freebsd-x64": "4.0.9", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.9", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.9", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.9", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.9", - "@tailwindcss/oxide-linux-x64-musl": "4.0.9", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.9", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.9" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.9.tgz", - "integrity": "sha512-YBgy6+2flE/8dbtrdotVInhMVIxnHJPbAwa7U1gX4l2ThUIaPUp18LjB9wEH8wAGMBZUb//SzLtdXXNBHPUl6Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.9.tgz", - "integrity": "sha512-pWdl4J2dIHXALgy2jVkwKBmtEb73kqIfMpYmcgESr7oPQ+lbcQ4+tlPeVXaSAmang+vglAfFpXQCOvs/aGSqlw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.9.tgz", - "integrity": "sha512-4Dq3lKp0/C7vrRSkNPtBGVebEyWt9QPPlQctxJ0H3MDyiQYvzVYf8jKow7h5QkWNe8hbatEqljMj/Y0M+ERYJg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.9.tgz", - "integrity": "sha512-k7U1RwRODta8x0uealtVt3RoWAWqA+D5FAOsvVGpYoI6ObgmnzqWW6pnVwz70tL8UZ/QXjeMyiICXyjzB6OGtQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.9.tgz", - "integrity": "sha512-NDDjVweHz2zo4j+oS8y3KwKL5wGCZoXGA9ruJM982uVJLdsF8/1AeKvUwKRlMBpxHt1EdWJSAh8a0Mfhl28GlQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.9.tgz", - "integrity": "sha512-jk90UZ0jzJl3Dy1BhuFfRZ2KP9wVKMXPjmCtY4U6fF2LvrjP5gWFJj5VHzfzHonJexjrGe1lMzgtjriuZkxagg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.9.tgz", - "integrity": "sha512-3eMjyTC6HBxh9nRgOHzrc96PYh1/jWOwHZ3Kk0JN0Kl25BJ80Lj9HEvvwVDNTgPg154LdICwuFLuhfgH9DULmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.9.tgz", - "integrity": "sha512-v0D8WqI/c3WpWH1kq/HP0J899ATLdGZmENa2/emmNjubT0sWtEke9W9+wXeEoACuGAhF9i3PO5MeyditpDCiWQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.9.tgz", - "integrity": "sha512-Kvp0TCkfeXyeehqLJr7otsc4hd/BUPfcIGrQiwsTVCfaMfjQZCG7DjI+9/QqPZha8YapLA9UoIcUILRYO7NE1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.9.tgz", - "integrity": "sha512-m3+60T/7YvWekajNq/eexjhV8z10rswcz4BC9bioJ7YaN+7K8W2AmLmG0B79H14m6UHE571qB0XsPus4n0QVgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.9.tgz", - "integrity": "sha512-dpc05mSlqkwVNOUjGu/ZXd5U1XNch1kHFJ4/cHkZFvaW1RzbHmRt24gvM8/HC6IirMxNarzVw4IXVtvrOoZtxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.9.tgz", - "integrity": "sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.0.9", - "@tailwindcss/oxide": "4.0.9", - "lightningcss": "^1.29.1", - "postcss": "^8.4.41", - "tailwindcss": "4.0.9" - } - }, - "node_modules/@tanstack/react-virtual": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz", - "integrity": "sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.11.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@tanstack/virtual-core": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz", - "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", - "license": "MIT" - }, - "node_modules/@types/d3-color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", - "license": "MIT" - }, - "node_modules/@types/d3-ease": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", - "license": "MIT" - }, - "node_modules/@types/d3-interpolate": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", - "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", - "license": "MIT", - "dependencies": { - "@types/d3-color": "*" - } - }, - "node_modules/@types/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", - "license": "MIT" - }, - "node_modules/@types/d3-scale": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", - "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", - "license": "MIT", - "dependencies": { - "@types/d3-time": "*" - } - }, - "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", - "license": "MIT", - "dependencies": { - "@types/d3-path": "*" - } - }, - "node_modules/@types/d3-time": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", - "license": "MIT" - }, - "node_modules/@types/d3-timer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", - "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/js-yaml": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", - "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.10.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", - "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.0.8", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.8.tgz", - "integrity": "sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==", - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/stream-buffers": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.7.tgz", - "integrity": "sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tar": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz", - "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "minipass": "^4.0.0" - } - }, - "node_modules/@types/tar/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.21.0.tgz", - "integrity": "sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/type-utils": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.21.0.tgz", - "integrity": "sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz", - "integrity": "sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.21.0.tgz", - "integrity": "sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.21.0.tgz", - "integrity": "sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz", - "integrity": "sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/visitor-keys": "8.21.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/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, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.21.0.tgz", - "integrity": "sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.21.0", - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/typescript-estree": "8.21.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.8.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz", - "integrity": "sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.21.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/async-mutex": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", - "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", - "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/barse": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/barse/-/barse-0.4.3.tgz", - "integrity": "sha512-UEpvriJqAn8zuVinYICuKoPttZy3XxXEoqX/V2uYAL4zzJRuNzCK3+20nAu3YUIa2U7G53kf90wfBIp9/A+Odw==", - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.2" - } - }, - "node_modules/barse/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/barse/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/barse/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cal-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cal-parser/-/cal-parser-1.0.2.tgz", - "integrity": "sha512-wlQwcF0fl4eLclyGdncF9rcNNq0ipRYZGagG6h3LVgRXvCWE1fdMUaCLXwfC9YWoz9jKKbjQAq7TpO2Y3yrvmA==", - "license": "MIT", - "dependencies": { - "ical-date-parser": "^4.0.0", - "rrule": "^2.6.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001695", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", - "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "license": "MIT", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/colorspace/node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/colorspace/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/colorspace/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", - "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "license": "MIT" - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "license": "ISC", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "license": "ISC", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "license": "ISC", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", - "license": "MIT" - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/docker-modem": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz", - "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.1", - "readable-stream": "^3.5.0", - "split-ca": "^1.0.1", - "ssh2": "^1.15.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dockerode": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.4.tgz", - "integrity": "sha512-6GYP/EdzEY50HaOxTVTJ2p+mB5xDHTMJhS+UoGrVyS6VC+iQRh7kZ4FRpUYq6nziby7hPqWhOrFFUFTMUZJJ5w==", - "license": "Apache-2.0", - "dependencies": { - "@balena/dockerignore": "^1.0.2", - "@grpc/grpc-js": "^1.11.1", - "@grpc/proto-loader": "^0.7.13", - "docker-modem": "^5.0.6", - "protobufjs": "^7.3.2", - "tar-fs": "~2.0.1", - "uuid": "^10.0.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "license": "MIT" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", - "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.21.0", - "@eslint/plugin-kit": "^0.2.7", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-next": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.7.tgz", - "integrity": "sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@next/eslint-plugin-next": "15.1.7", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.2.tgz", - "integrity": "sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "build/bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", - "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", - "dev": true, - "license": "ISC", - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3", - "stable-hash": "^0.0.4" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz", - "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", - "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", - "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.14.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-to-promise": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.7.0.tgz", - "integrity": "sha512-VOBBfyaADfe378ZzG0tgkzmsvzUyeU5arehrFzNRt5yaASUDshgctTwSrPI17ocAwR3+YftsxRClHF+GBKFByQ==", - "deprecated": "Use promise-toolbox/fromEvent instead", - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", - "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gamedig": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/gamedig/-/gamedig-5.2.0.tgz", - "integrity": "sha512-YAk9KmQnbiThASSXYiL2LPeppgfthMjG8PIQK4UK8DveF/X/zhwYaUKqi+op05d0iLLoCzvx5J2Q2vUr+OVzQg==", - "license": "MIT", - "dependencies": { - "cheerio": "1.0.0-rc.12", - "gbxremote": "0.2.1", - "got": "13.0.0", - "iconv-lite": "0.6.3", - "long": "5.2.3", - "minimist": "1.2.8", - "seek-bzip": "2.0.0", - "varint": "6.0.0" - }, - "bin": { - "gamedig": "bin/gamedig.js" - }, - "engines": { - "node": ">=16.20.0" - } - }, - "node_modules/gamedig/node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "license": "Apache-2.0" - }, - "node_modules/gbxremote": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/gbxremote/-/gbxremote-0.2.1.tgz", - "integrity": "sha512-SMehu6Y6ndq2Qgp9VxAb8Np3f+UUD+RWoW2SAMaxzGS96rWXyr4T1GGkecO0HHtxeH1m7pEh4FJWB8a/6aM2XQ==", - "dependencies": { - "any-promise": "^1.1.0", - "barse": "~0.4.2", - "event-to-promise": "^0.7.0", - "string-to-stream": "^1.0.1", - "xmlrpc": "^1.3.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "license": "ISC", - "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/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/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==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "license": "MIT", - "dependencies": { - "void-elements": "3.1.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/i18next": { - "version": "21.10.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", - "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.17.2" - } - }, - "node_modules/i18next-fs-backend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-1.2.0.tgz", - "integrity": "sha512-pUx3AcgXCbur0jpFA7U67Z2RJflAcIi698Y8VL+phdOqUchahxriV3Cs+M6UkPNQSS/zPEzWLfdJ8EgjB7HVxg==", - "license": "MIT" - }, - "node_modules/ical-date-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ical-date-parser/-/ical-date-parser-4.0.0.tgz", - "integrity": "sha512-XRCK/FU1akC2ZaJOdKIeZI6BLLgzWUuE0pegSrrkEva89GOan5mNkLVqCU4EMhCJ9nkG5TLWdMXrVX1fNAkFzw==", - "license": "MIT" - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jose": { - "version": "5.9.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", - "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsep": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", - "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-rpc-2.0": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/json-rpc-2.0/-/json-rpc-2.0-1.7.0.tgz", - "integrity": "sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonpath-plus": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", - "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", - "license": "MIT", - "dependencies": { - "@jsep-plugin/assignment": "^1.3.0", - "@jsep-plugin/regex": "^1.0.4", - "jsep": "^1.4.0" - }, - "bin": { - "jsonpath": "bin/jsonpath-cli.js", - "jsonpath-plus": "bin/jsonpath-cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", - "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.29.1", - "lightningcss-darwin-x64": "1.29.1", - "lightningcss-freebsd-x64": "1.29.1", - "lightningcss-linux-arm-gnueabihf": "1.29.1", - "lightningcss-linux-arm64-gnu": "1.29.1", - "lightningcss-linux-arm64-musl": "1.29.1", - "lightningcss-linux-x64-gnu": "1.29.1", - "lightningcss-linux-x64-musl": "1.29.1", - "lightningcss-win32-arm64-msvc": "1.29.1", - "lightningcss-win32-x64-msvc": "1.29.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz", - "integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz", - "integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz", - "integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz", - "integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz", - "integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz", - "integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz", - "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz", - "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz", - "integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.29.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz", - "integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/long": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.4.tgz", - "integrity": "sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==", - "license": "Apache-2.0" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "license": "BSD-2-Clause" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minecraftstatuspinger": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minecraftstatuspinger/-/minecraftstatuspinger-1.2.1.tgz", - "integrity": "sha512-Qo/3TzV0UeULbVyqMqS9sUPbNKGFK7U7as1xlS/xeXryQQEwitOz5SkVhVphY4fCTacl5a+E4VXiTq6TPKYDKw==", - "license": "GPL-3.0-or-later", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/minizlib/node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/nan": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", - "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/next": { - "version": "15.1.7", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.7.tgz", - "integrity": "sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==", - "license": "MIT", - "dependencies": { - "@next/env": "15.1.7", - "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", - "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", - "styled-jsx": "5.1.6" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" - }, - "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.7", - "@next/swc-darwin-x64": "15.1.7", - "@next/swc-linux-arm64-gnu": "15.1.7", - "@next/swc-linux-arm64-musl": "15.1.7", - "@next/swc-linux-x64-gnu": "15.1.7", - "@next/swc-linux-x64-musl": "15.1.7", - "@next/swc-win32-arm64-msvc": "15.1.7", - "@next/swc-win32-x64-msvc": "15.1.7", - "sharp": "^0.33.5" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", - "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "@opentelemetry/api": { - "optional": true - }, - "@playwright/test": { - "optional": true - }, - "babel-plugin-react-compiler": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-i18next": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-12.1.0.tgz", - "integrity": "sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@types/hoist-non-react-statics": "^3.3.1", - "core-js": "^3", - "hoist-non-react-statics": "^3.3.2", - "i18next": "^21.9.1", - "i18next-fs-backend": "^1.1.5", - "react-i18next": "^11.18.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "next": ">= 10.0.0", - "react": ">= 16.8.0" - } - }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/oauth4webapi": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.4.tgz", - "integrity": "sha512-eVfN3nZNbok2s/ROifO0UAc5G8nRoLSbrcKJ09OqmucgnhXEfdIQOR4gq1eJH1rN3gV7rNw62bDEgftsgFtBEg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/openid-client": { - "version": "6.1.7", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.1.7.tgz", - "integrity": "sha512-JfY/KvQgOutmG2P+oVNKInE7zIh+im1MQOaO7g5CtNnTWMociA563WweiEMKfR9ry9XG3K2HGvj9wEqhCQkPMg==", - "license": "MIT", - "dependencies": { - "jose": "^5.9.6", - "oauth4webapi": "^3.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/osx-temperature-sensor": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/osx-temperature-sensor/-/osx-temperature-sensor-1.0.8.tgz", - "integrity": "sha512-Gl3b+bn7+oDDnqPa+4v/cg3yg9lnE8ppS7ivL3opBZh4i7h99JNmkm6zWmo0m2a83UUJu+C9D7lGP0OS8IlehA==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", - "license": "MIT", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/ping": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/ping/-/ping-0.4.4.tgz", - "integrity": "sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", - "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", - "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", - "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", - "license": "MIT", - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", - "hasInstallScript": true, - "license": "BSD-3-Clause", - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-i18next": { - "version": "11.18.6", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", - "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.14.5", - "html-parse-stringify": "^3.0.1" - }, - "peerDependencies": { - "i18next": ">= 19.0.0", - "react": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-icons": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.4.0.tgz", - "integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==", - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-smooth": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", - "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", - "license": "MIT", - "dependencies": { - "fast-equals": "^5.0.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/recharts": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.1.tgz", - "integrity": "sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.21", - "react-is": "^18.3.1", - "react-smooth": "^4.0.4", - "recharts-scale": "^0.4.4", - "tiny-invariant": "^1.3.1", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "license": "MIT", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/recharts/node_modules/react-is": { - "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==", - "license": "MIT" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfc4648": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.4.tgz", - "integrity": "sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==", - "license": "MIT" - }, - "node_modules/rrule": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/rrule/-/rrule-2.8.1.tgz", - "integrity": "sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==", - "license": "BSD-3-Clause", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/seek-bzip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-2.0.0.tgz", - "integrity": "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==", - "license": "MIT", - "dependencies": { - "commander": "^6.0.0" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-ca": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", - "license": "ISC" - }, - "node_modules/ssh2": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", - "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.20.0" - } - }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-buffers": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.3.tgz", - "integrity": "sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==", - "license": "Unlicense", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-to-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", - "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.1.0" - } - }, - "node_modules/string-to-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/string-to-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/string-to-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/string-to-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-jsx": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", - "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", - "dependencies": { - "client-only": "0.0.1" - }, - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swr": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz", - "integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==", - "license": "MIT", - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/systeminformation": { - "version": "5.25.11", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.25.11.tgz", - "integrity": "sha512-jI01fn/t47rrLTQB0FTlMCC+5dYx8o0RRF+R4BPiUNsvg5OdY0s9DKMFmJGrx5SwMZQ4cag0Gl6v8oycso9b/g==", - "license": "MIT", - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, - "node_modules/tailwind-scrollbar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-4.0.1.tgz", - "integrity": "sha512-j2ZfUI7p8xmSQdlqaCxEb4Mha8ErvWjDVyu2Ke4IstWprQ/6TmIz1GSLE62vsTlXwnMLYhuvbFbIFzaJGOGtMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prism-react-renderer": "^2.4.1" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "tailwindcss": "4.x" - } - }, - "node_modules/tailwindcss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.9.tgz", - "integrity": "sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tldts": { - "version": "6.1.82", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.82.tgz", - "integrity": "sha512-KCTjNL9F7j8MzxgfTgjT+v21oYH38OidFty7dH00maWANAI2IsLw2AnThtTJi9HKALHZKQQWnNebYheadacD+g==", - "license": "MIT", - "dependencies": { - "tldts-core": "^6.1.82" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "6.1.82", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.82.tgz", - "integrity": "sha512-Jabl32m21tt/d/PbDO88R43F8aY98Piiz6BVH9ShUlOAiiAELhEqwrAmBocjAqnCfoUeIsRU+h3IEzZd318F3w==", - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^6.1.32" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", - "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/urbackup-server-api": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/urbackup-server-api/-/urbackup-server-api-0.8.9.tgz", - "integrity": "sha512-Igu6A0xSZeMsiN6PWT7zG4aD+iJR5fXT/j5+xwAvnD/vCNfvVrettIsXv6MftxOajvTmtlgaYu8KDoH1EJQ6DQ==", - "license": "MIT", - "dependencies": { - "async-mutex": "^0.3.1", - "node-fetch": "^2.6.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/varint": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", - "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", - "license": "MIT" - }, - "node_modules/victory-vendor": { - "version": "36.9.2", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", - "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", - "license": "MIT AND ISC", - "dependencies": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlrpc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", - "integrity": "sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==", - "license": "MIT", - "dependencies": { - "sax": "1.2.x", - "xmlbuilder": "8.2.x" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.0.0" - } - }, - "node_modules/xmlrpc/node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "license": "ISC" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json index 8301672d..3958b250 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.10.9", "private": true, "scripts": { + "preinstall": "npx only-allow pnpm", "dev": "next dev", "build": "next build", "start": "next start", From bea02fc8c776d2c7c77c19196259cc68b4a1e529 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 11 Mar 2025 13:56:20 -0700 Subject: [PATCH 07/93] Update Dockerfile --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 066351f9..2c15dc6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,3 @@ -# syntax = docker/dockerfile:latest - # Install dependencies only when needed FROM docker.io/node:22-alpine AS deps From 544b9aef2f0caf3f2341b717638c250316c61fa9 Mon Sep 17 00:00:00 2001 From: Chris <67816022+vhsdream@users.noreply.github.com> Date: Wed, 12 Mar 2025 09:46:01 -0400 Subject: [PATCH 08/93] Feature: Hoarder service widget (#4913) --- docs/widgets/services/hoarder.md | 17 ++++++++ docs/widgets/services/index.md | 1 + mkdocs.yml | 1 + public/locales/en/common.json | 8 ++++ src/utils/proxy/handlers/credentialed.js | 1 + src/widgets/components.js | 1 + src/widgets/hoarder/component.jsx | 49 ++++++++++++++++++++++++ src/widgets/hoarder/widget.js | 15 ++++++++ src/widgets/widgets.js | 2 + 9 files changed, 95 insertions(+) create mode 100644 docs/widgets/services/hoarder.md create mode 100644 src/widgets/hoarder/component.jsx create mode 100644 src/widgets/hoarder/widget.js diff --git a/docs/widgets/services/hoarder.md b/docs/widgets/services/hoarder.md new file mode 100644 index 00000000..3e8c82ad --- /dev/null +++ b/docs/widgets/services/hoarder.md @@ -0,0 +1,17 @@ +--- +title: Hoarder +description: Hoarder Widget Configuration +--- + +Learn more about [Hoarder](https://hoarder.app). + +Generate an API key for your user at `User Settings > API Keys`. + +Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). + +```yaml +widget: + type: hoarder + url: http[s]://hoarder.host.or.ip[:port] + key: hoarderapikey +``` diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index 58b1409d..15caadc2 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -51,6 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat - [HDHomeRun](hdhomerun.md) - [Headscale](headscale.md) - [Healthchecks](healthchecks.md) +- [Hoarder](hoarder.md) - [Home Assistant](homeassistant.md) - [HomeBox](homebox.md) - [Homebridge](homebridge.md) diff --git a/mkdocs.yml b/mkdocs.yml index c5f3a038..01a5295b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,6 +74,7 @@ nav: - widgets/services/hdhomerun.md - widgets/services/headscale.md - widgets/services/healthchecks.md + - widgets/services/hoarder.md - widgets/services/homeassistant.md - widgets/services/homebox.md - widgets/services/homebridge.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index bd521385..2bc4cf9c 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1022,5 +1022,13 @@ "load": "Load", "bcharge":"Battery Charge", "timeleft":"Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 5e7d9dd1..056e919f 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -41,6 +41,7 @@ export default async function credentialedProxyHandler(req, res, map) { "cloudflared", "ghostfolio", "headscale", + "hoarder", "linkwarden", "mealie", "netalertx", diff --git a/src/widgets/components.js b/src/widgets/components.js index c34b9a4d..6c12d823 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -47,6 +47,7 @@ const components = { grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), headscale: dynamic(() => import("./headscale/component")), + hoarder: dynamic(() => import("./hoarder/component")), peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), homebox: dynamic(() => import("./homebox/component")), diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx new file mode 100644 index 00000000..99497d6f --- /dev/null +++ b/src/widgets/hoarder/component.jsx @@ -0,0 +1,49 @@ +import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export const hoarderDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; +const MAX_ALLOWED_FIELDS = 4; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + + const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); + + if (statsError) { + return <Container service={service} error={statsError} />; + } + + if (!widget.fields || widget.fields.length === 0) { + widget.fields = hoarderDefaultFields; + } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!statsData) { + return ( + <Container service={service}> + <Block label="hoarder.bookmarks" /> + <Block label="hoarder.favorites" /> + <Block label="hoarder.archived" /> + <Block label="hoarder.highlights" /> + <Block label="hoarder.lists" /> + <Block label="hoarder.tags" /> + </Container> + ); + } + + return ( + <Container service={service}> + <Block label="hoarder.bookmarks" value={t("common.number", { value: statsData.numBookmarks })} /> + <Block label="hoarder.favorites" value={t("common.number", { value: statsData.numFavorites })} /> + <Block label="hoarder.archived" value={t("common.number", { value: statsData.numArchived })} /> + <Block label="hoarder.highlights" value={t("common.number", { value: statsData.numHighlights })} /> + <Block label="hoarder.lists" value={t("common.number", { value: statsData.numLists })} /> + <Block label="hoarder.tags" value={t("common.number", { value: statsData.numTags })} /> + </Container> + ); +} diff --git a/src/widgets/hoarder/widget.js b/src/widgets/hoarder/widget.js new file mode 100644 index 00000000..8a3cfef0 --- /dev/null +++ b/src/widgets/hoarder/widget.js @@ -0,0 +1,15 @@ +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; +import { asJson } from "utils/proxy/api-helpers"; + +const widget = { + api: `{url}/api/v1/{endpoint}`, + proxyHandler: credentialedProxyHandler, + + mappings: { + stats: { + endpoint: "users/me/stats", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index bb7748ec..1537301c 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -41,6 +41,7 @@ import gotify from "./gotify/widget"; import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/widget"; import headscale from "./headscale/widget"; +import hoarder from "./hoarder/widget"; import homeassistant from "./homeassistant/widget"; import homebox from "./homebox/widget"; import homebridge from "./homebridge/widget"; @@ -176,6 +177,7 @@ const widgets = { grafana, hdhomerun, headscale, + hoarder, homeassistant, homebox, homebridge, From 859bd459a8a4b2f63e79bf51a53b0aa92b4d6b80 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 08:34:59 -0700 Subject: [PATCH 09/93] Feature: cache release data, allow disable release checking (#4917) --- docs/configs/settings.md | 8 +++++++- src/components/version.jsx | 17 +++++++++++++---- src/pages/api/releases.js | 10 +++++++++- src/pages/index.jsx | 2 +- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 5a32c139..93aa7f8f 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -447,7 +447,7 @@ quicklaunch: suggestionUrl: https://ac.ecosia.org/autocomplete?type=list&q= ``` -## Homepage Version +## Homepage Version & Update Checking By default the release version is displayed at the bottom of the page. To hide this, use the `hideVersion` setting, like so: @@ -455,6 +455,12 @@ By default the release version is displayed at the bottom of the page. To hide t hideVersion: true ``` +You can disable checking for new versions from GitHub (enabled by default) with: + +```yaml +disableUpdateCheck: true +``` + ## Log Path By default the homepage logfile is written to the a `logs` subdirectory of the `config` folder. In order to customize this path, you can set the `logpath` setting. A `logs` folder will be created in that location where the logfile will be written. diff --git a/src/components/version.jsx b/src/components/version.jsx index 9f0b5e83..b8ee1eb8 100644 --- a/src/components/version.jsx +++ b/src/components/version.jsx @@ -1,9 +1,12 @@ +import cache from "memory-cache"; import { useTranslation } from "next-i18next"; import useSWR from "swr"; import { compareVersions, validate } from "compare-versions"; import { MdNewReleases } from "react-icons/md"; -export default function Version() { +const LATEST_RELEASE_CACHE_KEY = "latestRelease"; + +export default function Version({ disableUpdateCheck = false }) { const { t, i18n } = useTranslation(); const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length @@ -12,8 +15,6 @@ export default function Version() { const revision = process.env.NEXT_PUBLIC_REVISION?.length ? process.env.NEXT_PUBLIC_REVISION : "dev"; const version = process.env.NEXT_PUBLIC_VERSION?.length ? process.env.NEXT_PUBLIC_VERSION : "dev"; - const { data: releaseData } = useSWR("/api/releases"); - // use Intl.DateTimeFormat to format the date const formatDate = (date) => { const options = { @@ -24,7 +25,15 @@ export default function Version() { return new Intl.DateTimeFormat(i18n.language, options).format(new Date(date)); }; - const latestRelease = releaseData?.[0]; + let latestRelease = cache.get(LATEST_RELEASE_CACHE_KEY); + + const { data: releaseData } = useSWR(latestRelease || disableUpdateCheck ? null : "/api/releases"); + + if (releaseData) { + latestRelease = releaseData?.[0]; + // cache the latest release for 1h + cache.put(LATEST_RELEASE_CACHE_KEY, latestRelease, 3600000); + } return ( <div id="version" className="flex flex-row items-center"> diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js index 14d3051d..f15930c2 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,6 +1,14 @@ import cachedFetch from "utils/proxy/cached-fetch"; +import createLogger from "utils/logger"; + +const logger = createLogger("releases"); export default async function handler(req, res) { const releasesURL = "https://api.github.com/repos/gethomepage/homepage/releases"; - return res.send(await cachedFetch(releasesURL, 5)); + try { + return res.send(await cachedFetch(releasesURL, 5)); + } catch (e) { + logger.error(`Error checking GitHub releases: ${e}`); + return res.send([]); + } } diff --git a/src/pages/index.jsx b/src/pages/index.jsx index e72a65d3..5055a22b 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -480,7 +480,7 @@ function Home({ initialSettings }) { </div> <div id="version" className="flex mt-4 w-full justify-end"> - {!settings.hideVersion && <Version />} + {!settings.hideVersion && <Version disableUpdateCheck={settings.disableUpdateCheck} />} </div> </div> </div> From 9c1ac747beefde3a9edf65295720f9e22e45347b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 08:45:52 -0700 Subject: [PATCH 10/93] New Crowdin translations by GitHub Action (#4599) Co-authored-by: Crowdin Bot <support+bot@crowdin.com> --- public/locales/af/common.json | 24 +- public/locales/ar/common.json | 24 +- public/locales/bg/common.json | 738 +++++++++++++++-------------- public/locales/ca/common.json | 24 +- public/locales/cs/common.json | 24 +- public/locales/da/common.json | 24 +- public/locales/de/common.json | 62 ++- public/locales/el/common.json | 24 +- public/locales/eo/common.json | 24 +- public/locales/es/common.json | 24 +- public/locales/eu/common.json | 24 +- public/locales/fi/common.json | 24 +- public/locales/fr/common.json | 244 +++++----- public/locales/he/common.json | 24 +- public/locales/hi/common.json | 24 +- public/locales/hr/common.json | 24 +- public/locales/hu/common.json | 24 +- public/locales/id/common.json | 168 ++++--- public/locales/it/common.json | 24 +- public/locales/ja/common.json | 24 +- public/locales/ko/common.json | 24 +- public/locales/lv/common.json | 24 +- public/locales/ms/common.json | 24 +- public/locales/nl/common.json | 24 +- public/locales/no/common.json | 24 +- public/locales/pl/common.json | 24 +- public/locales/pt/common.json | 24 +- public/locales/pt_BR/common.json | 24 +- public/locales/ro/common.json | 24 +- public/locales/ru/common.json | 24 +- public/locales/sk/common.json | 24 +- public/locales/sl/common.json | 24 +- public/locales/sr/common.json | 24 +- public/locales/sv/common.json | 24 +- public/locales/te/common.json | 24 +- public/locales/th/common.json | 24 +- public/locales/tr/common.json | 24 +- public/locales/uk/common.json | 30 +- public/locales/vi/common.json | 24 +- public/locales/yue/common.json | 24 +- public/locales/zh-Hans/common.json | 56 ++- public/locales/zh-Hant/common.json | 24 +- 42 files changed, 1501 insertions(+), 661 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 4fe60722..20f3d170 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -148,7 +148,9 @@ "up": "Op", "received": "Ontvang", "sent": "Gestuur", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Voorvoegsel" }, "caddy": { "upstreams": "Stroomop", @@ -176,7 +178,7 @@ "connectedAp": "Gekoppelde APs", "activeUser": "Aktiewe toestelle", "alerts": "Waarskuwings", - "connectedGateway": "Gekoppelde poorte", + "connectedGateways": "Gekoppelde poorte", "connectedSwitches": "Gekoppelde skakelaars" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Verwerk", "time": "Tyd" }, + "firefly": { + "networth": "Netto Waarde", + "budget": "Begroting" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Databronne", @@ -1010,5 +1016,19 @@ "issues": "Kwessies", "merges": "Saamvleg Versoeke", "projects": "Projekte" + }, + "apcups": { + "status": "Status", + "load": "Las", + "bcharge": "Batterylading", + "timeleft": "Oorblywende Tyd" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Merkers" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 6c40bb32..7c7344f8 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -148,7 +148,9 @@ "up": "يعمل", "received": "تم الإستلام", "sent": "تم الإرسال", - "externalIPAddress": "IP الخارجي" + "externalIPAddress": "IP الخارجي", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "تدفق", @@ -176,7 +178,7 @@ "connectedAp": "المتصلة APs", "activeUser": "الأجهزة النشطة", "alerts": "تنبيهات", - "connectedGateway": "البوابات المتصلة", + "connectedGateways": "Connected gateways", "connectedSwitches": "مفاتيح التبديل المتصلة" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "معالجة", "time": "الوقت" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "لوحات المعلومات", "datasources": "مصادر البيانات", @@ -1010,5 +1016,19 @@ "issues": "المُشكِلات", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "الحالة", + "load": "الضغط", + "bcharge": "شحن البطارية", + "timeleft": "الوقت المتبقي" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "التصنيفات" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 3016b0a5..74505cc6 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -14,11 +14,11 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "duration": "{{value, duration}}", - "months": "mo", - "days": "d", + "months": "м", + "days": "д", "hours": "ч", - "minutes": "m", - "seconds": "s" + "minutes": "мин", + "seconds": "сек" }, "widget": { "missing_type": "Липсваща приставка: {{type}}", @@ -26,8 +26,8 @@ "information": "Информация", "status": "Статус", "url": "URL", - "raw_error": "Raw Error", - "response_data": "Response Data" + "raw_error": "Грешка", + "response_data": "Отговор" }, "weather": { "current": "Текущо местоположение", @@ -51,7 +51,7 @@ }, "unifi": { "users": "Потребители", - "uptime": "Uptime", + "uptime": "Ъптайм", "days": "Дни", "wan": "WAN", "lan": "LAN", @@ -64,103 +64,105 @@ "up": "Онлайн", "down": "DOWN", "wait": "Моля изчакайте", - "empty_data": "Subsystem status unknown" + "empty_data": "Неизвестен статус на подсистема" }, "docker": { - "rx": "RX", - "tx": "TX", + "rx": "ПЧ", + "tx": "ИЗ", "mem": "Памет", "cpu": "Процесор", - "running": "Running", + "running": "Работи", "offline": "Изключен", "error": "Грешка", "unknown": "Неизв.", - "healthy": "Healthy", - "starting": "Starting", - "unhealthy": "Unhealthy", - "not_found": "Not Found", - "exited": "Exited", - "partial": "Partial" + "healthy": "Здрав", + "starting": "Стартиращ", + "unhealthy": "Нездравословен", + "not_found": "Не е открит", + "exited": "Напуснал", + "partial": "Частично" }, "ping": { "error": "Грешка", - "ping": "Ping", + "ping": "Пинг", "down": "Down", "up": "Up", - "not_available": "Not Available" + "not_available": "Не е налично" }, "siteMonitor": { - "http_status": "HTTP status", + "http_status": "HTTP статус", "error": "Грешка", - "response": "Response", + "response": "Отговор", "down": "Down", "up": "Up", - "not_available": "Not Available" + "not_available": "Не е налично" }, "emby": { "playing": "Възпроизвежда", "transcoding": "Конвертира", - "bitrate": "Bitrate", + "bitrate": "Битрейт", "no_active": "Няма активни потоци", "movies": "Филми", - "series": "Series", - "episodes": "Episodes", - "songs": "Songs" + "series": "Сериали", + "episodes": "Епизоди", + "songs": "Песни" }, "esphome": { "offline": "Изключен", "offline_alt": "Изключен", - "online": "Online", + "online": "Онлайн", "total": "Общо", "unknown": "Неизв." }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", - "kilowatt": "kW" + "pv_power": "Произведено", + "battery_soc": "Батерия", + "grid_power": "Мрежа", + "home_power": "Потребление", + "charge_power": "Зарядно", + "kilowatt": "кВ" }, "flood": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Изтегляне", + "upload": "Качване", + "leech": "Лийч", + "seed": "Сийд" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Абонаменти", + "unread": "Непрочетени" }, "fritzbox": { "connectionStatus": "Статус", - "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", - "connectionStatusAuthenticating": "Authenticating", - "connectionStatusPendingDisconnect": "Pending Disconnect", - "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Connected", - "uptime": "Uptime", - "maxDown": "Max. Down", - "maxUp": "Max. Up", + "connectionStatusUnconfigured": "Неконфигуриран", + "connectionStatusConnecting": "Свързване", + "connectionStatusAuthenticating": "Удостоверяване", + "connectionStatusPendingDisconnect": "Изчава прекратяване на връзка", + "connectionStatusDisconnecting": "Прекъсване на връзката", + "connectionStatusDisconnected": "Не е свързан", + "connectionStatusConnected": "Свързан", + "uptime": "Ъптайм", + "maxDown": "Макс сваляне", + "maxUp": "Макс качване", "down": "Down", "up": "Up", - "received": "Received", - "sent": "Sent", - "externalIPAddress": "Ext. IP" + "received": "Получени", + "sent": "Изпратени", + "externalIPAddress": "Външно IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", - "requests": "Current requests", - "requests_failed": "Failed requests" + "requests": "Текущи заявки", + "requests_failed": "Провалени заявки" }, "changedetectionio": { - "totalObserved": "Total Observed", - "diffsDetected": "Diffs Detected" + "totalObserved": "Общо наблюдавани", + "diffsDetected": "Открити разлики" }, "channelsdvrserver": { - "shows": "Shows", + "shows": "Шоута", "recordings": "Записи", "scheduled": "Планирано", "passes": "Passes" @@ -168,19 +170,19 @@ "tautulli": { "playing": "Възпроизвежда", "transcoding": "Конвертира", - "bitrate": "Bitrate", + "bitrate": "Битрейт", "no_active": "Няма активни потоци", "plex_connection_error": "Провери връзка с Plex" }, "omada": { - "connectedAp": "Connected APs", + "connectedAp": "Свързани точки", "activeUser": "Активни устройства", "alerts": "Предупреждения", - "connectedGateway": "Connected gateways", - "connectedSwitches": "Connected switches" + "connectedGateways": "Connected gateways", + "connectedSwitches": "Свързани суичове" }, "nzbget": { - "rate": "Rate", + "rate": "Скорост", "remaining": "Остава", "downloaded": "Изтеглени" }, @@ -191,55 +193,55 @@ "tv": "Сериали" }, "sabnzbd": { - "rate": "Rate", + "rate": "Скорост", "queue": "Опашка", "timeleft": "Оставащо Време" }, "rutorrent": { "active": "Акитивен", - "upload": "Upload", - "download": "Download" + "upload": "Качване", + "download": "Изтегляне" }, "transmission": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Изтегляне", + "upload": "Качване", + "leech": "Лийч", + "seed": "Сийд" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Изтегляне", + "upload": "Качване", + "leech": "Лийч", + "seed": "Сийд" }, "qnap": { - "cpuUsage": "CPU Usage", - "memUsage": "MEM Usage", - "systemTempC": "System Temp", - "poolUsage": "Pool Usage", + "cpuUsage": "CPU употреба", + "memUsage": "Упортеба памет", + "systemTempC": "Системна темп", + "poolUsage": "Употреба на пул", "volumeUsage": "Volume Usage", "invalid": "Невалидни" }, "deluge": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Изтегляне", + "upload": "Качване", + "leech": "Лийч", + "seed": "Сийд" }, "develancacheui": { "cachehitbytes": "Cache Hit Bytes", "cachemissbytes": "Cache Miss Bytes" }, "downloadstation": { - "download": "Download", - "upload": "Upload", - "leech": "Leech", - "seed": "Seed" + "download": "Изтегляне", + "upload": "Качване", + "leech": "Лийч", + "seed": "Сийд" }, "sonarr": { "wanted": "Търсени", "queued": "В изчакване", - "series": "Series", + "series": "Сериали", "queue": "Опашка", "unknown": "Неизв." }, @@ -283,7 +285,7 @@ }, "netalertx": { "total": "Общо", - "connected": "Connected", + "connected": "Свързан", "new_devices": "New Devices", "down_alerts": "Down Alerts" }, @@ -300,12 +302,12 @@ "latency": "Latency" }, "speedtest": { - "upload": "Upload", - "download": "Download", - "ping": "Ping" + "upload": "Качване", + "download": "Изтегляне", + "ping": "Пинг" }, "portainer": { - "running": "Running", + "running": "Работи", "stopped": "Спрян", "total": "Общо" }, @@ -313,15 +315,15 @@ "download": "Изтеглени", "nondownload": "Non-Downloaded", "read": "Read", - "unread": "Unread", + "unread": "Непрочетени", "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedunread": "Изтеглени и непрочетени", + "nondownloadedread": "Не-изтеглени и прочетени", + "nondownloadedunread": "Не-изтеглени и непрочетени" }, "tailscale": { - "address": "Address", - "expires": "Expires", + "address": "Адрес", + "expires": "Изтича", "never": "Никога", "last_seen": "Последно видян", "now": "Сега", @@ -335,26 +337,26 @@ }, "technitium": { "totalQueries": "Заявки", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", + "totalNoError": "Успех", + "totalServerFailure": "Грешки", + "totalNxDomain": "NX домейни", + "totalRefused": "Отказани", "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", + "totalRecursive": "Рекурсивни", + "totalCached": "Кеширани", "totalBlocked": "Блокирани", - "totalDropped": "Dropped", - "totalClients": "Clients" + "totalDropped": "Отпаднали", + "totalClients": "Клиенти" }, "tdarr": { "queue": "Опашка", - "processed": "Processed", - "errored": "Errored", - "saved": "Saved" + "processed": "Обработени", + "errored": "С грешки", + "saved": "Запазени" }, "traefik": { - "routers": "Routers", - "services": "Services", + "routers": "Рутери", + "services": "Услуги", "middleware": "Middleware" }, "navidrome": { @@ -367,33 +369,33 @@ "total": "Общо" }, "coinmarketcap": { - "configure": "Configure one or more crypto currencies to track", + "configure": "Настрой за следене една или повече крипто валути", "1hour": "1 Час", "1day": "1 Ден", "7days": "7 Дена", - "30days": "30 Days" + "30days": "30 дни" }, "gotify": { - "apps": "Applications", - "clients": "Clients", - "messages": "Messages" + "apps": "Приложения", + "clients": "Клиенти", + "messages": "Съобщения" }, "prowlarr": { - "enableIndexers": "Indexers", + "enableIndexers": "Индексъри", "numberOfGrabs": "Grabs", "numberOfQueries": "Заявки", "numberOfFailGrabs": "Fail Grabs", "numberOfFailQueries": "Fail Queries" }, "jackett": { - "configured": "Configured", - "errored": "Errored" + "configured": "Настроен", + "errored": "С грешки" }, "strelaysrv": { - "numActiveSessions": "Sessions", + "numActiveSessions": "Сесии", "numConnections": "Connections", "dataRelayed": "Relayed", - "transferRate": "Rate" + "transferRate": "Скорост" }, "mastodon": { "user_count": "Потребители", @@ -403,18 +405,18 @@ "medusa": { "wanted": "Търсени", "queued": "В изчакване", - "series": "Series" + "series": "Сериали" }, "minecraft": { "players": "Играчи", "version": "Version", "status": "Статус", - "up": "Online", + "up": "Онлайн", "down": "Изключен" }, "miniflux": { "read": "Read", - "unread": "Unread" + "unread": "Непрочетени" }, "authentik": { "users": "Потребители", @@ -438,7 +440,7 @@ "total": "Общо", "free": "Свободни", "used": "Заети", - "days": "d", + "days": "д", "hours": "ч", "crit": "Crit", "read": "Read", @@ -451,10 +453,10 @@ "bookmark": "Bookmark", "service": "Service", "search": "Търсене", - "custom": "Custom", - "visit": "Visit", + "custom": "По избор", + "visit": "Посети", "url": "URL", - "searchsuggestion": "Suggestion" + "searchsuggestion": "Предложение" }, "wmo": { "0-day": "Слънчево", @@ -463,62 +465,62 @@ "1-night": "Предимно Ясно", "2-day": "Частична Облачност", "2-night": "Частична Облачност", - "3-day": "Cloudy", - "3-night": "Cloudy", - "45-day": "Foggy", - "45-night": "Foggy", - "48-day": "Foggy", - "48-night": "Foggy", - "51-day": "Light Drizzle", - "51-night": "Light Drizzle", - "53-day": "Drizzle", - "53-night": "Drizzle", - "55-day": "Heavy Drizzle", - "55-night": "Heavy Drizzle", - "56-day": "Light Freezing Drizzle", - "56-night": "Light Freezing Drizzle", - "57-day": "Freezing Drizzle", - "57-night": "Freezing Drizzle", - "61-day": "Light Rain", - "61-night": "Light Rain", - "63-day": "Rain", - "63-night": "Rain", - "65-day": "Heavy Rain", - "65-night": "Heavy Rain", - "66-day": "Freezing Rain", - "66-night": "Freezing Rain", - "67-day": "Freezing Rain", - "67-night": "Freezing Rain", - "71-day": "Light Snow", - "71-night": "Light Snow", - "73-day": "Snow", - "73-night": "Snow", - "75-day": "Heavy Snow", - "75-night": "Heavy Snow", + "3-day": "Облачно", + "3-night": "Облачно", + "45-day": "Мъгливо", + "45-night": "Мъгливо", + "48-day": "Мъгливо", + "48-night": "Мъгливо", + "51-day": "Слабо преваляване", + "51-night": "Слабо преваляване", + "53-day": "Преваляване", + "53-night": "Преваляване", + "55-day": "Тежко преваляване", + "55-night": "Тежко преваляване", + "56-day": "Слабо студено преваляване", + "56-night": "Слабо студено преваляване", + "57-day": "Студено преваляване", + "57-night": "Студено преваляване", + "61-day": "Слаб дъжд", + "61-night": "Слаб дъжд", + "63-day": "Дъжд", + "63-night": "Дъжд", + "65-day": "Силен дъжд", + "65-night": "Силен дъжд", + "66-day": "Леден дъжд", + "66-night": "Леден дъжд", + "67-day": "Леден дъжд", + "67-night": "Леден дъжд", + "71-day": "Лек снеговалеж", + "71-night": "Лек снеговалеж", + "73-day": "Снеговалеж", + "73-night": "Снеговалеж", + "75-day": "Силен снеговалеж", + "75-night": "Силен снеговалеж", "77-day": "Snow Grains", "77-night": "Snow Grains", - "80-day": "Light Showers", - "80-night": "Light Showers", - "81-day": "Showers", - "81-night": "Showers", - "82-day": "Heavy Showers", - "82-night": "Heavy Showers", - "85-day": "Snow Showers", - "85-night": "Snow Showers", - "86-day": "Snow Showers", - "86-night": "Snow Showers", - "95-day": "Thunderstorm", - "95-night": "Thunderstorm", - "96-day": "Thunderstorm With Hail", - "96-night": "Thunderstorm With Hail", - "99-day": "Thunderstorm With Hail", - "99-night": "Thunderstorm With Hail" + "80-day": "Лек дъжд", + "80-night": "Лек дъжд", + "81-day": "Дъжд", + "81-night": "Дъжд", + "82-day": "Силен дъжд", + "82-night": "Силен дъжд", + "85-day": "Снеговалеж", + "85-night": "Снеговалеж", + "86-day": "Снеговалеж", + "86-night": "Снеговалеж", + "95-day": "Гръмотевична буря", + "95-night": "Гръмотевична буря", + "96-day": "Гръмотевична буря с градушка", + "96-night": "Гръмотевична буря с градушка", + "99-day": "Гръмотевична буря с градушка", + "99-night": "Гръмотевична буря с градушка" }, "homebridge": { - "available_update": "System", - "updates": "Updates", - "update_available": "Update Available", - "up_to_date": "Up to Date", + "available_update": "Система", + "updates": "Актуализации", + "update_available": "Налична актуализация", + "up_to_date": "Актуално", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", "up": "Up", @@ -530,188 +532,192 @@ "up": "Up", "grace": "Гратисен период", "down": "Down", - "paused": "Paused", + "paused": "На пауза", "status": "Статус", - "last_ping": "Last Ping", - "never": "No pings yet" + "last_ping": "Последен пинг", + "never": "Няма пинг все още" }, "watchtower": { - "containers_scanned": "Scanned", - "containers_updated": "Updated", - "containers_failed": "Failed" + "containers_scanned": "Сканирани", + "containers_updated": "Обновени", + "containers_failed": "Провалени" }, "autobrr": { "approvedPushes": "Одобрен", - "rejectedPushes": "Rejected", + "rejectedPushes": "Отхвърлени", "filters": "Филтри", - "indexers": "Indexers" + "indexers": "Индексъри" }, "tubearchivist": { "downloads": "Опашка", "videos": "Видео", "channels": "Канали", - "playlists": "Playlists" + "playlists": "Плейлист" }, "truenas": { - "load": "System Load", - "uptime": "Uptime", + "load": "Натоварване на системата", + "uptime": "Ъптайм", "alerts": "Предупреждения" }, "pyload": { - "speed": "Speed", + "speed": "Скорост", "active": "Акитивен", "queue": "Опашка", "total": "Общо" }, "gluetun": { - "public_ip": "Public IP", + "public_ip": "Публично IP", "region": "Регион", "country": "Страна" }, "hdhomerun": { "channels": "Канали", "hd": "HD", - "tunerCount": "Tuners", - "channelNumber": "Channel", - "channelNetwork": "Network", - "signalStrength": "Strength", - "signalQuality": "Quality", - "symbolQuality": "Quality", - "networkRate": "Bitrate", - "clientIP": "Client" + "tunerCount": "Тунери", + "channelNumber": "Канал", + "channelNetwork": "Мрежа", + "signalStrength": "Сила", + "signalQuality": "Качество", + "symbolQuality": "Качество", + "networkRate": "Битрейт", + "clientIP": "Клиент" }, "scrutiny": { - "passed": "Passed", - "failed": "Failed", + "passed": "Одобрени", + "failed": "Провалени", "unknown": "Неизв." }, "paperlessngx": { - "inbox": "Inbox", + "inbox": "Входящи", "total": "Общо" }, "peanut": { - "battery_charge": "Battery Charge", - "ups_load": "UPS Load", - "ups_status": "UPS Status", - "online": "Online", - "on_battery": "On Battery", - "low_battery": "Low Battery" + "battery_charge": "Заряд на батерията", + "ups_load": "Натоварване на UPS", + "ups_status": "Статус на UPS", + "online": "Онлайн", + "on_battery": "На батерия", + "low_battery": "Слаба батерия" }, "nextdns": { "wait": "Моля Изчакайте", - "no_devices": "No Device Data Received" + "no_devices": "Не е получена дата от устройство" }, "mikrotik": { - "cpuLoad": "CPU Load", - "memoryUsed": "Memory Used", - "uptime": "Uptime", + "cpuLoad": "Натоварване на процесор", + "memoryUsed": "Изполвана памет", + "uptime": "Ъптайм", "numberOfLeases": "Leases" }, "xteve": { - "streams_all": "All Streams", + "streams_all": "Всички потоци", "streams_active": "Активни Потоци", - "streams_xepg": "XEPG Channels" + "streams_xepg": "XEPG канали" }, "opendtu": { - "yieldDay": "Today", - "absolutePower": "Power", - "relativePower": "Power %", - "limit": "Limit" + "yieldDay": "Днес", + "absolutePower": "Захранване", + "relativePower": "Захранване %", + "limit": "Лимит" }, "opnsense": { - "cpu": "CPU Load", - "memory": "Active Memory", - "wanUpload": "WAN Upload", - "wanDownload": "WAN Download" + "cpu": "Натоварване на процесор", + "memory": "Активна памет", + "wanUpload": "WAN качване", + "wanDownload": "WAN теглене" }, "moonraker": { - "printer_state": "Printer State", - "print_status": "Print Status", - "print_progress": "Progress", - "layers": "Layers" + "printer_state": "Статус на принтер", + "print_status": "Статус на принта", + "print_progress": "Напредък", + "layers": "Слоеве" }, "octoprint": { "printer_state": "Статус", - "temp_tool": "Tool temp", - "temp_bed": "Bed temp", - "job_completion": "Completion" + "temp_tool": "Температур на уреда", + "temp_bed": "Температура на леглото", + "job_completion": "Завършване" }, "cloudflared": { "origin_ip": "Origin IP", "status": "Статус" }, "pfsense": { - "load": "Load Avg", - "memory": "Mem Usage", - "wanStatus": "WAN Status", + "load": "Средно натоварване", + "memory": "Употреба памет", + "wanStatus": "WAN статус", "up": "Up", "down": "Down", "temp": "Температура", - "disk": "Disk Usage", + "disk": "Употреба на диска", "wanIP": "WAN IP" }, "proxmoxbackupserver": { - "datastore_usage": "Datastore", - "failed_tasks_24h": "Failed Tasks 24h", + "datastore_usage": "База данни", + "failed_tasks_24h": "Провалени задачи 24ч", "cpu_usage": "Процесор", - "memory_usage": "Memory" + "memory_usage": "Памет" }, "immich": { "users": "Потребители", - "photos": "Photos", + "photos": "Снимки", "videos": "Видео", - "storage": "Storage" + "storage": "Хранилище" }, "uptimekuma": { "up": "Sites Up", "down": "Sites Down", - "uptime": "Uptime", - "incident": "Incident", - "m": "m" + "uptime": "Ъптайм", + "incident": "Инцидент", + "m": "мин" }, "atsumeru": { - "series": "Series", - "archives": "Archives", - "chapters": "Chapters", - "categories": "Categories" + "series": "Сериали", + "archives": "Архиви", + "chapters": "Глави", + "categories": "Категории" }, "komga": { - "libraries": "Libraries", - "series": "Series", + "libraries": "Библиотеки", + "series": "Сериали", "books": "Книги" }, "diskstation": { "days": "Дни", - "uptime": "Uptime", + "uptime": "Ъптайм", "volumeAvailable": "Наличен" }, "mylar": { - "series": "Series", - "issues": "Issues", + "series": "Сериали", + "issues": "Издания", "wanted": "Търсени" }, "photoprism": { "albums": "Албуми", - "photos": "Photos", + "photos": "Снимки", "videos": "Видео", - "people": "People" + "people": "Хора" }, "fileflows": { "queue": "Опашка", "processing": "Processing", - "processed": "Processed", - "time": "Time" + "processed": "Обработени", + "time": "Време" + }, + "firefly": { + "networth": "Net Worth", + "budget": "Бюджет" }, "grafana": { "dashboards": "Dashboards", - "datasources": "Data Sources", + "datasources": "Източници на данни", "totalalerts": "Total Alerts", "alertstriggered": "Alerts Triggered" }, "nextcloud": { - "cpuload": "Cpu Load", - "memoryusage": "Memory Usage", - "freespace": "Free Space", + "cpuload": "Натоварване на процесор", + "memoryusage": "Употреба на паметта", + "freespace": "Свободно пространство", "activeusers": "Активни потребители", "numfiles": "Файлове", "numshares": "Споделени записи" @@ -719,18 +725,18 @@ "kopia": { "status": "Статус", "size": "Размер", - "lastrun": "Last Run", - "nextrun": "Next Run", - "failed": "Failed" + "lastrun": "Последно стартиране", + "nextrun": "Следващо стартиране", + "failed": "Провалени" }, "unmanic": { - "active_workers": "Active Workers", - "total_workers": "Total Workers", - "records_total": "Queue Length" + "active_workers": "Активни работници", + "total_workers": "Общо работници", + "records_total": "Дължина на опашка" }, "pterodactyl": { - "servers": "Servers", - "nodes": "Nodes" + "servers": "Сървъри", + "nodes": "Възли" }, "prometheus": { "targets_up": "Targets Up", @@ -740,15 +746,15 @@ "gatus": { "up": "Sites Up", "down": "Sites Down", - "uptime": "Uptime" + "uptime": "Ъптайм" }, "ghostfolio": { - "gross_percent_today": "Today", - "gross_percent_1y": "One year", + "gross_percent_today": "Днес", + "gross_percent_1y": "Една година", "gross_percent_max": "All time" }, "audiobookshelf": { - "podcasts": "Podcasts", + "podcasts": "Подкасти", "books": "Книги", "podcastsDuration": "Продължителност", "booksDuration": "Продължителност" @@ -759,49 +765,49 @@ "switches_on": "Switches On" }, "whatsupdocker": { - "monitoring": "Monitoring", - "updates": "Updates" + "monitoring": "Наблюдение", + "updates": "Актуализации" }, "calibreweb": { "books": "Книги", - "authors": "Authors", - "categories": "Categories", - "series": "Series" + "authors": "Автори", + "categories": "Категории", + "series": "Сериали" }, "jdownloader": { "downloadCount": "Опашка", "downloadBytesRemaining": "Остава", "downloadTotalBytes": "Размер", - "downloadSpeed": "Speed" + "downloadSpeed": "Скорост" }, "kavita": { - "seriesCount": "Series", + "seriesCount": "Сериали", "totalFiles": "Файлове" }, "azuredevops": { - "result": "Result", + "result": "Резултат", "status": "Статус", "buildId": "Build ID", - "succeeded": "Succeeded", - "notStarted": "Not Started", - "failed": "Failed", - "canceled": "Canceled", - "inProgress": "In Progress", + "succeeded": "Успешни", + "notStarted": "Не стартирани", + "failed": "Провалени", + "canceled": "Отказани", + "inProgress": "В процес", "totalPrs": "Total PRs", "myPrs": "My PRs", "approved": "Одобрен" }, "gamedig": { "status": "Статус", - "online": "Online", + "online": "Онлайн", "offline": "Изключен", - "name": "Name", + "name": "Име", "map": "Карта", "currentPlayers": "Текущи играчи", "players": "Играчи", "maxPlayers": "Максимален брой играчи", "bots": "Ботове", - "ping": "Ping" + "ping": "Пинг" }, "urbackup": { "ok": "ОК", @@ -812,87 +818,87 @@ "mealie": { "recipes": "Рецепти", "users": "Потребители", - "categories": "Categories", + "categories": "Категории", "tags": "Тагове" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Изтегляне", "total": "Общо", - "running": "Running", + "running": "Работи", "stopped": "Спрян", - "passed": "Passed", - "failed": "Failed" + "passed": "Одобрени", + "failed": "Провалени" }, "openwrt": { - "uptime": "Uptime", + "uptime": "Ъптайм", "cpuLoad": "CPU Load Avg (5m)", "up": "Up", "down": "Down", - "bytesTx": "Transmitted", - "bytesRx": "Received" + "bytesTx": "Изпратено", + "bytesRx": "Получени" }, "uptimerobot": { "status": "Статус", - "uptime": "Uptime", - "lastDown": "Last Downtime", - "downDuration": "Downtime Duration", + "uptime": "Ъптайм", + "lastDown": "Последно изключване", + "downDuration": "Продължителност на изключване", "sitesUp": "Sites Up", "sitesDown": "Sites Down", - "paused": "Paused", - "notyetchecked": "Not Yet Checked", + "paused": "На пауза", + "notyetchecked": "Непроверено", "up": "Up", - "seemsdown": "Seems Down", + "seemsdown": "Изглежда изключено", "down": "Down", "unknown": "Неизв." }, "calendar": { - "inCinemas": "In cinemas", + "inCinemas": "В кината", "physicalRelease": "Physical release", - "digitalRelease": "Digital release", + "digitalRelease": "Дигитално издания", "noEventsToday": "Няма събития за днес!", "noEventsFound": "Няма намерени събития" }, "romm": { - "platforms": "Platforms", - "totalRoms": "Games", + "platforms": "Платформи", + "totalRoms": "Игри", "saves": "Saves", "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "screenshots": "Снимки на екрана", + "totalfilesize": "Общ размер" }, "mailcow": { "domains": "Domains", - "mailboxes": "Mailboxes", + "mailboxes": "Пощенски кутии", "mails": "Mails", - "storage": "Storage" + "storage": "Хранилище" }, "netdata": { - "warnings": "Warnings", - "criticals": "Criticals" + "warnings": "Предупреждения", + "criticals": "Критични" }, "plantit": { - "events": "Events", - "plants": "Plants", - "photos": "Photos", - "species": "Species" + "events": "Събития", + "plants": "Растения", + "photos": "Снимки", + "species": "Видове" }, "gitea": { - "notifications": "Notifications", - "issues": "Issues", - "pulls": "Pull Requests" + "notifications": "Известия", + "issues": "Издания", + "pulls": "Заявки за сливане" }, "stash": { - "scenes": "Scenes", + "scenes": "Сцени", "scenesPlayed": "Scenes Played", "playCount": "Total Plays", "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", + "sceneSize": "Размер на сцени", + "sceneDuration": "Продължителност на сцени", + "images": "Изображения", + "imageSize": "Размер на изображенията", + "galleries": "Галерии", "performers": "Performers", - "studios": "Studios", + "studios": "Студиа", "movies": "Филми", "tags": "Тагове", "oCount": "O Count" @@ -900,22 +906,22 @@ "tandoor": { "users": "Потребители", "recipes": "Рецепти", - "keywords": "Keywords" + "keywords": "Ключови думи" }, "homebox": { - "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "items": "Елементи", + "totalWithWarranty": "В гаранция", + "locations": "Места", + "labels": "Етикети", "users": "Потребители", - "totalValue": "Total Value" + "totalValue": "Обща стойност" }, "crowdsec": { "alerts": "Предупреждения", "bans": "Bans" }, "wgeasy": { - "connected": "Connected", + "connected": "Свързан", "enabled": "Активирано", "disabled": "Деактивирано", "total": "Общо" @@ -927,20 +933,20 @@ "banned": "Banned" }, "myspeed": { - "ping": "Ping", - "download": "Download", - "upload": "Upload" + "ping": "Пинг", + "download": "Изтегляне", + "upload": "Качване" }, "stocks": { - "stocks": "Stocks", - "loading": "Loading", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "Акции", + "loading": "Зареждане", + "open": "Отворен - пазар САЩ", + "closed": "Затворен - пазар САЩ", + "invalidConfiguration": "Невалидна конфигурация" }, "frigate": { "cameras": "Cameras", - "uptime": "Uptime", + "uptime": "Ъптайм", "version": "Version" }, "linkwarden": { @@ -961,54 +967,68 @@ "vehicles": "Vehicles", "serviceRecords": "Service Records", "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "nextReminder": "Следващо напомняне", + "none": "Нищо" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", + "projects": "Активни проекти", + "tasks7d": "Задачи тази седмица", "tasksOverdue": "Overdue Tasks", "tasksInProgress": "Tasks In Progress" }, "headscale": { - "name": "Name", - "address": "Address", + "name": "Име", + "address": "Адрес", "last_seen": "Последно видян", "status": "Статус", - "online": "Online", + "online": "Онлайн", "offline": "Изключен" }, "beszel": { - "name": "Name", - "systems": "Systems", + "name": "Име", + "systems": "Системи", "up": "Up", "down": "Down", - "paused": "Paused", + "paused": "На пауза", "pending": "Pending", "status": "Статус", - "updated": "Updated", + "updated": "Обновени", "cpu": "Процесор", "memory": "Памет", - "disk": "Disk", + "disk": "Диск", "network": "NET" }, "argocd": { - "apps": "Apps", + "apps": "Приложения", "synced": "Synced", "outOfSync": "Out Of Sync", - "healthy": "Healthy", - "degraded": "Degraded", + "healthy": "Здрав", + "degraded": "Деградирани", "progressing": "Progressing", "missing": "Липсващи", "suspended": "Suspended" }, "spoolman": { - "loading": "Loading" + "loading": "Зареждане" }, "gitlab": { "groups": "Groups", - "issues": "Issues", + "issues": "Издания", "merges": "Merge Requests", - "projects": "Projects" + "projects": "Проекти" + }, + "apcups": { + "status": "Статус", + "load": "Натоварване", + "bcharge": "Заряд на батерията", + "timeleft": "Оставащо Време" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Тагове" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 2700e397..620a0df5 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -148,7 +148,9 @@ "up": "Actiu", "received": "Rebuts", "sent": "Enviats", - "externalIPAddress": "IP ext." + "externalIPAddress": "IP ext.", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "AP connectats", "activeUser": "Dispositius actius", "alerts": "Alertes", - "connectedGateway": "Pasarel·les connectades", + "connectedGateways": "Connected gateways", "connectedSwitches": "Conmutadors connectats" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processat", "time": "Temps" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Taulells", "datasources": "Orígens de dades", @@ -1010,5 +1016,19 @@ "issues": "Problemes", "merges": "Merge Requests", "projects": "Projectes" + }, + "apcups": { + "status": "Estat", + "load": "Càrrega", + "bcharge": "Càrrega de la bateria", + "timeleft": "Temps restant" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Etiquetes" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 71f08352..31c7921a 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Přijaté", "sent": "Odeslané", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Odesílání dat", @@ -176,7 +178,7 @@ "connectedAp": "Připojené APs", "activeUser": "Aktivní zařízení", "alerts": "Upozornění", - "connectedGateway": "Připojené brány", + "connectedGateways": "Connected gateways", "connectedSwitches": "Připojené přepínače" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Zpracováno", "time": "Čas" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Nástěnky", "datasources": "Zdroje dat", @@ -1010,5 +1016,19 @@ "issues": "Problémy", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stav", + "load": "Zatížení", + "bcharge": "Battery Charge", + "timeleft": "Zbývající čas" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index bc35ce27..8a354b91 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -148,7 +148,9 @@ "up": "Op", "received": "Modtaget", "sent": "Sendt", - "externalIPAddress": "Ekstern IP" + "externalIPAddress": "Ekstern IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Forbundne APs", "activeUser": "Aktive enheder", "alerts": "Advarsler", - "connectedGateway": "Forbundne gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Forbundne switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Behandlet", "time": "Tid" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Kontrolpanel", "datasources": "Data Kilder", @@ -1010,5 +1016,19 @@ "issues": "Problemer", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Belastning", + "bcharge": "Batteriniveau", + "timeleft": "Resterende tid" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 1714009f..69c0fe7c 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Fehler", "ping": "Ping", - "down": "Empfangen", - "up": "Senden", + "down": "Offline", + "up": "Online", "not_available": "Nicht verfügbar" }, "siteMonitor": { "http_status": "HTTP-Status", "error": "Fehler", "response": "Antwort", - "down": "Empfangen", - "up": "Senden", + "down": "Offline", + "up": "Online", "not_available": "Nicht verfügbar" }, "emby": { @@ -144,11 +144,13 @@ "uptime": "Betriebszeit", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Empfangen", - "up": "Senden", + "down": "Offline", + "up": "Online", "received": "Empfangen", "sent": "Gesendet", - "externalIPAddress": "Externe IP" + "externalIPAddress": "Externe IP", + "externalIPv6Address": "Externe IPv6", + "externalIPv6Prefix": "Externer IPv4-Präfix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Verbundene APs", "activeUser": "Aktive Geräte", "alerts": "Warnungen", - "connectedGateway": "Verbundene Gateways", + "connectedGateways": "Verbundene Gateways", "connectedSwitches": "Verbundene Switche" }, "nzbget": { @@ -350,7 +352,7 @@ "queue": "Warteschlange", "processed": "Verarbeitet", "errored": "Fehlgeschlagen", - "saved": "Gespeichert" + "saved": "Eingespart" }, "traefik": { "routers": "Router", @@ -521,15 +523,15 @@ "up_to_date": "Aktuell", "child_bridges": "Unter-Bridges", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Senden", + "up": "Online", "pending": "Ausstehend", - "down": "Empfangen" + "down": "Offline" }, "healthchecks": { "new": "Neu", - "up": "Senden", + "up": "Online", "grace": "In Karenzzeit", - "down": "Empfangen", + "down": "Offline", "paused": "Pausiert", "status": "Status", "last_ping": "Letzter Ping", @@ -644,8 +646,8 @@ "load": "Durchschnittliche Last", "memory": "Speichernutzung", "wanStatus": "WAN-Status", - "up": "Senden", - "down": "Empfangen", + "up": "Online", + "down": "Offline", "temp": "Temperatur", "disk": "Datenträgernutzung", "wanIP": "WAN-IP" @@ -702,6 +704,10 @@ "processed": "Verarbeitet", "time": "Zeit" }, + "firefly": { + "networth": "Reinvermögen", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Datenquellen", @@ -826,8 +832,8 @@ "openwrt": { "uptime": "Betriebszeit", "cpuLoad": "CPU-Last (5 min-Durchschnitt)", - "up": "Senden", - "down": "Empfangen", + "up": "Online", + "down": "Offline", "bytesTx": "Übertragen", "bytesRx": "Empfangen" }, @@ -840,9 +846,9 @@ "sitesDown": "Seiten nicht verfügbar", "paused": "Pausiert", "notyetchecked": "Noch nicht geprüft", - "up": "Senden", + "up": "Online", "seemsdown": "Scheint nicht verfügbar", - "down": "Empfangen", + "down": "Offline", "unknown": "Unbekannt" }, "calendar": { @@ -981,8 +987,8 @@ "beszel": { "name": "Name", "systems": "Systeme", - "up": "Senden", - "down": "Empfangen", + "up": "Online", + "down": "Offline", "paused": "Pausiert", "pending": "Ausstehend", "status": "Status", @@ -1010,5 +1016,19 @@ "issues": "Probleme", "merges": "Merge Requests", "projects": "Projekte" + }, + "apcups": { + "status": "Status", + "load": "Last", + "bcharge": "Akkuladung", + "timeleft": "Verbleibende Zeit" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Schlagwörter" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index 774dae1a..c582f49f 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -148,7 +148,9 @@ "up": "Ping up", "received": "Ληφθέντα", "sent": "Απεσταλμένα", - "externalIPAddress": "Εξωτερική IP" + "externalIPAddress": "Εξωτερική IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Συνδεδεμένα APs", "activeUser": "Ενεργές συσκευές", "alerts": "Ειδοποιήσεις", - "connectedGateway": "Συνδεδεμένα gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Συνδεδεμένα switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Σε επεξεργασία", "time": "Ώρα" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Πίνακας Ελέγχου", "datasources": "Πηγές Δεδομένων", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Κατάσταση", + "load": "Φόρτωση", + "bcharge": "Battery Charge", + "timeleft": "Χρόνος που απομένει" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Ετικέτες" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 3f6ddb72..8a7bb831 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stato", + "load": "Ŝarĝo", + "bcharge": "Battery Charge", + "timeleft": "Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index a673cb44..9d23e343 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -148,7 +148,9 @@ "up": "Activo", "received": "Recibido", "sent": "Enviado", - "externalIPAddress": "IP ext." + "externalIPAddress": "IP ext.", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstream (desarrollo de software)", @@ -176,7 +178,7 @@ "connectedAp": "AP conectados", "activeUser": "Dispositivos activos", "alerts": "Alertas", - "connectedGateway": "Puertas de enlace conectadas", + "connectedGateways": "Connected gateways", "connectedSwitches": "Conmutadores conectados" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Procesado", "time": "Tiempo" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Tableros", "datasources": "Fuentes de datos", @@ -1010,5 +1016,19 @@ "issues": "Números", "merges": "Solicitudes de fusión", "projects": "Proyectos" + }, + "apcups": { + "status": "Estado", + "load": "Carga", + "bcharge": "Carga de la batería", + "timeleft": "Tiempo restante" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Etiquetas" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index eaed5abc..c122d734 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Load", + "bcharge": "Battery Charge", + "timeleft": "Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index 184e02d9..782bc2c4 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Tila", + "load": "Kuorma", + "bcharge": "Battery Charge", + "timeleft": "Aikaa jäljellä" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index b7336710..191706b2 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -57,14 +57,14 @@ "lan": "LAN", "wlan": "WLAN", "devices": "Équipt.", - "lan_devices": "Équipt. LAN", + "lan_devices": "Périphériques LAN", "wlan_devices": "Périphériques WLAN", "lan_users": "Utilisateurs LAN", "wlan_users": "Utilisateurs WLAN", "up": "Up", "down": "INACTIF", "wait": "Veuillez patienter", - "empty_data": "Statut sous-système inconnu" + "empty_data": "Statut du sous-système inconnu" }, "docker": { "rx": "Rx", @@ -77,24 +77,24 @@ "unknown": "Inconnu", "healthy": "Fonctionnel", "starting": "Démarrage", - "unhealthy": "Dysfonctionnement", - "not_found": "Inconnu", + "unhealthy": "Mauvaise santé", + "not_found": "Introuvable", "exited": "Arrêté", "partial": "Partiel" }, "ping": { "error": "Erreur", - "ping": "Ping", - "down": "Down", - "up": "Up", + "ping": "Latence", + "down": "Bas", + "up": "Haut", "not_available": "Non disponible" }, "siteMonitor": { "http_status": "Statut HTTP", "error": "Erreur", "response": "Réponse", - "down": "Down", - "up": "Up", + "down": "Bas", + "up": "Haut", "not_available": "Non disponible" }, "emby": { @@ -105,7 +105,7 @@ "movies": "Films", "series": "Séries TV", "episodes": "Épisodes", - "songs": "Musique" + "songs": "Chansons" }, "esphome": { "offline": "Hors ligne", @@ -124,7 +124,7 @@ }, "flood": { "download": "Récep.", - "upload": "Envoi", + "upload": "Téléverser", "leech": "Leech", "seed": "Seed" }, @@ -144,23 +144,25 @@ "uptime": "Démarré depuis", "maxDown": "Max. Bas", "maxUp": "Max. Haut", - "down": "Down", - "up": "Up", + "down": "Bas", + "up": "Haut", "received": "Reçu", "sent": "Envoyé", - "externalIPAddress": "IP externe" + "externalIPAddress": "IP externe", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { - "upstreams": "Upstreams", + "upstreams": "En amont", "requests": "Demandes en cours", "requests_failed": "Demandes échouées" }, "changedetectionio": { "totalObserved": "Total Observé", - "diffsDetected": "Diffs détectées" + "diffsDetected": "Différences détectées" }, "channelsdvrserver": { - "shows": "Affichages", + "shows": "Séries", "recordings": "Enregistrements", "scheduled": "Planifié", "passes": "Passes" @@ -174,10 +176,10 @@ }, "omada": { "connectedAp": "AP connectés", - "activeUser": "Équipts actifs", + "activeUser": "Périphériques actifs", "alerts": "Alertes", - "connectedGateway": "Passerelles connectées", - "connectedSwitches": "Switches connectés" + "connectedGateways": "Connected gateways", + "connectedSwitches": "Switchs connectés" }, "nzbget": { "rate": "Débit", @@ -188,7 +190,7 @@ "streams": "Flux actif", "albums": "Albums", "movies": "Films", - "tv": "Séries TV" + "tv": "Séries" }, "sabnzbd": { "rate": "Débit", @@ -197,32 +199,32 @@ }, "rutorrent": { "active": "Actif", - "upload": "Envoi", + "upload": "Téléverser", "download": "Récep." }, "transmission": { "download": "Récep.", - "upload": "Envoi", + "upload": "Téléverser", "leech": "Leech", "seed": "Seed" }, "qbittorrent": { "download": "Récep.", - "upload": "Envoi", + "upload": "Téléverser", "leech": "Leech", "seed": "Seed" }, "qnap": { - "cpuUsage": "Cpu", - "memUsage": "Mém", - "systemTempC": "Temp", - "poolUsage": "Pool", - "volumeUsage": "Volume", + "cpuUsage": "Processeur utilisé", + "memUsage": "Mémoire utilisée", + "systemTempC": "Température système", + "poolUsage": "Utilisation de la pool", + "volumeUsage": "Utilisation du volume", "invalid": "Invalide" }, "deluge": { "download": "Récep.", - "upload": "Envoi", + "upload": "Téléverser", "leech": "Leech", "seed": "Seed" }, @@ -232,33 +234,33 @@ }, "downloadstation": { "download": "Récep.", - "upload": "Envoi", + "upload": "Téléverser", "leech": "Leech", "seed": "Seed" }, "sonarr": { - "wanted": "Demande", - "queued": "Attente", + "wanted": "Demandé", + "queued": "En file d'attente", "series": "Séries TV", "queue": "En attente", "unknown": "Inconnu" }, "radarr": { - "wanted": "Demande", + "wanted": "Demandé", "missing": "Manquant", - "queued": "Attente", + "queued": "En file d'attente", "movies": "Films", "queue": "En attente", "unknown": "Inconnu" }, "lidarr": { - "wanted": "Demande", - "queued": "Attente", + "wanted": "Demandé", + "queued": "En file d'attente", "artists": "Artistes" }, "readarr": { - "wanted": "Demande", - "queued": "Attente", + "wanted": "Demandé", + "queued": "En file d'attente", "books": "Livres" }, "bazarr": { @@ -267,18 +269,18 @@ }, "ombi": { "pending": "En attente", - "approved": "Validé", + "approved": "Approuvé", "available": "Disponible" }, "jellyseerr": { "pending": "En attente", - "approved": "Validé", + "approved": "Approuvé", "available": "Disponible" }, "overseerr": { "pending": "En attente", - "processing": "Traitement", - "approved": "Validé", + "processing": "En cours de traitement", + "approved": "Approuvé", "available": "Disponible" }, "netalertx": { @@ -290,7 +292,7 @@ "pihole": { "queries": "Requêtes", "blocked": "Bloqué", - "blocked_percent": "Bloqué %", + "blocked_percent": "% bloqué", "gravity": "Listes dom. bloqués" }, "adguard": { @@ -300,9 +302,9 @@ "latency": "Latence" }, "speedtest": { - "upload": "Envoi", + "upload": "Téléverser", "download": "Récep.", - "ping": "Ping" + "ping": "Latence" }, "portainer": { "running": "Démarré", @@ -335,7 +337,7 @@ }, "technitium": { "totalQueries": "Requêtes", - "totalNoError": "Effectué avec succès", + "totalNoError": "Succès", "totalServerFailure": "Échecs", "totalNxDomain": "Domaines NX", "totalRefused": "Refusés", @@ -349,8 +351,8 @@ "tdarr": { "queue": "En attente", "processed": "Traité", - "errored": "En erreur", - "saved": "Libéré" + "errored": "Erroné", + "saved": "Enregistré" }, "traefik": { "routers": "Routeurs", @@ -374,35 +376,35 @@ "30days": "30 Jours" }, "gotify": { - "apps": "Applis", + "apps": "Applications", "clients": "Clients", - "messages": "Msg" + "messages": "Messages" }, "prowlarr": { "enableIndexers": "Indexeur", - "numberOfGrabs": "Capture", + "numberOfGrabs": "Captures", "numberOfQueries": "Requêtes", - "numberOfFailGrabs": "Capt. échouée", - "numberOfFailQueries": "Dem. échouée" + "numberOfFailGrabs": "Captures échouées", + "numberOfFailQueries": "Demandes échouées" }, "jackett": { "configured": "Configuré", - "errored": "En erreur" + "errored": "Erroné" }, "strelaysrv": { "numActiveSessions": "Sessions", - "numConnections": "Cnx", + "numConnections": "Connexions", "dataRelayed": "Relayé", "transferRate": "Débit" }, "mastodon": { "user_count": "Utilisateurs", - "status_count": "Messages", + "status_count": "Articles", "domain_count": "Domaines" }, "medusa": { - "wanted": "Demande", - "queued": "Attente", + "wanted": "Demandé", + "queued": "En file d'attente", "series": "Séries TV" }, "minecraft": { @@ -418,13 +420,13 @@ }, "authentik": { "users": "Utilisateurs", - "loginsLast24H": "Cnx. (24h)", - "failedLoginsLast24H": "Cnx. échouées (24h)" + "loginsLast24H": "Connexions (24 h)", + "failedLoginsLast24H": "Connexions échouées (24 h)" }, "proxmox": { "mem": "MÉM", "cpu": "CPU", - "lxc": "LxC", + "lxc": "LXC", "vms": "VMs" }, "glances": { @@ -432,7 +434,7 @@ "load": "Charge", "wait": "Veuillez patienter", "temp": "Temp", - "_temp": "T°", + "_temp": "Température", "warn": "Alerte", "uptime": "Up", "total": "Total", @@ -443,12 +445,12 @@ "crit": "Crit.", "read": "Lu", "write": "Écrit.", - "gpu": "GPU", + "gpu": "Carte Graphique", "mem": "Mém.", "swap": "Swap" }, "quicklaunch": { - "bookmark": "Signet", + "bookmark": "Marque-Page", "service": "Service", "search": "Recherche", "custom": "Personnalisé", @@ -458,13 +460,13 @@ }, "wmo": { "0-day": "Ensoleillé", - "0-night": "Ciel clair", + "0-night": "Clair", "1-day": "Principalement ensoleillé", "1-night": "Principalement clair", - "2-day": "Partiellement couvert", - "2-night": "Partiellement couvert", - "3-day": "Couvert", - "3-night": "Couvert", + "2-day": "Partiellement nuageux", + "2-night": "Partiellement nuageux", + "3-day": "Nuageux", + "3-night": "Nuageux", "45-day": "Brumeux", "45-night": "Brumeux", "48-day": "Brumeux", @@ -483,14 +485,14 @@ "61-night": "Pluie légère", "63-day": "Pluie", "63-night": "Pluie", - "65-day": "Pluie forte", - "65-night": "Pluie forte", + "65-day": "Forte pluie", + "65-night": "Forte pluie", "66-day": "Pluie verglaçante", "66-night": "Pluie verglaçante", "67-day": "Pluie verglaçante", "67-night": "Pluie verglaçante", - "71-day": "Neige légère", - "71-night": "Neige légère", + "71-day": "Légères chutes de neige", + "71-night": "Légères chutes de neige", "73-day": "Neige", "73-night": "Neige", "75-day": "Neige abondante", @@ -521,15 +523,15 @@ "up_to_date": "À jour", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Haut", "pending": "En attente", - "down": "Down" + "down": "Bas" }, "healthchecks": { "new": "Nouveau", - "up": "Up", + "up": "Haut", "grace": "En Période de Grâce", - "down": "Down", + "down": "Bas", "paused": "En Pause", "status": "Statut", "last_ping": "Dernier Ping", @@ -541,7 +543,7 @@ "containers_failed": "Échoué" }, "autobrr": { - "approvedPushes": "Validé", + "approvedPushes": "Approuvé", "rejectedPushes": "Rejeté", "filters": "Filtres", "indexers": "Indexeur" @@ -550,7 +552,7 @@ "downloads": "En attente", "videos": "Vidéos", "channels": "Chaînes", - "playlists": "Playlists" + "playlists": "Listes de lecture" }, "truenas": { "load": "Charge Système", @@ -590,9 +592,9 @@ "total": "Total" }, "peanut": { - "battery_charge": "Charge Batterie", - "ups_load": "Charge de l'UPS", - "ups_status": "État de l'UPS", + "battery_charge": "Charge de la batterie", + "ups_load": "Charge de l’ASI", + "ups_status": "État de l’ASI", "online": "En ligne", "on_battery": "Sur Batterie", "low_battery": "Batterie Faible" @@ -602,8 +604,8 @@ "no_devices": "Aucune donnée d'appareil reçue" }, "mikrotik": { - "cpuLoad": "Charge CPU", - "memoryUsed": "Mém. Utilisée", + "cpuLoad": "Charge du processeur", + "memoryUsed": "Mémoire utilisée", "uptime": "Démarré depuis", "numberOfLeases": "Baux" }, @@ -615,25 +617,25 @@ "opendtu": { "yieldDay": "Aujourd'hui", "absolutePower": "Puissance", - "relativePower": "Puissance %", + "relativePower": "% de puissance", "limit": "Limite" }, "opnsense": { - "cpu": "Charge CPU", - "memory": "Mém. utilisée", + "cpu": "Charge du processeur", + "memory": "Mémoire utilisée", "wanUpload": "WAN Envoi", "wanDownload": "WAN Récep." }, "moonraker": { - "printer_state": "État Imprimante", - "print_status": "Statut Imprimante", + "printer_state": "État de l'imprimante", + "print_status": "Statut de l'imprimante", "print_progress": "Progression", "layers": "Couches" }, "octoprint": { "printer_state": "Statut", - "temp_tool": "Tool T°", - "temp_bed": "Bed T°", + "temp_tool": "Temp. de l'outil", + "temp_bed": "Temp. du lit", "job_completion": "Achèvement" }, "cloudflared": { @@ -644,9 +646,9 @@ "load": "Charge moy.", "memory": "Util. Mém.", "wanStatus": "Statut WAN", - "up": "Up", - "down": "Down", - "temp": "T°", + "up": "Haut", + "down": "Bas", + "temp": "Température", "disk": "Util. Disque", "wanIP": "IP WAN" }, @@ -688,7 +690,7 @@ "mylar": { "series": "Séries TV", "issues": "Anomalies", - "wanted": "Demande" + "wanted": "Demandé" }, "photoprism": { "albums": "Albums", @@ -698,10 +700,14 @@ }, "fileflows": { "queue": "En attente", - "processing": "Traitement", + "processing": "En cours de traitement", "processed": "Traité", "time": "Temps" }, + "firefly": { + "networth": "Valeur Nette", + "budget": "Budget" + }, "grafana": { "dashboards": "Tableau de bord", "datasources": "Sources données", @@ -754,9 +760,9 @@ "booksDuration": "Durée" }, "homeassistant": { - "people_home": "People Home", + "people_home": "Personne à la maison", "lights_on": "Lumières allumées", - "switches_on": "Commutateur On" + "switches_on": "Interrupteurs allumés" }, "whatsupdocker": { "monitoring": "Conteneurs", @@ -789,7 +795,7 @@ "inProgress": "En cours", "totalPrs": "PRs Total", "myPrs": "Mes PRs", - "approved": "Validé" + "approved": "Approuvé" }, "gamedig": { "status": "Statut", @@ -800,8 +806,8 @@ "currentPlayers": "Joueurs actuels", "players": "Joueurs", "maxPlayers": "Joueurs max", - "bots": "Bots", - "ping": "Ping" + "bots": "Robots", + "ping": "Latence" }, "urbackup": { "ok": "Ok", @@ -826,8 +832,8 @@ "openwrt": { "uptime": "Démarré depuis", "cpuLoad": "Charge moyenne CPU (5 min)", - "up": "Up", - "down": "Down", + "up": "Haut", + "down": "Bas", "bytesTx": "Transmis", "bytesRx": "Reçu" }, @@ -840,9 +846,9 @@ "sitesDown": "Hors ligne", "paused": "En Pause", "notyetchecked": "Non vérifié", - "up": "Up", + "up": "Haut", "seemsdown": "Semble hors ligne", - "down": "Down", + "down": "Bas", "unknown": "Inconnu" }, "calendar": { @@ -912,7 +918,7 @@ }, "crowdsec": { "alerts": "Alertes", - "bans": "Exclusions" + "bans": "Bannissements" }, "wgeasy": { "connected": "Connecté", @@ -927,12 +933,12 @@ "banned": "Banni" }, "myspeed": { - "ping": "Ping", + "ping": "Latence", "download": "Récep.", - "upload": "Envoi" + "upload": "Téléverser" }, "stocks": { - "stocks": "Actions", + "stocks": "Stocks", "loading": "Chargement", "open": "Ouvert - Marché américain", "closed": "Fermé - marché américain", @@ -981,8 +987,8 @@ "beszel": { "name": "Nom", "systems": "Systèmes", - "up": "Up", - "down": "Down", + "up": "Haut", + "down": "Bas", "paused": "En Pause", "pending": "En attente", "status": "Statut", @@ -1010,5 +1016,19 @@ "issues": "Anomalies", "merges": "Demandes de fusion de branches", "projects": "Projets" + }, + "apcups": { + "status": "Statut", + "load": "Charge", + "bcharge": "Charge de la batterie", + "timeleft": "Temps restant" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Étiquettes" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 10af3eab..57ce66b9 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "סטטוס", + "load": "עומס", + "bcharge": "Battery Charge", + "timeleft": "זמן שנותר" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index a465f1f2..0744578a 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Load", + "bcharge": "Battery Charge", + "timeleft": "Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 0f48b2dd..31f92935 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -148,7 +148,9 @@ "up": "Dostupno", "received": "Primljeno", "sent": "Poslano", - "externalIPAddress": "Eksterna IP adresa" + "externalIPAddress": "Eksterna IP adresa", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Glavne grane", @@ -176,7 +178,7 @@ "connectedAp": "Povezani AP-ovi", "activeUser": "Aktivni uređaji", "alerts": "Upozorenja", - "connectedGateway": "Povezani pristupi", + "connectedGateways": "Connected gateways", "connectedSwitches": "Povezani prekidači" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Obrađeno", "time": "Vrijeme" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Pregledne ploče", "datasources": "Izvori podataka", @@ -1010,5 +1016,19 @@ "issues": "Problemi", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stanje", + "load": "Opterećenje", + "bcharge": "Napunjenost baterije", + "timeleft": "Preostalo vrijeme" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Oznake" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index 31e6beaa..e21689aa 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -148,7 +148,9 @@ "up": "Fel", "received": "Fogadott", "sent": "Küldött", - "externalIPAddress": "Külső IP cím" + "externalIPAddress": "Külső IP cím", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreamek", @@ -176,7 +178,7 @@ "connectedAp": "Csatlakoztatott AP-k", "activeUser": "Aktív eszközök", "alerts": "Riasztások", - "connectedGateway": "Csatlakoztatott gateway-ek", + "connectedGateways": "Connected gateways", "connectedSwitches": "Csatlakoztatott switch-ek" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Feldolgozott", "time": "Idő" }, + "firefly": { + "networth": "Nettó érték", + "budget": "Költségkeret" + }, "grafana": { "dashboards": "Műszerfalak", "datasources": "Adatforrások", @@ -1010,5 +1016,19 @@ "issues": "Problémák", "merges": "Merge kérések", "projects": "Projektek" + }, + "apcups": { + "status": "Státusz", + "load": "Terhelés", + "bcharge": "Akku töltöttsége", + "timeleft": "Hátralévő idő" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Címkék" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index e0ea3d3a..7d049bec 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -14,7 +14,7 @@ "date": "{{value, date}}", "relativeDate": "{{value, relativeDate}}", "duration": "{{value, duration}}", - "months": "bulan", + "months": "bln", "days": "h", "hours": "j", "minutes": "m", @@ -140,7 +140,7 @@ "connectionStatusPendingDisconnect": "Menunggu Terputus", "connectionStatusDisconnecting": "Sedan Memutus", "connectionStatusDisconnected": "Terputus", - "connectionStatusConnected": "Connected", + "connectionStatusConnected": "Tersambung", "uptime": "Waktu Aktif", "maxDown": "Maks Unduh", "maxUp": "Maks Unggah", @@ -148,7 +148,9 @@ "up": "Hidup", "received": "Diterima", "sent": "Terkirim", - "externalIPAddress": "IP Eksternal" + "externalIPAddress": "IP Eksternal", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Strim Luar", @@ -176,7 +178,7 @@ "connectedAp": "AP Tersambung", "activeUser": "Perangakat yang Aktif", "alerts": "Peringatan", - "connectedGateway": "Gateway Tersambung", + "connectedGateways": "Connected gateways", "connectedSwitches": "Switch Tersambung" }, "nzbget": { @@ -283,9 +285,9 @@ }, "netalertx": { "total": "Total", - "connected": "Connected", - "new_devices": "New Devices", - "down_alerts": "Down Alerts" + "connected": "Tersambung", + "new_devices": "Perangkat Baru", + "down_alerts": "Peringatan Pemadaman" }, "pihole": { "queries": "Kueri", @@ -311,17 +313,17 @@ }, "suwayomi": { "download": "Terunduh", - "nondownload": "Non-Downloaded", + "nondownload": "Belum Diunduh", "read": "Baca", "unread": "Belum Dibaca", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "Diunduh & Dibaca", + "downloadedunread": "Diunduh & Belum Dibaca", + "nondownloadedread": "Belum Diunduh & Dibaca", + "nondownloadedunread": "Belum Diunduh & Belum Dibaca" }, "tailscale": { "address": "Alamat", - "expires": "Kadaluarsa", + "expires": "Kedaluwarsa", "never": "Tidak Pernah", "last_seen": "Terakhir terlihat", "now": "Sekarang", @@ -335,10 +337,10 @@ }, "technitium": { "totalQueries": "Kueri", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", + "totalNoError": "Berhasil", + "totalServerFailure": "Gagal", + "totalNxDomain": "Domain NX", + "totalRefused": "Ditolak", "totalAuthoritative": "Authoritative", "totalRecursive": "Recursive", "totalCached": "Cached", @@ -702,6 +704,10 @@ "processed": "Terproses", "time": "Waktu" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dasbor", "datasources": "Sumber Data", @@ -854,16 +860,16 @@ }, "romm": { "platforms": "Platform", - "totalRoms": "Games", + "totalRoms": "Permainan", "saves": "Saves", - "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "states": "Kondisi", + "screenshots": "Tangkapan Layar", + "totalfilesize": "Total Ukuran" }, "mailcow": { "domains": "Jumlah Domain", - "mailboxes": "Mailboxes", - "mails": "Mails", + "mailboxes": "Kotak surat", + "mails": "Surat", "storage": "Penyimpanan" }, "netdata": { @@ -882,48 +888,48 @@ "pulls": "Pull Requests" }, "stash": { - "scenes": "Scenes", - "scenesPlayed": "Scenes Played", - "playCount": "Total Plays", - "playDuration": "Time Watched", - "sceneSize": "Scenes Size", - "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", - "galleries": "Galleries", - "performers": "Performers", - "studios": "Studios", + "scenes": "Adegan", + "scenesPlayed": "Adegan Dimainkan", + "playCount": "Total Dimainkan", + "playDuration": "Waktu Ditonton", + "sceneSize": "Ukuran Adegan", + "sceneDuration": "Durasi Adegan", + "images": "Gambar", + "imageSize": "Ukuran Gambar", + "galleries": "Galeri", + "performers": "Pemain", + "studios": "Studio", "movies": "Film", "tags": "Tag", - "oCount": "O Count" + "oCount": "Jumlah O" }, "tandoor": { "users": "Pengguna", "recipes": "Resep", - "keywords": "Keywords" + "keywords": "Kata Kunci" }, "homebox": { "items": "Items", - "totalWithWarranty": "With Warranty", - "locations": "Locations", - "labels": "Labels", + "totalWithWarranty": "Dengan Garansi", + "locations": "Lokasi", + "labels": "Label", "users": "Pengguna", - "totalValue": "Total Value" + "totalValue": "Total Nilai" }, "crowdsec": { "alerts": "Peringatan", "bans": "Bans" }, "wgeasy": { - "connected": "Connected", + "connected": "Tersambung", "enabled": "Aktif", "disabled": "Nonaktif", "total": "Total" }, "swagdashboard": { - "proxied": "Proxied", + "proxied": "Diproksi", "auth": "With Auth", - "outdated": "Outdated", + "outdated": "Usang", "banned": "Banned" }, "myspeed": { @@ -932,43 +938,43 @@ "upload": "Unggah" }, "stocks": { - "stocks": "Stocks", - "loading": "Loading", - "open": "Open - US Market", - "closed": "Closed - US Market", - "invalidConfiguration": "Invalid Configuration" + "stocks": "Saham", + "loading": "Memuat", + "open": "Buka - Pasar AS", + "closed": "Tutup - Pasar AS", + "invalidConfiguration": "Konfigurasi Invalid" }, "frigate": { - "cameras": "Cameras", + "cameras": "Kamera", "uptime": "Waktu Aktif", "version": "Versi" }, "linkwarden": { - "links": "Links", - "collections": "Collections", + "links": "Tautan", + "collections": "Koleksi", "tags": "Tag" }, "zabbix": { "unclassified": "Not classified", "information": "Informasi", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "warning": "Peringatan", + "average": "Rata-rata", + "high": "Tinggi", + "disaster": "Bencana" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", + "vehicle": "Kendaraan", + "vehicles": "Kendaraan", "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "reminders": "Pengingat", + "nextReminder": "Pengingat Berikutnya", + "none": "Tidak ada" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "Proyek Aktif", + "tasks7d": "Tugas Jatuh Tempo Minggu Ini", + "tasksOverdue": "Tugas Terlewat", + "tasksInProgress": "Tugas Berlangsung" }, "headscale": { "name": "Nama", @@ -980,7 +986,7 @@ }, "beszel": { "name": "Nama", - "systems": "Systems", + "systems": "Sistem", "up": "Hidup", "down": "Mati", "paused": "Pause", @@ -989,26 +995,40 @@ "updated": "Terbarui", "cpu": "CPU", "memory": "MEM", - "disk": "Disk", + "disk": "Diska", "network": "NET" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "Apl", + "synced": "Tersinkron", + "outOfSync": "Tidak Sinkron", "healthy": "Lancar", - "degraded": "Degraded", + "degraded": "Terdegradasi", "progressing": "Progressing", "missing": "Tidak Ditemukan", - "suspended": "Suspended" + "suspended": "Ditangguhkan" }, "spoolman": { - "loading": "Loading" + "loading": "Memuat" }, "gitlab": { - "groups": "Groups", + "groups": "Grup", "issues": "Isu", "merges": "Merge Requests", - "projects": "Projects" + "projects": "Proyek" + }, + "apcups": { + "status": "Status", + "load": "Beban", + "bcharge": "Sisa Baterai", + "timeleft": "Sisa Waktu" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tag" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 73116bf4..3d0dc450 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Ricevuti", "sent": "Inviati", - "externalIPAddress": "IP Esterno" + "externalIPAddress": "IP Esterno", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstream", @@ -176,7 +178,7 @@ "connectedAp": "AP Connessi", "activeUser": "Dispositivi attivi", "alerts": "Allarmi", - "connectedGateway": "Gateway connessi", + "connectedGateways": "Connected gateways", "connectedSwitches": "Switch connessi" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Elaborati", "time": "Tempo" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboard", "datasources": "Origine dei Dati", @@ -1010,5 +1016,19 @@ "issues": "Problemi", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stato", + "load": "Carico", + "bcharge": "Carica Batteria", + "timeleft": "Tempo Rimanente" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tag" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 04e26302..020d7d3b 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -148,7 +148,9 @@ "up": "稼働", "received": "受信済み", "sent": "送信済み", - "externalIPAddress": "退出ID" + "externalIPAddress": "退出ID", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "アップストリーム", @@ -176,7 +178,7 @@ "connectedAp": "接続されたAP", "activeUser": "アクティブデバイス", "alerts": "アラート", - "connectedGateway": "接続されたゲートウェイ", + "connectedGateways": "Connected gateways", "connectedSwitches": "接続スイッチ" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "処理済み", "time": "時間" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "ダッシュ ボード", "datasources": "データソース", @@ -1010,5 +1016,19 @@ "issues": "課題", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "状態", + "load": "ロード", + "bcharge": "バッテリー充電", + "timeleft": "残り時間" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "タグ" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 38bc7918..00ff2ea1 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "수신됨", "sent": "전송됨", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "연결된 AP", "activeUser": "활성 장치", "alerts": "경고", - "connectedGateway": "연결된 게이트웨이", + "connectedGateways": "Connected gateways", "connectedSwitches": "연결된 스위치" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "처리됨", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "대시보드", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "상태", + "load": "부하", + "bcharge": "배터리 충전 중", + "timeleft": "남은 시간" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "태그" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index d7b851ea..538febf1 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Savienotie piekļuves punkti", "activeUser": "Aktīvās ierīces", "alerts": "Paziņojumi", - "connectedGateway": "Savienotās vārtejas", + "connectedGateways": "Connected gateways", "connectedSwitches": "Savienotie komutatori" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Statuss", + "load": "Ielādē", + "bcharge": "Battery Charge", + "timeleft": "Atlikušais laiks" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index 5b1efeb4..ba32381f 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -148,7 +148,9 @@ "up": "Hidup", "received": "Diterima", "sent": "Telah dihantar", - "externalIPAddress": "IP Luaran" + "externalIPAddress": "IP Luaran", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Peranti aktif", "alerts": "Perhatian", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Sudah diprosess", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Beban", + "bcharge": "Bateri dicas", + "timeleft": "Masa Tinggal" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tanda nama" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index c0bd43ad..dfa15f10 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -148,7 +148,9 @@ "up": "Online", "received": "Ontvangen", "sent": "Verzonden", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Verbonden APs", "activeUser": "Actieve apparaten", "alerts": "Meldingen", - "connectedGateway": "Verbonden gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Verbonden switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Verwerkt", "time": "Tijd" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Bronnen", @@ -1010,5 +1016,19 @@ "issues": "Problemen", "merges": "Merge Verzoeken", "projects": "Projecten" + }, + "apcups": { + "status": "Status", + "load": "Belasting", + "bcharge": "Batterij opladen", + "timeleft": "Resterende Tijd" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Label" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index 25509949..b179110b 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -148,7 +148,9 @@ "up": "Oppe", "received": "Mottatt", "sent": "Sendt", - "externalIPAddress": "Ekstern IP" + "externalIPAddress": "Ekstern IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Oppstrøms", @@ -176,7 +178,7 @@ "connectedAp": "Tilkoblede AP'er", "activeUser": "Aktive enheter", "alerts": "Varsler", - "connectedGateway": "Tilkoblede gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Tilkoblede switcher" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Behandlet", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Last", + "bcharge": "Batteriladning", + "timeleft": "Gjenstående tid" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Stikkord" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index aa716af9..9d669f8a 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -148,7 +148,9 @@ "up": "Dostępny", "received": "Odebrane", "sent": "Wysłane", - "externalIPAddress": "Pub. IP" + "externalIPAddress": "Pub. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Połączone punkty dostępowe", "activeUser": "Aktywne urządzenia", "alerts": "Alarmy", - "connectedGateway": "Połączone bramy", + "connectedGateways": "Connected gateways", "connectedSwitches": "Połączone przełączniki" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Przetworzone", "time": "Czas" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Panel główny", "datasources": "Źródła danych", @@ -1010,5 +1016,19 @@ "issues": "Zgłoszenia", "merges": "Żądania scaleń", "projects": "Projekty" + }, + "apcups": { + "status": "Stan", + "load": "Obciążenie", + "bcharge": "Stan baterii", + "timeleft": "Pozostało" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tagi" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 83c52da8..66439545 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Recebido", "sent": "Enviado", - "externalIPAddress": "Endereço IP Externo" + "externalIPAddress": "Endereço IP Externo", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "APs Ligados", "activeUser": "Dispositivos activos", "alerts": "Alertas", - "connectedGateway": "Gateways ligados", + "connectedGateways": "Connected gateways", "connectedSwitches": "Switches ligados" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processado", "time": "Hora" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Painéis", "datasources": "Origem de Dados", @@ -1010,5 +1016,19 @@ "issues": "Problemas", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Estado", + "load": "Carga", + "bcharge": "Carga da bateria", + "timeleft": "Tempo Restante" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Etiquetas" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 76a0cb2f..23c5c3dc 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -148,7 +148,9 @@ "up": "Ativo", "received": "Recebido", "sent": "Enviado", - "externalIPAddress": "IP Externo" + "externalIPAddress": "IP Externo", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Streams de Envio", @@ -176,7 +178,7 @@ "connectedAp": "APs Ligados", "activeUser": "Dispositivos ativos", "alerts": "Alertas", - "connectedGateway": "Gateways conectados", + "connectedGateways": "Connected gateways", "connectedSwitches": "Switches conectados" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processado", "time": "Hora" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Painéis", "datasources": "Origem de Dados", @@ -1010,5 +1016,19 @@ "issues": "Problemas", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Carga", + "bcharge": "Carga da bateria", + "timeleft": "Tempo restante" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Marcadores" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index cca136a7..4d38502d 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -148,7 +148,9 @@ "up": "Sus", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreamuri", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stare", + "load": "Sarcină", + "bcharge": "Battery Charge", + "timeleft": "Timp rămas" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index a2fcfb05..72785a96 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -148,7 +148,9 @@ "up": "Онлайн", "received": "Получено", "sent": "Отправлено", - "externalIPAddress": "Внеш. IP" + "externalIPAddress": "Внеш. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Входящие каналы", @@ -176,7 +178,7 @@ "connectedAp": "Подключенные точки доступа", "activeUser": "Активные устройства", "alerts": "Предупреждения", - "connectedGateway": "Подключенные шлюзы", + "connectedGateways": "Connected gateways", "connectedSwitches": "Подключенные коммутаторы" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Обработано", "time": "Время" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Панели", "datasources": "Источники данных", @@ -1010,5 +1016,19 @@ "issues": "Вопросы", "merges": "Мердж-реквесты", "projects": "Проекты" + }, + "apcups": { + "status": "Статус", + "load": "Загрузка", + "bcharge": "Заряд батареи", + "timeleft": "Осталось" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Теги" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 9c10a207..4272c51f 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -148,7 +148,9 @@ "up": "Nahrávanie", "received": "Prijaté", "sent": "Odoslané", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Odosielanie dát", @@ -176,7 +178,7 @@ "connectedAp": "Pripojené prístupové body", "activeUser": "Aktívne zariadenia", "alerts": "Upozornenia", - "connectedGateway": "Pripojené sieťové brány", + "connectedGateways": "Connected gateways", "connectedSwitches": "Pripojené prepínače" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Spracované", "time": "Čas" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Panely", "datasources": "Zdroje dát", @@ -1010,5 +1016,19 @@ "issues": "Problémy", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Stav", + "load": "Záťaž", + "bcharge": "Nabitie batérie", + "timeleft": "Zostávajúci čas" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Štítky" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 4c88e109..34db459d 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -148,7 +148,9 @@ "up": "Povezan", "received": "Prejeto", "sent": "Poslano", - "externalIPAddress": "Zun. IP" + "externalIPAddress": "Zun. IP", + "externalIPv6Address": "Eks. IPv6", + "externalIPv6Prefix": "Eks. IPv6-predpona" }, "caddy": { "upstreams": "Pretok gor", @@ -176,7 +178,7 @@ "connectedAp": "Povezanih AP", "activeUser": "Aktivne naprave", "alerts": "Opozorila", - "connectedGateway": "Povezan prehod", + "connectedGateways": "Povezani prehodi", "connectedSwitches": "Povezana stikala" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Procesiran", "time": "Čas" }, + "firefly": { + "networth": "Neto vrednost", + "budget": "Proračun" + }, "grafana": { "dashboards": "Nadzorne plošče", "datasources": "Viri podatkov", @@ -1010,5 +1016,19 @@ "issues": "Težave", "merges": "Združi zahtevke", "projects": "Projekti" + }, + "apcups": { + "status": "Stanje", + "load": "Bremenitev", + "bcharge": "Napolnjenost baterije", + "timeleft": "Preostali čas" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Značke" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index 5d0302a4..ba50eef1 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Load", + "bcharge": "Battery Charge", + "timeleft": "Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index 197606c4..ead80b0b 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Status", + "load": "Laddar", + "bcharge": "Battery Charge", + "timeleft": "Tid kvar" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index f7c42d99..2cd066a6 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "హోదా", + "load": "లోడ్", + "bcharge": "Battery Charge", + "timeleft": "మిగిలి వున్న సమయం" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 8d1a6de3..42a0b6a2 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "สถานะ", + "load": "โหลด", + "bcharge": "Battery Charge", + "timeleft": "Time Left" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 8b233d72..40611dac 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -148,7 +148,9 @@ "up": "Yükleme", "received": "Alınan", "sent": "Gönderilen", - "externalIPAddress": "Harici IP" + "externalIPAddress": "Harici IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Akış", @@ -176,7 +178,7 @@ "connectedAp": "Bağlı AP'ler", "activeUser": "Aktif cihazlar", "alerts": "Alarmlar", - "connectedGateway": "Bağlı ağ geçitleri", + "connectedGateways": "Connected gateways", "connectedSwitches": "Bağlı anahtarlar" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "İşlendi", "time": "Zaman" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Kontrol Paneli", "datasources": "Veri Kaynakları", @@ -1010,5 +1016,19 @@ "issues": "Sorunlar", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Durum", + "load": "Yük", + "bcharge": "Pil Yüzdesi", + "timeleft": "Kalan Zaman" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Etiketler" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index a78c6dd1..0914c49f 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -148,7 +148,9 @@ "up": "Онлайн", "received": "Отримано", "sent": "Надіслано", - "externalIPAddress": "Зовнішній IP" + "externalIPAddress": "Зовнішній IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Потоки", @@ -176,7 +178,7 @@ "connectedAp": "Підключені точки доступу", "activeUser": "Активні пристрої", "alerts": "Оповіщення", - "connectedGateway": "Підключені шлюзи", + "connectedGateways": "Connected gateways", "connectedSwitches": "Підключені перемикачі" }, "nzbget": { @@ -285,13 +287,13 @@ "total": "Усього", "connected": "З'єднано", "new_devices": "Нові пристрої", - "down_alerts": "Спов. про падіння" + "down_alerts": "Сповіщення про падіння" }, "pihole": { "queries": "Запити", "blocked": "Заблоковано", "blocked_percent": "Заблоковано %", - "gravity": "Гравітація" + "gravity": "Доменів в списку" }, "adguard": { "queries": "Запити", @@ -702,6 +704,10 @@ "processed": "Обробка", "time": "Час" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Інформаційні панелі", "datasources": "Джерела даних", @@ -856,7 +862,7 @@ "platforms": "Платформи", "totalRoms": "Ігри", "saves": "Збереження", - "states": "Штати", + "states": "Стани", "screenshots": "Знімки екрану", "totalfilesize": "Загальний обсяг" }, @@ -1010,5 +1016,19 @@ "issues": "Питання", "merges": "Запити на злиття", "projects": "Проєкти" + }, + "apcups": { + "status": "Стан", + "load": "Завантаження", + "bcharge": "Заряд батареї", + "timeleft": "Залишилось" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Теги" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index 5ded06ec..d2753c97 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "Received", "sent": "Sent", - "externalIPAddress": "Ext. IP" + "externalIPAddress": "Ext. IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "Upstreams", @@ -176,7 +178,7 @@ "connectedAp": "Connected APs", "activeUser": "Active devices", "alerts": "Alerts", - "connectedGateway": "Connected gateways", + "connectedGateways": "Connected gateways", "connectedSwitches": "Connected switches" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "Processed", "time": "Time" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "Dashboards", "datasources": "Data Sources", @@ -1010,5 +1016,19 @@ "issues": "Issues", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "Trạng thái", + "load": "Load", + "bcharge": "Battery Charge", + "timeleft": "Thời gian còn lại" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 2b0fa3e3..64bc1e72 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -148,7 +148,9 @@ "up": "在線", "received": "已接收", "sent": "已送出", - "externalIPAddress": "外部 IP" + "externalIPAddress": "外部 IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "上行", @@ -176,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateway": "已連接的閘道", + "connectedGateways": "Connected gateways", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "已處理", "time": "時間" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "控制面板", "datasources": "數據來源", @@ -1010,5 +1016,19 @@ "issues": "出版", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "狀況", + "load": "負荷", + "bcharge": "充電", + "timeleft": "用時" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "標籤" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 80e71fe4..5e54cd8d 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -148,7 +148,9 @@ "up": "Up", "received": "已接收", "sent": "已发送", - "externalIPAddress": "外部IP" + "externalIPAddress": "外部IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "上游", @@ -176,7 +178,7 @@ "connectedAp": "连接中的AP", "activeUser": "活跃设备", "alerts": "警报", - "connectedGateway": "已连接网关", + "connectedGateways": "Connected gateways", "connectedSwitches": "已连接开关" }, "nzbget": { @@ -311,13 +313,13 @@ }, "suwayomi": { "download": "下载", - "nondownload": "Non-Downloaded", + "nondownload": "未下载", "read": "已读", "unread": "未读", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "已下载 & 已读", + "downloadedunread": "已下载 & 未读", + "nondownloadedread": "未下载 & 已读", + "nondownloadedunread": "未下载 & 未读" }, "tailscale": { "address": "地址", @@ -702,6 +704,10 @@ "processed": "已处理", "time": "时间" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "控制面板", "datasources": "数据来源", @@ -980,7 +986,7 @@ }, "beszel": { "name": "Name", - "systems": "Systems", + "systems": "系统", "up": "Up", "down": "Down", "paused": "暂停", @@ -989,26 +995,40 @@ "updated": "已升级", "cpu": "CPU", "memory": "内存", - "disk": "Disk", - "network": "NET" + "disk": "磁盘", + "network": "网络" }, "argocd": { "apps": "应用程序", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "synced": "已同步", + "outOfSync": "未同步", "healthy": "健康", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "已降级", + "progressing": "进行中", "missing": "丢失", - "suspended": "Suspended" + "suspended": "已停用" }, "spoolman": { "loading": "正在加载" }, "gitlab": { - "groups": "Groups", + "groups": "群组", "issues": "问题", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "合并请求", + "projects": "项目" + }, + "apcups": { + "status": "状态", + "load": "负载", + "bcharge": "充电中", + "timeleft": "剩余时间" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "Tags" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 6fddb248..5a356009 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -148,7 +148,9 @@ "up": "在線", "received": "已接收", "sent": "已送出", - "externalIPAddress": "外部 IP" + "externalIPAddress": "外部 IP", + "externalIPv6Address": "Ext. IPv6", + "externalIPv6Prefix": "Ext. IPv6-Prefix" }, "caddy": { "upstreams": "上行", @@ -176,7 +178,7 @@ "connectedAp": "已連接的存取點", "activeUser": "在線裝置", "alerts": "警示", - "connectedGateway": "已連接的閘道", + "connectedGateways": "Connected gateways", "connectedSwitches": "已連接的交換器" }, "nzbget": { @@ -702,6 +704,10 @@ "processed": "已處理", "time": "時間" }, + "firefly": { + "networth": "Net Worth", + "budget": "Budget" + }, "grafana": { "dashboards": "控制面板", "datasources": "數據來源", @@ -1010,5 +1016,19 @@ "issues": "出版", "merges": "Merge Requests", "projects": "Projects" + }, + "apcups": { + "status": "狀態", + "load": "負載", + "bcharge": "充電", + "timeleft": "剩餘時間" + }, + "hoarder": { + "bookmarks": "Bookmarks", + "favorites": "Favorites", + "archived": "Archived", + "highlights": "Highlights", + "lists": "Lists", + "tags": "標籤" } } From 26242d657d512cdfddbc81cf289b022d4a3a385c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 09:00:34 -0700 Subject: [PATCH 11/93] Bump version to 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3958b250..d7603c18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "0.10.9", + "version": "1.0.0", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From f767ff047f51984d0e902251673fdff0ad8a3ab4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 11:23:52 -0700 Subject: [PATCH 12/93] Add HOMEPAGE_ALLOWED_HOSTS to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2f1e7d9e..8d9fe74b 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ services: image: ghcr.io/gethomepage/homepage:latest container_name: homepage environment: + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL PUID: 1000 # optional, your user id PGID: 1000 # optional, your group id ports: @@ -94,6 +95,7 @@ or docker run: ```bash docker run --name homepage \ + -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev \ -e PUID=1000 \ -e PGID=1000 \ -p 3000:3000 \ From 6ab57b7b14ba4eee6b57c7f81d9d8c64d5adc703 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 11:58:44 -0700 Subject: [PATCH 13/93] Update middleware.js --- src/middleware.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware.js b/src/middleware.js index b62bf823..f2011903 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -11,7 +11,7 @@ export function middleware(req) { if (!host || !allowedHosts.includes(host)) { // eslint-disable-next-line no-console console.error( - `Host validation failed for: ${host}. Hint: Set the HOMEPAGE_ALLOWED_HOSTS environment variable to allow requests from this host.`, + `Host validation failed for: ${host}. Hint: Set the HOMEPAGE_ALLOWED_HOSTS environment variable to allow requests from this host / port.`, ); return NextResponse.json({ error: "Host validation failed. See logs for more details." }, { status: 400 }); } From 471800d5bc17054830379171f391ffb03bb6e6a3 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:18:57 -0700 Subject: [PATCH 14/93] Update index.md --- docs/installation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 22712015..0037b61e 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,4 +29,4 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. +As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. From 5629440acf167721b276812b02a34983221b0d4c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:20:10 -0700 Subject: [PATCH 15/93] Fix: fix fiveColumns option (#4924) --- src/components/services/group.jsx | 2 +- tailwind.config.js | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 06fb83e1..433c0fa7 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -31,7 +31,7 @@ export default function ServicesGroup({ className={classNames( "services-group flex-1", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", - layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", + layout?.style !== "row" && fiveColumns ? "2xl:basis-1/5" : "", groupPadding, isSubgroup ? "subgroup" : "", )} diff --git a/tailwind.config.js b/tailwind.config.js index 5d425938..a4fa5b53 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -30,10 +30,6 @@ module.exports = { 900: "rgb(var(--color-900) / <alpha-value>)", }, }, - screens: { - "3xl": "1800px", - // => @media (min-width: 1800px) { ... } - }, }, }, plugins: [tailwindForms, tailwindScrollbars], From a090f98fab057b5274eecc57de463174af3081aa Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 11:23:52 -0700 Subject: [PATCH 16/93] Add HOMEPAGE_ALLOWED_HOSTS to readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2f1e7d9e..8d9fe74b 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ services: image: ghcr.io/gethomepage/homepage:latest container_name: homepage environment: + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL PUID: 1000 # optional, your user id PGID: 1000 # optional, your group id ports: @@ -94,6 +95,7 @@ or docker run: ```bash docker run --name homepage \ + -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev \ -e PUID=1000 \ -e PGID=1000 \ -p 3000:3000 \ From 91518d972d35c392742d3aa24292c819fbb1bb70 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:18:57 -0700 Subject: [PATCH 17/93] Update index.md --- docs/installation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 22712015..0037b61e 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,4 +29,4 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. +As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. From f7889eab276469be6889edb568ea1f1952653747 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:31:10 -0700 Subject: [PATCH 18/93] Clarify port --- docs/installation/docker.md | 4 ++-- docs/installation/source.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/installation/docker.md b/docs/installation/docker.md index 07c38071..cbe0fa32 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -38,7 +38,7 @@ services: - /path/to/config:/app/config # Make sure your local config directory exists - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev:1234 # required when deploying via public URL PUID: $PUID PGID: $PGID ``` @@ -46,7 +46,7 @@ services: ### With Docker Run ```bash -docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest +docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest ``` ### Using Environment Secrets diff --git a/docs/installation/source.md b/docs/installation/source.md index 38fcc2c5..f0f07140 100644 --- a/docs/installation/source.md +++ b/docs/installation/source.md @@ -21,7 +21,7 @@ If this is your first time starting, copy the `src/skeleton` directory to `confi Finally, run the server: ```bash -HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev pnpm start +HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 pnpm start ``` When updating homepage versions you will need to re-build the static files i.e. repeat the process above. From 0c7cac74ea29e24ea7fb0f0c023d9ed5f6039446 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:47:32 -0700 Subject: [PATCH 19/93] Update docker.md --- docs/installation/docker.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/installation/docker.md b/docs/installation/docker.md index cbe0fa32..f2498fab 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -16,7 +16,7 @@ services: - /path/to/config:/app/config # Make sure your local config directory exists - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port ``` ### Running as non-root @@ -38,7 +38,7 @@ services: - /path/to/config:/app/config # Make sure your local config directory exists - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev:1234 # required when deploying via public URL + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port PUID: $PUID PGID: $PGID ``` @@ -46,7 +46,7 @@ services: ### With Docker Run ```bash -docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest +docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest ``` ### Using Environment Secrets From a2f4dd289b065812bcd129cbe9f563c9e19820c5 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:31:31 -0700 Subject: [PATCH 20/93] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d9fe74b..fff2dfa4 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ services: image: ghcr.io/gethomepage/homepage:latest container_name: homepage environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required when deploying via public URL + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port PUID: 1000 # optional, your user id PGID: 1000 # optional, your group id ports: From 8190260400a38df415411d493cf7003a411ccfb4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 14:12:33 -0700 Subject: [PATCH 21/93] Fix: fix plex total size with larger libraries (#4933) --- src/widgets/plex/proxy.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index 53931aca..c092ebaa 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -111,7 +111,8 @@ export default async function plexProxyHandler(req, res) { : `/library/sections/${library._attributes.key}/albums`; // music [status, apiData] = await fetchFromPlexAPI(libraryURL, widget); if (apiData && apiData.MediaContainer) { - const size = parseInt(apiData.MediaContainer._attributes.size, 10); + const sizeProp = apiData.MediaContainer._attributes["totalSize"] ? "totalSize" : "size"; + const size = parseInt(apiData.MediaContainer._attributes[sizeProp], 10); if (library._attributes.type === "movie") { movies += size; } else if (library._attributes.type === "show") { From a0dc8c9ccb9fb5d6435997e2ba6c4f2522698848 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 14:20:33 -0700 Subject: [PATCH 22/93] Fix: fix larger breakpoint (#4935) --- src/components/services/group.jsx | 2 +- src/styles/globals.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 433c0fa7..06fb83e1 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -31,7 +31,7 @@ export default function ServicesGroup({ className={classNames( "services-group flex-1", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", - layout?.style !== "row" && fiveColumns ? "2xl:basis-1/5" : "", + layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", groupPadding, isSubgroup ? "subgroup" : "", )} diff --git a/src/styles/globals.css b/src/styles/globals.css index f671b1d0..27d6c2ff 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -2,6 +2,10 @@ @config '../../tailwind.config.js'; +@theme { + --breakpoint-3xl: 112rem; +} + /* The default border color has changed to `currentColor` in Tailwind CSS v4, so we've added these compatibility styles to make sure everything still From 66a8b1c21ec0dfdbc914b640fba14519aba1f1e1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 15:11:37 -0700 Subject: [PATCH 23/93] Just remove hostname --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2c15dc6c..3c87c46f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,7 +56,6 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ RUN apk add --no-cache su-exec -ENV HOSTNAME=:: ENV PORT=3000 EXPOSE $PORT From 6fca9e342d7dd69b320962e49438b41ee5a82de7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 15:42:56 -0700 Subject: [PATCH 24/93] Bump version to 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7603c18..065f97d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.0.0", + "version": "1.0.1", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From 90dd8e59674c7b11b881dab5e31b3282f5bc80d3 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 16:59:52 -0700 Subject: [PATCH 25/93] Update index.md --- docs/installation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 0037b61e..dd8c18f3 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,4 +29,4 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. +As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. From dd8e9270f24c2d89c99419d5d8566956ba015ed7 Mon Sep 17 00:00:00 2001 From: shamoon <shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:59:05 -0700 Subject: [PATCH 26/93] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 065f97d4..21653f19 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.0.1", + "version": "1.0.2", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From 8656b8e2f177e3d3b75a10f478f530d35a7c4f5a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:34:43 -0700 Subject: [PATCH 27/93] Revert hostname change --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 3c87c46f..2c15dc6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,6 +56,7 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ RUN apk add --no-cache su-exec +ENV HOSTNAME=:: ENV PORT=3000 EXPOSE $PORT From 9b06212a92b67e692807320ab0286b0abe587a62 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 18:29:27 -0700 Subject: [PATCH 28/93] Fix: wrapping in bookmarks (#4945) --- src/components/bookmarks/item.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index dd18bb71..4208f070 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -22,7 +22,7 @@ export default function Item({ bookmark, iconOnly = false }) { className={classNames( settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`, "text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10", - iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-8 mb-3", + iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-full mb-3", )} > {iconOnly ? ( From b5ac6175973b6fd612990819bf666662a064610c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:09:46 -0700 Subject: [PATCH 29/93] Fix: fix kavita API body with key (#4948) --- src/widgets/kavita/proxy.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/widgets/kavita/proxy.js b/src/widgets/kavita/proxy.js index af29d048..842e4b87 100644 --- a/src/widgets/kavita/proxy.js +++ b/src/widgets/kavita/proxy.js @@ -14,7 +14,11 @@ async function login(widget, service) { const endpoint = "Account/login"; const api = widgets?.[widget.type]?.api; const loginUrl = new URL(formatApiCall(api, { endpoint, ...widget })); - const loginBody = {}; + const loginBody = { + username: "", + password: "", + apiKey: "", + }; if (widget.username && widget.password) { loginBody.username = widget.username; loginBody.password = widget.password; From 733a3140d13eefd966d5bbe12ff95e4ae02b2b86 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:16:20 -0700 Subject: [PATCH 30/93] Documentation: note komga api key --- docs/widgets/services/komga.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/widgets/services/komga.md b/docs/widgets/services/komga.md index fc76127f..e71ae19a 100644 --- a/docs/widgets/services/komga.md +++ b/docs/widgets/services/komga.md @@ -20,4 +20,5 @@ widget: url: http://komga.host.or.ip:port username: username password: password + key: komgaapikey # optional ``` From ea1375e57583941f0a0c112e36d9376e71ebbaaf Mon Sep 17 00:00:00 2001 From: brikim <bkimmle@gmail.com> Date: Sat, 15 Mar 2025 00:02:13 -0500 Subject: [PATCH 31/93] Fix: correct units for speedtest tracker API v2 (#4950) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/widgets/speedtest/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index b4fbeaa6..e34f53ac 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -36,14 +36,14 @@ export default function Component({ service }) { <Block label="speedtest.download" value={t("common.bitrate", { - value: speedtestData.data.download * 1000 * 1000, + value: widget.version === 2 ? speedtestData.data.download * 8 : speedtestData.data.download * 1000 * 1000, decimals: bitratePrecision, })} /> <Block label="speedtest.upload" value={t("common.bitrate", { - value: speedtestData.data.upload * 1000 * 1000, + value: widget.version === 2 ? speedtestData.data.upload * 8 : speedtestData.data.upload * 1000 * 1000, decimals: bitratePrecision, })} /> From 97f4bcbdb0acfb5e9b98b4cdd23207b14d7bf9e6 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:35:47 -0700 Subject: [PATCH 32/93] Documentation: note disable ipv6 --- docs/troubleshooting/index.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/troubleshooting/index.md b/docs/troubleshooting/index.md index 1c72ba31..7f73f2dd 100644 --- a/docs/troubleshooting/index.md +++ b/docs/troubleshooting/index.md @@ -12,6 +12,7 @@ hide: - Check config/logs/homepage.log, on docker simply e.g. `docker logs homepage`. This may provide some insight into the reason for an error. - Check the browser error console, this can also sometimes provide useful information. - Consider setting the `ENV` variable `LOG_LEVEL` to `debug`. +- If certain widgets are failing when connecting to public APIs, consider [disabling IPv6](#disabling-ipv6). ## Service Widget Errors @@ -66,3 +67,24 @@ All service widgets work essentially the same, that is, homepage makes a proxied ## Missing custom icons If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container. + +## Disabling IPv6 + +If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), you may need to disable IPv6 on your host machine. This can be done by adding the following to your `docker-compose.yml` file (or for docker run, the equivalent flag): + +```yaml +services: + homepage: + ... + sysctls: + - net.ipv6.conf.all.disable_ipv6=1 +``` + +or disable IPv6 for the docker network: + +```yaml +networks: + some_network: + driver: bridge + enable_ipv6: false +``` From 9d40b67d499a51dc91ebd4e72f664b7eace587d7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:51:07 -0700 Subject: [PATCH 33/93] Change: prefer IPv4 in docker image (#4954) --- Dockerfile | 4 ++-- src/middleware.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2c15dc6c..7963407c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,12 +56,12 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ RUN apk add --no-cache su-exec -ENV HOSTNAME=:: +ENV HOSTNAME=0.0.0.0 ENV PORT=3000 EXPOSE $PORT HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \ - CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://localhost:$PORT/api/healthcheck || exit 1 + CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://127.0.0.1:$PORT/api/healthcheck || exit 1 ENTRYPOINT ["docker-entrypoint.sh"] CMD ["node", "server.js"] diff --git a/src/middleware.js b/src/middleware.js index f2011903..853a0094 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -4,7 +4,7 @@ export function middleware(req) { // Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set const host = req.headers.get("host"); const port = process.env.PORT || 3000; - let allowedHosts = [`localhost:${port}`]; + let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`]; if (process.env.HOMEPAGE_ALLOWED_HOSTS) { allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(",")); } From 4761a56b3ddccdb7dcbd92a7be7adc3b0c0891f4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:13:23 -0700 Subject: [PATCH 34/93] Remove reference to helm chart --- docs/installation/k8s.md | 79 ---------------------------------------- 1 file changed, 79 deletions(-) diff --git a/docs/installation/k8s.md b/docs/installation/k8s.md index cd9184ee..a8cdc8d6 100644 --- a/docs/installation/k8s.md +++ b/docs/installation/k8s.md @@ -3,85 +3,6 @@ title: Kubernetes Installation description: Install on Kubernetes --- -## Install with Helm - -There is an [unofficial helm chart](https://github.com/jameswynn/helm-charts/tree/main/charts/homepage) that creates all the necessary manifests, including the service account and RBAC entities necessary for service discovery. - -```sh -helm repo add jameswynn https://jameswynn.github.io/helm-charts -helm install homepage jameswynn/homepage -f values.yaml -``` - -The helm chart allows for all the configurations to be inlined directly in your `values.yaml`: - -```yaml -config: - bookmarks: - - Developer: - - Github: - - abbr: GH - href: https://github.com/ - services: - - My First Group: - - My First Service: - href: http://localhost/ - description: Homepage is awesome - - - My Second Group: - - My Second Service: - href: http://localhost/ - description: Homepage is the best - - - My Third Group: - - My Third Service: - href: http://localhost/ - description: Homepage is 😎 - widgets: - # show the kubernetes widget, with the cluster summary and individual nodes - - kubernetes: - cluster: - show: true - cpu: true - memory: true - showLabel: true - label: "cluster" - nodes: - show: true - cpu: true - memory: true - showLabel: true - - search: - provider: duckduckgo - target: _blank - kubernetes: - mode: cluster - settings: - -# The service account is necessary to allow discovery of other services -serviceAccount: - create: true - name: homepage - -# This enables the service account to access the necessary resources -enableRbac: true - -ingress: - main: - enabled: true - annotations: - # Example annotations to add Homepage to your Homepage! - gethomepage.dev/enabled: "true" - gethomepage.dev/name: "Homepage" - gethomepage.dev/description: "Dynamically Detected Homepage" - gethomepage.dev/group: "Dynamic" - gethomepage.dev/icon: "homepage.png" - hosts: - - host: homepage.example.com - paths: - - path: / - pathType: Prefix -``` - ## Install with Kubernetes Manifests If you don't want to use the unofficial Helm chart, you can also create your own Kubernetes manifest(s) and apply them with `kubectl apply -f filename.yaml`. From 16c1b2da9bcb2b78364377095c364f1ce4e92566 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:14:41 -0700 Subject: [PATCH 35/93] Enhancement: allow disabling host header checking (#4967) --- docs/installation/index.md | 6 +++++- src/middleware.js | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index dd8c18f3..38fb30ea 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,4 +29,8 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for examples. +As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for more information. + +`localhost:3000` and the loopback address `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow access from that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.io:1234,gethomepage.dev`, etc. + +This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended. diff --git a/src/middleware.js b/src/middleware.js index 853a0094..a2b24f4a 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -4,11 +4,11 @@ export function middleware(req) { // Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set const host = req.headers.get("host"); const port = process.env.PORT || 3000; - let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`]; + const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*"; if (process.env.HOMEPAGE_ALLOWED_HOSTS) { allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(",")); } - if (!host || !allowedHosts.includes(host)) { + if (!allowAll && (!host || !allowedHosts.includes(host))) { // eslint-disable-next-line no-console console.error( `Host validation failed for: ${host}. Hint: Set the HOMEPAGE_ALLOWED_HOSTS environment variable to allow requests from this host / port.`, From 0d0f465e16942ea4cb849d49e89fe80c4bcd5a79 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:16:42 -0700 Subject: [PATCH 36/93] Update index.md --- docs/installation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 38fb30ea..cc5f7a07 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -31,6 +31,6 @@ You have a few options for deploying homepage, depending on your needs. We offer As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for more information. -`localhost:3000` and the loopback address `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow access from that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.io:1234,gethomepage.dev`, etc. +`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow access from that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended. From 133a0a65398515f28a38b2c65da94ce6fc34fede Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:31:15 -0700 Subject: [PATCH 37/93] Fix this --- src/middleware.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/middleware.js b/src/middleware.js index a2b24f4a..bb9fbea5 100644 --- a/src/middleware.js +++ b/src/middleware.js @@ -4,6 +4,7 @@ export function middleware(req) { // Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set const host = req.headers.get("host"); const port = process.env.PORT || 3000; + let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`]; const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*"; if (process.env.HOMEPAGE_ALLOWED_HOSTS) { allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(",")); From 607a14083eb3a17078af0266abf3c3f63d81b628 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:38:35 -0700 Subject: [PATCH 38/93] Fix: jellyfin handle empty episode numbers (#4970) --- src/widgets/emby/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index b37b5018..41220e22 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -35,8 +35,8 @@ function generateStreamTitle(session, enableUser, showEpisodeNumber) { let streamTitle = ""; if (Type === "Episode" && showEpisodeNumber) { - const seasonStr = `S${ParentIndexNumber.toString().padStart(2, "0")}`; - const episodeStr = `E${IndexNumber.toString().padStart(2, "0")}`; + const seasonStr = ParentIndexNumber ? `S${ParentIndexNumber.toString().padStart(2, "0")}` : ""; + const episodeStr = IndexNumber ? `E${IndexNumber.toString().padStart(2, "0")}` : ""; streamTitle = `${SeriesName}: ${seasonStr} · ${episodeStr} - ${Name}`; } else { streamTitle = `${Name}${SeriesName ? ` - ${SeriesName}` : ""}`; From 964991781c3e710ca938ebc7c466b8e8cfb60348 Mon Sep 17 00:00:00 2001 From: Xavier Alexander <xalexander51@gmail.com> Date: Sat, 15 Mar 2025 10:40:26 -0400 Subject: [PATCH 39/93] Documentation: add HOMEPAGE_ALLOWED_HOSTS to k8s docs (#4969) --- docs/installation/k8s.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/installation/k8s.md b/docs/installation/k8s.md index cd9184ee..2aeff8ec 100644 --- a/docs/installation/k8s.md +++ b/docs/installation/k8s.md @@ -302,6 +302,9 @@ spec: - name: homepage image: "ghcr.io/gethomepage/homepage:latest" imagePullPolicy: Always + env: + - name: HOMEPAGE_ALLOWED_HOSTS + value: gethomepage.dev # required, may need port ports: - name: http containerPort: 3000 From 6292a0709ce0aedcc03b479eb7b6863003c229f8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 07:43:43 -0700 Subject: [PATCH 40/93] Bump version to 1.0.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 21653f19..02ebaf3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.0.2", + "version": "1.0.3", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From 82b159bf14be385763c6d8981b52778d058ee144 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 09:29:35 -0700 Subject: [PATCH 41/93] Improve docs --- docs/installation/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index cc5f7a07..093f43f0 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,8 +29,8 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for more information. +As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md) and [source](source.md) installation pages for more information. -`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow access from that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. +`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended. From b35dd80e8c4f74939a364f303a6838e504be7a2d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 09:29:35 -0700 Subject: [PATCH 42/93] Improve docs --- docs/installation/index.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index cc5f7a07..3aaa4144 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,8 +29,10 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable when deploying via a public URL, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can access your homepage. See the [docker](docker.md) and [source](source.md) installation pages for more information. +As of v1.0 there is one required environment variable to access homepage via a URL other than `localhost`, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md) and [source](source.md) installation pages for more information. -`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow access from that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. +`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. + +If you are seeing errors about host validation, check the homepage logs and ensure that the host as listed in the logs is in the `HOMEPAGE_ALLOWED_HOSTS` list. This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended. From 801ce479d8a392f91af7662fe46acb2cad936381 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 10:18:26 -0700 Subject: [PATCH 43/93] Add links to docs --- README.md | 2 +- docs/installation/docker.md | 4 ++-- docs/installation/k8s.md | 2 +- docs/installation/source.md | 2 ++ 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fff2dfa4..090973bd 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ services: image: ghcr.io/gethomepage/homepage:latest container_name: homepage environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts PUID: 1000 # optional, your user id PGID: 1000 # optional, your group id ports: diff --git a/docs/installation/docker.md b/docs/installation/docker.md index f2498fab..6d9148dd 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -16,7 +16,7 @@ services: - /path/to/config:/app/config # Make sure your local config directory exists - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts ``` ### Running as non-root @@ -38,7 +38,7 @@ services: - /path/to/config:/app/config # Make sure your local config directory exists - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods environment: - HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port + HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts PUID: $PUID PGID: $PGID ``` diff --git a/docs/installation/k8s.md b/docs/installation/k8s.md index 87112f0f..172b9b29 100644 --- a/docs/installation/k8s.md +++ b/docs/installation/k8s.md @@ -225,7 +225,7 @@ spec: imagePullPolicy: Always env: - name: HOMEPAGE_ALLOWED_HOSTS - value: gethomepage.dev # required, may need port + value: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts ports: - name: http containerPort: 3000 diff --git a/docs/installation/source.md b/docs/installation/source.md index f0f07140..6697eb92 100644 --- a/docs/installation/source.md +++ b/docs/installation/source.md @@ -25,3 +25,5 @@ HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 pnpm start ``` When updating homepage versions you will need to re-build the static files i.e. repeat the process above. + +See [HOMEPAGE_ALLOWED_HOSTS](index.md#homepage_allowed_hosts) for more information on this environment variable. From 6e9339b14c7022405e1528968213b817d4b88ea1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 15:30:21 -0700 Subject: [PATCH 44/93] Chore: update minecraftstatuspinger to 1.2.2 (#4982) --- package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 02ebaf3f..2b8bd695 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "json-rpc-2.0": "^1.7.0", "luxon": "^3.5.0", "memory-cache": "^0.2.0", - "minecraftstatuspinger": "^1.2.1", + "minecraftstatuspinger": "^1.2.2", "next": "^15.1.7", "next-i18next": "^12.1.0", "ping": "^0.4.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6100111b..6b5c5910 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^0.2.0 version: 0.2.0 minecraftstatuspinger: - specifier: ^1.2.1 - version: 1.2.1 + specifier: ^1.2.2 + version: 1.2.2 next: specifier: ^15.1.7 version: 15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -101,10 +101,6 @@ importers: xml-js: specifier: ^1.6.11 version: 1.6.11 - optionalDependencies: - osx-temperature-sensor: - specifier: ^1.0.8 - version: 1.0.8 devDependencies: '@tailwindcss/forms': specifier: ^0.5.10 @@ -151,6 +147,10 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 + optionalDependencies: + osx-temperature-sensor: + specifier: ^1.0.8 + version: 1.0.8 packages: @@ -1911,9 +1911,9 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minecraftstatuspinger@1.2.1: - resolution: {integrity: sha512-Qo/3TzV0UeULbVyqMqS9sUPbNKGFK7U7as1xlS/xeXryQQEwitOz5SkVhVphY4fCTacl5a+E4VXiTq6TPKYDKw==} - engines: {node: '>=16.0.0'} + minecraftstatuspinger@1.2.2: + resolution: {integrity: sha512-3PDWcifjw6cliGnGqw0+nJVWWPOcpLDyNLh4D84vCNzPD2h9REbN5Ne11I//CMkIu5xJiIuyGwI44gyRYYbpuw==} + engines: {node: '>=14.0.0'} mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} @@ -3918,7 +3918,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: @@ -3940,7 +3940,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4652,7 +4652,7 @@ snapshots: mimic-response@4.0.0: {} - minecraftstatuspinger@1.2.1: {} + minecraftstatuspinger@1.2.2: {} mini-svg-data-uri@1.4.4: {} From 65370a766851c4b888431dae1e2f08aa476df86b Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 16:23:29 -0700 Subject: [PATCH 45/93] Fix: fix Kubernetes stats in v1.0.0 (#4984) Co-authored-by: djeinstine <2105133+djeinstine@users.noreply.github.com> --- src/pages/api/kubernetes/stats/[...service].js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pages/api/kubernetes/stats/[...service].js b/src/pages/api/kubernetes/stats/[...service].js index 029f5a1d..3c89dc39 100644 --- a/src/pages/api/kubernetes/stats/[...service].js +++ b/src/pages/api/kubernetes/stats/[...service].js @@ -71,8 +71,8 @@ export default async function handler(req, res) { let depMem = 0; let depCpu = 0; const podMetrics = await metricsApi - .getPodMetrics(namespace, pod.metadata.name) - .then((response) => response) + .getPodMetrics(namespace, pod.items) + .then((response) => response.items) .catch((err) => { // 404 generally means that the metrics have not been populated yet if (err.statusCode !== 404) { @@ -81,9 +81,11 @@ export default async function handler(req, res) { return null; }); if (podMetrics) { - podMetrics.containers.forEach((container) => { - depMem += parseMemory(container.usage.memory); - depCpu += parseCpu(container.usage.cpu); + podMetrics.forEach((metrics) => { + metrics.containers.forEach((container) => { + depMem += parseMemory(container.usage.memory); + depCpu += parseCpu(container.usage.cpu); + }); }); } return { From 7b7244211405d2661bde06317cc669cba12265c9 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 16:29:02 -0700 Subject: [PATCH 46/93] Update index.md --- docs/installation/index.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 3aaa4144..d1f95dbe 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -29,10 +29,12 @@ You have a few options for deploying homepage, depending on your needs. We offer ### `HOMEPAGE_ALLOWED_HOSTS` -As of v1.0 there is one required environment variable to access homepage via a URL other than `localhost`, <code>HOMEPAGE_ALLOWED_HOSTS</code>. This is a comma separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md) and [source](source.md) installation pages for more information. +As of v1.0 there is one required environment variable to access homepage via a URL other than `localhost`, <code>HOMEPAGE_ALLOWED_HOSTS</code>. The setting helps prevent certain kinds of attacks when retrieving data from the homepage API proxy. -`localhost:3000` and `127.0.0.1:3000` are always allowed, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. +The value is a comma-separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md), [kubernetes](k8s.md) and [source](source.md) installation pages for more information about where / how to set the variable. -If you are seeing errors about host validation, check the homepage logs and ensure that the host as listed in the logs is in the `HOMEPAGE_ALLOWED_HOSTS` list. +`localhost:3000` and `127.0.0.1:3000` are always included, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc. + +If you are seeing errors about host validation, check the homepage logs and ensure that the host exactly as output in the logs is in the `HOMEPAGE_ALLOWED_HOSTS` list. This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended. From 564dfb7ce3983418dc44fd2d0d5183dc2c6e7bf7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 15 Mar 2025 21:05:11 -0700 Subject: [PATCH 47/93] Add k3d ingress setting and HOMEPAGE_ALLOWED_HOSTS --- k3d/k3d-helm-values.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/k3d/k3d-helm-values.yaml b/k3d/k3d-helm-values.yaml index 60b6fe38..ad23f7e5 100644 --- a/k3d/k3d-helm-values.yaml +++ b/k3d/k3d-helm-values.yaml @@ -43,9 +43,14 @@ config: target: _blank kubernetes: mode: cluster + ingress: true docker: settings: +env: + - name: HOMEPAGE_ALLOWED_HOSTS + value: "homepage.k3d.localhost:8080" + serviceAccount: create: true name: homepage From 95507aab5428d2d483b6267595f33b482a65d818 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 02:35:43 -0700 Subject: [PATCH 48/93] Change: re-enable k8s ingress by default (#4988) --- docs/configs/kubernetes.md | 4 ++-- k3d/k3d-helm-values.yaml | 1 - src/utils/kubernetes/ingress-list.js | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/configs/kubernetes.md b/docs/configs/kubernetes.md index 718095ef..49158e6b 100644 --- a/docs/configs/kubernetes.md +++ b/docs/configs/kubernetes.md @@ -25,13 +25,13 @@ To configure Kubernetes gateway-api, ingress or ingressRoute service discovery, Example settings: ```yaml -ingress: true # enable ingress only +ingress: true # default, enable ingress only ``` or ```yaml -ingress: true # enable ingress +ingress: true # default, enable ingress traefik: true # enable traefik ingressRoute gateway: true # enable gateway-api ``` diff --git a/k3d/k3d-helm-values.yaml b/k3d/k3d-helm-values.yaml index ad23f7e5..13bb9229 100644 --- a/k3d/k3d-helm-values.yaml +++ b/k3d/k3d-helm-values.yaml @@ -43,7 +43,6 @@ config: target: _blank kubernetes: mode: cluster - ingress: true docker: settings: diff --git a/src/utils/kubernetes/ingress-list.js b/src/utils/kubernetes/ingress-list.js index 2e44d4a1..49b5d667 100644 --- a/src/utils/kubernetes/ingress-list.js +++ b/src/utils/kubernetes/ingress-list.js @@ -8,7 +8,7 @@ const kc = getKubeConfig(); export default async function listIngress() { const networking = kc.makeApiClient(NetworkingV1Api); - const { ingress } = getKubernetes(); + const { ingress = true } = getKubernetes(); let ingressList = []; if (ingress) { From 9545757bb9b286ca7c35497ee58a2c27965084e8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 07:33:30 -0700 Subject: [PATCH 49/93] Fix: fix bookmark heights again (#4997) --- src/components/bookmarks/item.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index 4208f070..c9b84eac 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -22,7 +22,7 @@ export default function Item({ bookmark, iconOnly = false }) { className={classNames( settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`, "text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10", - iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-full mb-3", + iconOnly ? "h-[60px] w-[60px] grid" : "block w-full mb-3", )} > {iconOnly ? ( From 5ea46881eedcbfc3899f039798e77293cb81e418 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 08:32:27 -0700 Subject: [PATCH 50/93] Fix: re-add tailwind css safelist (#4999) --- src/pages/_app.jsx | 49 ++++++++++++++++++++++++++++++++++++++++++++++ tailwind.config.js | 44 ----------------------------------------- 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index bf46e3f6..052412d9 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -12,6 +12,55 @@ import { TabProvider } from "utils/contexts/tab"; import nextI18nextConfig from "../../next-i18next.config"; +// eslint-disable-next-line no-unused-vars +const tailwindSafelist = [ + // TODO: remove pending https://github.com/tailwindlabs/tailwindcss/pull/17147 + "backdrop-blur", + "backdrop-blur-sm", + "backdrop-blur-md", + "backdrop-blur-xl", + "backdrop-saturate-0", + "backdrop-saturate-50", + "backdrop-saturate-100", + "backdrop-saturate-150", + "backdrop-saturate-200", + "backdrop-brightness-0", + "backdrop-brightness-50", + "backdrop-brightness-75", + "backdrop-brightness-90", + "backdrop-brightness-95", + "backdrop-brightness-100", + "backdrop-brightness-105", + "backdrop-brightness-110", + "backdrop-brightness-125", + "backdrop-brightness-150", + "backdrop-brightness-200", + "grid-cols-1", + "md:grid-cols-1", + "md:grid-cols-2", + "lg:grid-cols-1", + "lg:grid-cols-2", + "lg:grid-cols-3", + "lg:grid-cols-4", + "lg:grid-cols-5", + "lg:grid-cols-6", + "lg:grid-cols-7", + "lg:grid-cols-8", + // for status + "bg-white", + "bg-black", + "dark:bg-white", + "bg-orange-400", + "dark:bg-orange-400", + // yep + "h-0 h-1 h-2 h-3 h-4 h-5 h-6 h-7 h-8 h-9 h-10 h-11 h-12 h-13 h-14 h-15 h-16 h-17 h-18 h-19 h-20 h-21 h-22 h-23 h-24 h-25 h-26 h-27 h-28 h-29 h-30 h-31 h-32 h-33 h-34 h-35 h-36 h-37 h-38 h-39 h-40 h-41 h-42 h-43 h-44 h-45 h-46 h-47 h-48 h-49 h-50 h-51 h-52 h-53 h-54 h-55 h-56 h-57 h-58 h-59 h-60 h-61 h-62 h-63 h-64 h-65 h-66 h-67 h-68 h-69 h-70 h-71 h-72 h-73 h-74 h-75 h-76 h-77 h-78 h-79 h-80 h-81 h-82 h-83 h-84 h-85 h-86 h-87 h-88 h-89 h-90 h-91 h-92 h-93 h-94 h-95 h-96", + "sm:h-0 sm:h-1 sm:h-2 sm:h-3 sm:h-4 sm:h-5 sm:h-6 sm:h-7 sm:h-8 sm:h-9 sm:h-10 sm:h-11 sm:h-12 sm:h-13 sm:h-14 sm:h-15 sm:h-16 sm:h-17 sm:h-18 sm:h-19 sm:h-20 sm:h-21 sm:h-22 sm:h-23 sm:h-24 sm:h-25 sm:h-26 sm:h-27 sm:h-28 sm:h-29 sm:h-30 sm:h-31 sm:h-32 sm:h-33 sm:h-34 sm:h-35 sm:h-36 sm:h-37 sm:h-38 sm:h-39 sm:h-40 sm:h-41 sm:h-42 sm:h-43 sm:h-44 sm:h-45 sm:h-46 sm:h-47 sm:h-48 sm:h-49 sm:h-50 sm:h-51 sm:h-52 sm:h-53 sm:h-54 sm:h-55 sm:h-56 sm:h-57 sm:h-58 sm:h-59 sm:h-60 sm:h-61 sm:h-62 sm:h-63 sm:h-64 sm:h-65 sm:h-66 sm:h-67 sm:h-68 sm:h-69 sm:h-70 sm:h-71 sm:h-72 sm:h-73 sm:h-74 sm:h-75 sm:h-76 sm:h-77 sm:h-78 sm:h-79 sm:h-80 sm:h-81 sm:h-82 sm:h-83 sm:h-84 sm:h-85 sm:h-86 sm:h-87 sm:h-88 sm:h-89 sm:h-90 sm:h-91 sm:h-92 sm:h-93 sm:h-94 sm:h-95 sm:h-96", + "md:h-0 md:h-1 md:h-2 md:h-3 md:h-4 md:h-5 md:h-6 md:h-7 md:h-8 md:h-9 md:h-10 md:h-11 md:h-12 md:h-13 md:h-14 md:h-15 md:h-16 md:h-17 md:h-18 md:h-19 md:h-20 md:h-21 md:h-22 md:h-23 md:h-24 md:h-25 md:h-26 md:h-27 md:h-28 md:h-29 md:h-30 md:h-31 md:h-32 md:h-33 md:h-34 md:h-35 md:h-36 md:h-37 md:h-38 md:h-39 md:h-40 md:h-41 md:h-42 md:h-43 md:h-44 md:h-45 md:h-46 md:h-47 md:h-48 md:h-49 md:h-50 md:h-51 md:h-52 md:h-53 md:h-54 md:h-55 md:h-56 md:h-57 md:h-58 md:h-59 md:h-60 md:h-61 md:h-62 md:h-63 md:h-64 md:h-65 md:h-66 md:h-67 md:h-68 md:h-69 md:h-70 md:h-71 md:h-72 md:h-73 md:h-74 md:h-75 md:h-76 md:h-77 md:h-78 md:h-79 md:h-80 md:h-81 md:h-82 md:h-83 md:h-84 md:h-85 md:h-86 md:h-87 md:h-88 md:h-89 md:h-90 md:h-91 md:h-92 md:h-93 md:h-94 md:h-95 md:h-96", + "lg:h-0 lg:h-1 lg:h-2 lg:h-3 lg:h-4 lg:h-5 lg:h-6 lg:h-7 lg:h-8 lg:h-9 lg:h-10 lg:h-11 lg:h-12 lg:h-13 lg:h-14 lg:h-15 lg:h-16 lg:h-17 lg:h-18 lg:h-19 lg:h-20 lg:h-21 lg:h-22 lg:h-23 lg:h-24 lg:h-25 lg:h-26 lg:h-27 lg:h-28 lg:h-29 lg:h-30 lg:h-31 lg:h-32 lg:h-33 lg:h-34 lg:h-35 lg:h-36 lg:h-37 lg:h-38 lg:h-39 lg:h-40 lg:h-41 lg:h-42 lg:h-43 lg:h-44 lg:h-45 lg:h-46 lg:h-47 lg:h-48 lg:h-49 lg:h-50 lg:h-51 lg:h-52 lg:h-53 lg:h-54 lg:h-55 lg:h-56 lg:h-57 lg:h-58 lg:h-59 lg:h-60 lg:h-61 lg:h-62 lg:h-63 lg:h-64 lg:h-65 lg:h-66 lg:h-67 lg:h-68 lg:h-69 lg:h-70 lg:h-71 lg:h-72 lg:h-73 lg:h-74 lg:h-75 lg:h-76 lg:h-77 lg:h-78 lg:h-79 lg:h-80 lg:h-81 lg:h-82 lg:h-83 lg:h-84 lg:h-85 lg:h-86 lg:h-87 lg:h-88 lg:h-89 lg:h-90 lg:h-91 lg:h-92 lg:h-93 lg:h-94 lg:h-95 lg:h-96", + "xl:h-0 xl:h-1 xl:h-2 xl:h-3 xl:h-4 xl:h-5 xl:h-6 xl:h-7 xl:h-8 xl:h-9 xl:h-10 xl:h-11 xl:h-12 xl:h-13 xl:h-14 xl:h-15 xl:h-16 xl:h-17 xl:h-18 xl:h-19 xl:h-20 xl:h-21 xl:h-22 xl:h-23 xl:h-24 xl:h-25 xl:h-26 xl:h-27 xl:h-28 xl:h-29 xl:h-30 xl:h-31 xl:h-32 xl:h-33 xl:h-34 xl:h-35 xl:h-36 xl:h-37 xl:h-38 xl:h-39 xl:h-40 xl:h-41 xl:h-42 xl:h-43 xl:h-44 xl:h-45 xl:h-46 xl:h-47 xl:h-48 xl:h-49 xl:h-50 xl:h-51 xl:h-52 xl:h-53 xl:h-54 xl:h-55 xl:h-56 xl:h-57 xl:h-58 xl:h-59 xl:h-60 xl:h-61 xl:h-62 xl:h-63 xl:h-64 xl:h-65 xl:h-66 xl:h-67 xl:h-68 xl:h-69 xl:h-70 xl:h-71 xl:h-72 xl:h-73 xl:h-74 xl:h-75 xl:h-76 xl:h-77 xl:h-78 xl:h-79 xl:h-80 xl:h-81 xl:h-82 xl:h-83 xl:h-84 xl:h-85 xl:h-86 xl:h-87 xl:h-88 xl:h-89 xl:h-90 xl:h-91 xl:h-92 xl:h-93 xl:h-94 xl:h-95 xl:h-96", + "2xl:h-0 2xl:h-1 2xl:h-2 2xl:h-3 2xl:h-4 2xl:h-5 2xl:h-6 2xl:h-7 2xl:h-8 2xl:h-9 2xl:h-10 2xl:h-11 2xl:h-12 2xl:h-13 2xl:h-14 2xl:h-15 2xl:h-16 2xl:h-17 2xl:h-18 2xl:h-19 2xl:h-20 2xl:h-21 2xl:h-22 2xl:h-23 2xl:h-24 2xl:h-25 2xl:h-26 2xl:h-27 2xl:h-28 2xl:h-29 2xl:h-30 2xl:h-31 2xl:h-32 2xl:h-33 2xl:h-34 2xl:h-35 2xl:h-36 2xl:h-37 2xl:h-38 2xl:h-39 2xl:h-40 2xl:h-41 2xl:h-42 2xl:h-43 2xl:h-44 2xl:h-45 2xl:h-46 2xl:h-47 2xl:h-48 2xl:h-49 2xl:h-50 2xl:h-51 2xl:h-52 2xl:h-53 2xl:h-54 2xl:h-55 2xl:h-56 2xl:h-57 2xl:h-58 2xl:h-59 2xl:h-60 2xl:h-61 2xl:h-62 2xl:h-63 2xl:h-64 2xl:h-65 2xl:h-66 2xl:h-67 2xl:h-68 2xl:h-69 2xl:h-70 2xl:h-71 2xl:h-72 2xl:h-73 2xl:h-74 2xl:h-75 2xl:h-76 2xl:h-77 2xl:h-78 2xl:h-79 2xl:h-80 2xl:h-81 2xl:h-82 2xl:h-83 2xl:h-84 2xl:h-85 2xl:h-86 2xl:h-87 2xl:h-88 2xl:h-89 2xl:h-90 2xl:h-91 2xl:h-92 2xl:h-93 2xl:h-94 2xl:h-95 2xl:h-96", +]; + function MyApp({ Component, pageProps }) { return ( <SWRConfig diff --git a/tailwind.config.js b/tailwind.config.js index a4fa5b53..4cc6f130 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -33,48 +33,4 @@ module.exports = { }, }, plugins: [tailwindForms, tailwindScrollbars], - // always include these in build as classes are dynamically constructed - safelist: [ - "backdrop-blur", - "backdrop-blur-sm", - "backdrop-blur-md", - "backdrop-blur-xl", - "backdrop-saturate-0", - "backdrop-saturate-50", - "backdrop-saturate-100", - "backdrop-saturate-150", - "backdrop-saturate-200", - "backdrop-brightness-0", - "backdrop-brightness-50", - "backdrop-brightness-75", - "backdrop-brightness-90", - "backdrop-brightness-95", - "backdrop-brightness-100", - "backdrop-brightness-105", - "backdrop-brightness-110", - "backdrop-brightness-125", - "backdrop-brightness-150", - "backdrop-brightness-200", - "grid-cols-1", - "md:grid-cols-1", - "md:grid-cols-2", - "lg:grid-cols-1", - "lg:grid-cols-2", - "lg:grid-cols-3", - "lg:grid-cols-4", - "lg:grid-cols-5", - "lg:grid-cols-6", - "lg:grid-cols-7", - "lg:grid-cols-8", - // for status - "bg-white", - "bg-black", - "dark:bg-white", - "bg-orange-400", - "dark:bg-orange-400", - { - pattern: /h-([0-96])/, - variants: ["sm", "md", "lg", "xl", "2xl"], - }, - ], }; From 5f19e4af910e9ab0aba0a2271d3ccc1f541958a0 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 13:12:20 -0700 Subject: [PATCH 51/93] Fix: fix custom quicklaunch search without search widget (#5003) --- src/pages/api/search/searchSuggestion.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index 7d5d250b..dbe072ea 100644 --- a/src/pages/api/search/searchSuggestion.js +++ b/src/pages/api/search/searchSuggestion.js @@ -1,5 +1,6 @@ import { searchProviders } from "components/widgets/search/search"; +import { getSettings } from "utils/config/config"; import cachedFetch from "utils/proxy/cached-fetch"; import { widgetsFromConfig } from "utils/config/widget-helpers"; @@ -12,8 +13,16 @@ export default async function handler(req, res) { const widgets = await widgetsFromConfig(); const searchWidget = widgets.find((w) => w.type === "search"); - provider.url = searchWidget.options.url; - provider.suggestionUrl = searchWidget.options.suggestionUrl; + if (searchWidget) { + provider.url = searchWidget.options.url; + provider.suggestionUrl = searchWidget.options.suggestionUrl; + } else { + const settings = getSettings(); + if (settings.quicklaunch && settings.quicklaunch.provider === "custom") { + provider.url = settings.quicklaunch.url; + provider.suggestionUrl = settings.quicklaunch.suggestionUrl; + } + } } if (!provider.suggestionUrl) { From 59cd5564f8f82b84406d3dceb87210a7a9720dd8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 16 Mar 2025 14:12:30 -0700 Subject: [PATCH 52/93] New Crowdin translations by GitHub Action (#4985) Co-authored-by: Crowdin Bot <support+bot@crowdin.com> --- public/locales/eu/common.json | 208 +++++++++++++++++----------------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index c122d734..f935b928 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -85,16 +85,16 @@ "ping": { "error": "Error", "ping": "Ping", - "down": "Down", - "up": "Up", + "down": "Behera", + "up": "Gora", "not_available": "Not Available" }, "siteMonitor": { "http_status": "HTTP status", "error": "Error", - "response": "Response", - "down": "Down", - "up": "Up", + "response": "Erantzuna", + "down": "Behera", + "up": "Gora", "not_available": "Not Available" }, "emby": { @@ -102,8 +102,8 @@ "transcoding": "Transcoding", "bitrate": "Bit-tasa", "no_active": "No Active Streams", - "movies": "Movies", - "series": "Series", + "movies": "Filmak", + "series": "Serieak", "episodes": "Episodes", "songs": "Abestiak" }, @@ -115,39 +115,39 @@ "unknown": "Ezezaguna" }, "evcc": { - "pv_power": "Production", - "battery_soc": "Battery", - "grid_power": "Grid", - "home_power": "Consumption", - "charge_power": "Charger", + "pv_power": "Produkzioak", + "battery_soc": "Bateria", + "grid_power": "Sarea", + "home_power": "Kontsumoa", + "charge_power": "Kargagailua", "kilowatt": "kW" }, "flood": { - "download": "Download", - "upload": "Upload", + "download": "Jeitsierak", + "upload": "Kargatu", "leech": "Leech", "seed": "Seed" }, "freshrss": { - "subscriptions": "Subscriptions", - "unread": "Unread" + "subscriptions": "Harpidetzak", + "unread": "Irakurri gabe" }, "fritzbox": { "connectionStatus": "Status", "connectionStatusUnconfigured": "Unconfigured", - "connectionStatusConnecting": "Connecting", + "connectionStatusConnecting": "Konektatzen", "connectionStatusAuthenticating": "Authenticating", "connectionStatusPendingDisconnect": "Pending Disconnect", "connectionStatusDisconnecting": "Disconnecting", - "connectionStatusDisconnected": "Disconnected", - "connectionStatusConnected": "Connected", + "connectionStatusDisconnected": "Deskonektatuta", + "connectionStatusConnected": "Konektatuta", "uptime": "Uptime", "maxDown": "Max. Down", "maxUp": "Max. Up", - "down": "Down", - "up": "Up", + "down": "Behera", + "up": "Gora", "received": "Received", - "sent": "Sent", + "sent": "Bidalita", "externalIPAddress": "Ext. IP", "externalIPv6Address": "Ext. IPv6", "externalIPv6Prefix": "Ext. IPv6-Prefix" @@ -189,7 +189,7 @@ "plex": { "streams": "Active Streams", "albums": "Albums", - "movies": "Movies", + "movies": "Filmak", "tv": "TV Shows" }, "sabnzbd": { @@ -199,18 +199,18 @@ }, "rutorrent": { "active": "Active", - "upload": "Upload", - "download": "Download" + "upload": "Kargatu", + "download": "Jeitsierak" }, "transmission": { - "download": "Download", - "upload": "Upload", + "download": "Jeitsierak", + "upload": "Kargatu", "leech": "Leech", "seed": "Seed" }, "qbittorrent": { - "download": "Download", - "upload": "Upload", + "download": "Jeitsierak", + "upload": "Kargatu", "leech": "Leech", "seed": "Seed" }, @@ -223,8 +223,8 @@ "invalid": "Invalid" }, "deluge": { - "download": "Download", - "upload": "Upload", + "download": "Jeitsierak", + "upload": "Kargatu", "leech": "Leech", "seed": "Seed" }, @@ -233,15 +233,15 @@ "cachemissbytes": "Cache Miss Bytes" }, "downloadstation": { - "download": "Download", - "upload": "Upload", + "download": "Jeitsierak", + "upload": "Kargatu", "leech": "Leech", "seed": "Seed" }, "sonarr": { "wanted": "Wanted", "queued": "Queued", - "series": "Series", + "series": "Serieak", "queue": "Queue", "unknown": "Ezezaguna" }, @@ -249,7 +249,7 @@ "wanted": "Wanted", "missing": "Missing", "queued": "Queued", - "movies": "Movies", + "movies": "Filmak", "queue": "Queue", "unknown": "Ezezaguna" }, @@ -285,7 +285,7 @@ }, "netalertx": { "total": "Guztira", - "connected": "Connected", + "connected": "Konektatuta", "new_devices": "New Devices", "down_alerts": "Down Alerts" }, @@ -302,8 +302,8 @@ "latency": "Latency" }, "speedtest": { - "upload": "Upload", - "download": "Download", + "upload": "Kargatu", + "download": "Jeitsierak", "ping": "Ping" }, "portainer": { @@ -315,7 +315,7 @@ "download": "Downloaded", "nondownload": "Non-Downloaded", "read": "Read", - "unread": "Unread", + "unread": "Irakurri gabe", "downloadedread": "Downloaded & Read", "downloadedunread": "Downloaded & Unread", "nondownloadedread": "Non-Downloaded & Read", @@ -405,7 +405,7 @@ "medusa": { "wanted": "Wanted", "queued": "Queued", - "series": "Series" + "series": "Serieak" }, "minecraft": { "players": "Jokalariak", @@ -416,7 +416,7 @@ }, "miniflux": { "read": "Read", - "unread": "Unread" + "unread": "Irakurri gabe" }, "authentik": { "users": "Users", @@ -523,15 +523,15 @@ "up_to_date": "Up to Date", "child_bridges": "Child Bridges", "child_bridges_status": "{{ok}}/{{total}}", - "up": "Up", + "up": "Gora", "pending": "Pending", - "down": "Down" + "down": "Behera" }, "healthchecks": { "new": "New", - "up": "Up", + "up": "Gora", "grace": "In Grace Period", - "down": "Down", + "down": "Behera", "paused": "Paused", "status": "Status", "last_ping": "Last Ping", @@ -646,8 +646,8 @@ "load": "Load Avg", "memory": "Mem Usage", "wanStatus": "WAN Status", - "up": "Up", - "down": "Down", + "up": "Gora", + "down": "Behera", "temp": "Temp", "disk": "Disk Usage", "wanIP": "WAN IP" @@ -660,7 +660,7 @@ }, "immich": { "users": "Users", - "photos": "Photos", + "photos": "Argazkiak", "videos": "Videos", "storage": "Storage" }, @@ -672,14 +672,14 @@ "m": "m" }, "atsumeru": { - "series": "Series", + "series": "Serieak", "archives": "Archives", "chapters": "Chapters", "categories": "Categories" }, "komga": { "libraries": "Libraries", - "series": "Series", + "series": "Serieak", "books": "Books" }, "diskstation": { @@ -688,13 +688,13 @@ "volumeAvailable": "Available" }, "mylar": { - "series": "Series", - "issues": "Issues", + "series": "Serieak", + "issues": "Arazoak", "wanted": "Wanted" }, "photoprism": { "albums": "Albums", - "photos": "Photos", + "photos": "Argazkiak", "videos": "Videos", "people": "People" }, @@ -772,7 +772,7 @@ "books": "Books", "authors": "Authors", "categories": "Categories", - "series": "Series" + "series": "Serieak" }, "jdownloader": { "downloadCount": "Queue", @@ -781,7 +781,7 @@ "downloadSpeed": "Speed" }, "kavita": { - "seriesCount": "Series", + "seriesCount": "Serieak", "totalFiles": "Files" }, "azuredevops": { @@ -801,8 +801,8 @@ "status": "Status", "online": "Online", "offline": "Offline", - "name": "Name", - "map": "Map", + "name": "Izena", + "map": "Mapa", "currentPlayers": "Current players", "players": "Jokalariak", "maxPlayers": "Max players", @@ -819,10 +819,10 @@ "recipes": "Recipes", "users": "Users", "categories": "Categories", - "tags": "Tags" + "tags": "Etiketak" }, "openmediavault": { - "downloading": "Downloading", + "downloading": "Deskargatzen", "total": "Guztira", "running": "Running", "stopped": "Stopped", @@ -832,8 +832,8 @@ "openwrt": { "uptime": "Uptime", "cpuLoad": "CPU Load Avg (5m)", - "up": "Up", - "down": "Down", + "up": "Gora", + "down": "Behera", "bytesTx": "Transmitted", "bytesRx": "Received" }, @@ -846,9 +846,9 @@ "sitesDown": "Sites Down", "paused": "Paused", "notyetchecked": "Not Yet Checked", - "up": "Up", + "up": "Gora", "seemsdown": "Seems Down", - "down": "Down", + "down": "Behera", "unknown": "Ezezaguna" }, "calendar": { @@ -856,7 +856,7 @@ "physicalRelease": "Physical release", "digitalRelease": "Digital release", "noEventsToday": "No events for today!", - "noEventsFound": "No events found" + "noEventsFound": "Ez da gertaerarik aurkitu." }, "romm": { "platforms": "Platforms", @@ -868,7 +868,7 @@ }, "mailcow": { "domains": "Domains", - "mailboxes": "Mailboxes", + "mailboxes": "Gutunontziak", "mails": "Mails", "storage": "Storage" }, @@ -877,14 +877,14 @@ "criticals": "Criticals" }, "plantit": { - "events": "Events", - "plants": "Plants", - "photos": "Photos", + "events": "Ekitaldiak", + "plants": "Landareak", + "photos": "Argazkiak", "species": "Species" }, "gitea": { - "notifications": "Notifications", - "issues": "Issues", + "notifications": "Jakinarazpenak", + "issues": "Arazoak", "pulls": "Pull Requests" }, "stash": { @@ -894,34 +894,34 @@ "playDuration": "Time Watched", "sceneSize": "Scenes Size", "sceneDuration": "Scenes Duration", - "images": "Images", - "imageSize": "Images Size", + "images": "Irudia", + "imageSize": "Irudiaren tamaina", "galleries": "Galleries", "performers": "Performers", "studios": "Studios", - "movies": "Movies", - "tags": "Tags", + "movies": "Filmak", + "tags": "Etiketak", "oCount": "O Count" }, "tandoor": { "users": "Users", "recipes": "Recipes", - "keywords": "Keywords" + "keywords": "Hitz gakoak" }, "homebox": { - "items": "Items", + "items": "Elementuak", "totalWithWarranty": "With Warranty", "locations": "Locations", - "labels": "Labels", + "labels": "Etiketak", "users": "Users", - "totalValue": "Total Value" + "totalValue": "Guztira" }, "crowdsec": { "alerts": "Alerts", "bans": "Bans" }, "wgeasy": { - "connected": "Connected", + "connected": "Konektatuta", "enabled": "Enabled", "disabled": "Disabled", "total": "Guztira" @@ -934,8 +934,8 @@ }, "myspeed": { "ping": "Ping", - "download": "Download", - "upload": "Upload" + "download": "Jeitsierak", + "upload": "Kargatu" }, "stocks": { "stocks": "Stocks", @@ -951,23 +951,23 @@ }, "linkwarden": { "links": "Links", - "collections": "Collections", - "tags": "Tags" + "collections": "Bildumak", + "tags": "Etiketak" }, "zabbix": { "unclassified": "Not classified", "information": "Informazioa", - "warning": "Warning", - "average": "Average", - "high": "High", + "warning": "Abisua", + "average": "Batez besteko", + "high": "Altua", "disaster": "Disaster" }, "lubelogger": { "vehicle": "Vehicle", - "vehicles": "Vehicles", + "vehicles": "Ibilgailuak", "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", + "reminders": "Oroigarriak", + "nextReminder": "Hurrengo abisua", "none": "None" }, "vikunja": { @@ -977,7 +977,7 @@ "tasksInProgress": "Tasks In Progress" }, "headscale": { - "name": "Name", + "name": "Izena", "address": "Address", "last_seen": "Last Seen", "status": "Status", @@ -985,10 +985,10 @@ "offline": "Offline" }, "beszel": { - "name": "Name", + "name": "Izena", "systems": "Systems", - "up": "Up", - "down": "Down", + "up": "Gora", + "down": "Behera", "paused": "Paused", "pending": "Pending", "status": "Status", @@ -999,23 +999,23 @@ "network": "NET" }, "argocd": { - "apps": "Apps", - "synced": "Synced", + "apps": "Aplikazioak", + "synced": "Sinkronizatuta", "outOfSync": "Out Of Sync", "healthy": "Osasuntsu", "degraded": "Degraded", "progressing": "Progressing", "missing": "Missing", - "suspended": "Suspended" + "suspended": "Etenda" }, "spoolman": { "loading": "Loading" }, "gitlab": { - "groups": "Groups", - "issues": "Issues", + "groups": "Taldeak", + "issues": "Arazoak", "merges": "Merge Requests", - "projects": "Projects" + "projects": "Proiektuak" }, "apcups": { "status": "Status", @@ -1024,11 +1024,11 @@ "timeleft": "Time Left" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", + "bookmarks": "Laster-markak", + "favorites": "Gogokoak", + "archived": "Artxibatuta", "highlights": "Highlights", - "lists": "Lists", - "tags": "Tags" + "lists": "Zerrendak", + "tags": "Etiketak" } } From 6fbe080b280acfde81c75eb2574a56dcd0fd97d9 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 14:13:12 -0700 Subject: [PATCH 53/93] Bump version to 1.0.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b8bd695..44fc1b35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.0.3", + "version": "1.0.4", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From 934ad3a6f1b8630f9752f29a2646242f2cff74f8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:33:38 -0700 Subject: [PATCH 54/93] Fix: remove medusa widget trailing slash (#5007) --- src/widgets/medusa/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/medusa/widget.js b/src/widgets/medusa/widget.js index 3619d16b..fbfd8af2 100644 --- a/src/widgets/medusa/widget.js +++ b/src/widgets/medusa/widget.js @@ -1,7 +1,7 @@ import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { - api: "{url}/api/v1/{key}/{endpoint}/", + api: "{url}/api/v1/{key}/{endpoint}", proxyHandler: genericProxyHandler, mappings: { From b4dc53c7c0e07ba4eaa59a4b3dd698ae11fa1f32 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 16 Mar 2025 20:09:34 -0700 Subject: [PATCH 55/93] Feature: allow disable ipv6 in proxy, refactor cacheFetch to use proxy (#5011) --- docs/troubleshooting/index.md | 13 ++------- src/pages/api/releases.js | 4 +-- src/pages/api/search/searchSuggestion.js | 4 +-- src/pages/api/widgets/openmeteo.js | 4 +-- src/pages/api/widgets/openweathermap.js | 4 +-- src/pages/api/widgets/stocks.js | 4 +-- src/pages/api/widgets/weather.js | 4 +-- src/utils/config/widget-helpers.js | 29 ++++++++++---------- src/utils/proxy/cached-fetch.js | 25 ----------------- src/utils/proxy/http.js | 35 +++++++++++++++++++++--- 10 files changed, 61 insertions(+), 65 deletions(-) delete mode 100644 src/utils/proxy/cached-fetch.js diff --git a/docs/troubleshooting/index.md b/docs/troubleshooting/index.md index 7f73f2dd..81550439 100644 --- a/docs/troubleshooting/index.md +++ b/docs/troubleshooting/index.md @@ -70,7 +70,9 @@ If, after correctly adding and mapping your custom icons via the [Icons](../conf ## Disabling IPv6 -If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), you may need to disable IPv6 on your host machine. This can be done by adding the following to your `docker-compose.yml` file (or for docker run, the equivalent flag): +If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy. + +Alternatively, you can use the `sysctls` option in your docker-compose file to disable IPv6 for the homepage container completely: ```yaml services: @@ -79,12 +81,3 @@ services: sysctls: - net.ipv6.conf.all.disable_ipv6=1 ``` - -or disable IPv6 for the docker network: - -```yaml -networks: - some_network: - driver: bridge - enable_ipv6: false -``` diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js index f15930c2..372ace9d 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,4 +1,4 @@ -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; import createLogger from "utils/logger"; const logger = createLogger("releases"); @@ -6,7 +6,7 @@ const logger = createLogger("releases"); export default async function handler(req, res) { const releasesURL = "https://api.github.com/repos/gethomepage/homepage/releases"; try { - return res.send(await cachedFetch(releasesURL, 5)); + return res.send(await cachedRequest(releasesURL, 5)); } catch (e) { logger.error(`Error checking GitHub releases: ${e}`); return res.send([]); diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index dbe072ea..209d1f2c 100644 --- a/src/pages/api/search/searchSuggestion.js +++ b/src/pages/api/search/searchSuggestion.js @@ -1,7 +1,7 @@ import { searchProviders } from "components/widgets/search/search"; import { getSettings } from "utils/config/config"; -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; import { widgetsFromConfig } from "utils/config/widget-helpers"; export default async function handler(req, res) { @@ -29,5 +29,5 @@ export default async function handler(req, res) { return res.json([query, []]); // Responde with the same array format but with no suggestions. } - return res.send(await cachedFetch(`${provider.suggestionUrl}${encodeURIComponent(query)}`, 5, "Mozilla/5.0")); + return res.send(await cachedRequest(`${provider.suggestionUrl}${encodeURIComponent(query)}`, 5, "Mozilla/5.0")); } diff --git a/src/pages/api/widgets/openmeteo.js b/src/pages/api/widgets/openmeteo.js index e63847b4..28f2e4f0 100644 --- a/src/pages/api/widgets/openmeteo.js +++ b/src/pages/api/widgets/openmeteo.js @@ -1,9 +1,9 @@ -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { latitude, longitude, units, cache, timezone } = req.query; const degrees = units === "metric" ? "celsius" : "fahrenheit"; const timezeone = timezone ?? "auto"; const apiUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=sunrise,sunset¤t_weather=true&temperature_unit=${degrees}&timezone=${timezeone}`; - return res.send(await cachedFetch(apiUrl, cache)); + return res.send(await cachedRequest(apiUrl, cache)); } diff --git a/src/pages/api/widgets/openweathermap.js b/src/pages/api/widgets/openweathermap.js index 089ee804..3bdc7a82 100644 --- a/src/pages/api/widgets/openweathermap.js +++ b/src/pages/api/widgets/openweathermap.js @@ -1,4 +1,4 @@ -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; @@ -26,5 +26,5 @@ export default async function handler(req, res) { const apiUrl = `https://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&appid=${apiKey}&units=${units}&lang=${lang}`; - return res.send(await cachedFetch(apiUrl, cache)); + return res.send(await cachedRequest(apiUrl, cache)); } diff --git a/src/pages/api/widgets/stocks.js b/src/pages/api/widgets/stocks.js index 3941a773..4e9f3f55 100644 --- a/src/pages/api/widgets/stocks.js +++ b/src/pages/api/widgets/stocks.js @@ -1,4 +1,4 @@ -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import createLogger from "utils/logger"; @@ -60,7 +60,7 @@ export default async function handler(req, res) { const apiUrl = `https://finnhub.io/api/v1/quote?symbol=${ticker}&token=${apiKey}`; // Finnhub free accounts allow up to 60 calls/minute // https://finnhub.io/pricing - const { c, dp } = await cachedFetch(apiUrl, cache || 1); + const { c, dp } = await cachedRequest(apiUrl, cache || 1); logger.debug("Finnhub API response for %s: %o", ticker, { c, dp }); // API sometimes returns 200, but values returned are `null` diff --git a/src/pages/api/widgets/weather.js b/src/pages/api/widgets/weather.js index 9d0451ce..9e63e48d 100644 --- a/src/pages/api/widgets/weather.js +++ b/src/pages/api/widgets/weather.js @@ -1,4 +1,4 @@ -import cachedFetch from "utils/proxy/cached-fetch"; +import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; @@ -26,5 +26,5 @@ export default async function handler(req, res) { const apiUrl = `http://api.weatherapi.com/v1/current.json?q=${latitude},${longitude}&key=${apiKey}&lang=${lang}`; - return res.send(await cachedFetch(apiUrl, cache)); + return res.send(await cachedRequest(apiUrl, cache)); } diff --git a/src/utils/config/widget-helpers.js b/src/utils/config/widget-helpers.js index 3b1355d6..93f71194 100644 --- a/src/utils/config/widget-helpers.js +++ b/src/utils/config/widget-helpers.js @@ -56,21 +56,22 @@ export async function cleanWidgetGroups(widgets) { export async function getPrivateWidgetOptions(type, widgetIndex) { const widgets = await widgetsFromConfig(); - const privateOptions = widgets.map((widget) => { - const { index, url, username, password, key, apiKey } = widget.options; + const privateOptions = + widgets.map((widget) => { + const { index, url, username, password, key, apiKey } = widget.options; - return { - type: widget.type, - options: { - index, - url, - username, - password, - key, - apiKey, - }, - }; - }); + return { + type: widget.type, + options: { + index, + url, + username, + password, + key, + apiKey, + }, + }; + }) || {}; return type !== undefined && widgetIndex !== undefined ? privateOptions.find((o) => o.type === type && o.options.index === parseInt(widgetIndex, 10))?.options diff --git a/src/utils/proxy/cached-fetch.js b/src/utils/proxy/cached-fetch.js deleted file mode 100644 index ae3c4610..00000000 --- a/src/utils/proxy/cached-fetch.js +++ /dev/null @@ -1,25 +0,0 @@ -import cache from "memory-cache"; - -const defaultDuration = 5; - -export default async function cachedFetch(url, duration, ua) { - const cached = cache.get(url); - - // eslint-disable-next-line no-param-reassign - duration = duration || defaultDuration; - - if (cached) { - return cached; - } - - // wrapping text in JSON.parse to handle utf-8 issues - const options = {}; - if (ua) { - options.headers = { - "User-Agent": ua, - }; - } - const data = await fetch(url, options).then((res) => res.json()); - cache.put(url, data, duration * 1000 * 60); - return data; -} diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index 3743515b..f8d2dcce 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -3,6 +3,7 @@ import { createUnzip, constants as zlibConstants } from "node:zlib"; import { http, https } from "follow-redirects"; +import cache from "memory-cache"; import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import { sanitizeErrorURL } from "./api-helpers"; @@ -81,20 +82,46 @@ export function httpRequest(url, params) { return handleRequest(http, url, params); } +export async function cachedRequest(url, duration = 5, ua = "homepage") { + const cached = cache.get(url); + + if (cached) { + return cached; + } + + const options = { + headers: { + "User-Agent": ua, + Accept: "application/json", + }, + }; + let [, , data] = await httpProxy(url, options); + if (Buffer.isBuffer(data)) { + try { + data = JSON.parse(Buffer.from(data).toString()); + } catch (e) { + logger.debug("Error parsing cachedRequest data for %s: %s %s", url, Buffer.from(data).toString(), e); + data = Buffer.from(data).toString(); + } + } + cache.put(url, data, duration * 1000 * 60); + return data; +} + export async function httpProxy(url, params = {}) { const constructedUrl = new URL(url); + const disableIpv6 = process.env.HOMEPAGE_PROXY_DISABLE_IPV6 === "true"; + const agentOptions = disableIpv6 ? { family: 4, autoSelectFamily: false } : {}; let request = null; if (constructedUrl.protocol === "https:") { request = httpsRequest(constructedUrl, { - agent: new https.Agent({ - rejectUnauthorized: false, - }), + agent: new https.Agent({ ...agentOptions, rejectUnauthorized: false }), ...params, }); } else { request = httpRequest(constructedUrl, { - agent: new http.Agent(), + agent: new http.Agent(agentOptions), ...params, }); } From de9c015f7fef10d7cbc9b951b7462982026fe781 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 07:24:12 -0700 Subject: [PATCH 56/93] Fix: fix minecraft players after move to minecraftstatuspinger (#5017) --- src/widgets/minecraft/proxy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index ab01ae12..5f238acb 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -18,7 +18,7 @@ export default async function minecraftProxyHandler(req, res) { res.status(200).send({ version: pingResponse.status.version.name, online: true, - players: pingResponse.status.players.online, + players: pingResponse.status.players, }); } catch (e) { if (e) logger.error(e); From 071b5275bc848a25492a9ca1e69004c6bc7d84e8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:19:27 -0700 Subject: [PATCH 57/93] Documentation: fix install page buttons --- docs/assets/custom.css | 3 --- docs/installation/index.md | 8 ++++---- docs/stylesheets/extra.css | 10 ++++++++++ 3 files changed, 14 insertions(+), 7 deletions(-) delete mode 100644 docs/assets/custom.css diff --git a/docs/assets/custom.css b/docs/assets/custom.css deleted file mode 100644 index f959128e..00000000 --- a/docs/assets/custom.css +++ /dev/null @@ -1,3 +0,0 @@ -.md-typeset[data-page-id="landing"] .md-header-anchor { - display: none; -} diff --git a/docs/installation/index.md b/docs/installation/index.md index d1f95dbe..f082845b 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -13,16 +13,16 @@ You have a few options for deploying homepage, depending on your needs. We offer <br> <div class="grid cards" style="margin: 0 auto;" markdown> -:simple-docker: [ Install on Docker :octicons-arrow-right-24:](docker.md) +[:simple-docker: Install on Docker :octicons-arrow-right-24:](docker.md) { .card } -:simple-kubernetes: [ Install on Kubernetes :octicons-arrow-right-24:](k8s.md) +[:simple-kubernetes: Install on Kubernetes :octicons-arrow-right-24:](k8s.md) { .card } -:simple-unraid: [ Install on UNRAID :octicons-arrow-right-24:](unraid.md) +[:simple-unraid: Install on UNRAID :octicons-arrow-right-24:](unraid.md) { .card } -:simple-nextdotjs: [ Building from source :octicons-arrow-right-24:](source.md) +[:simple-nextdotjs: Building from source :octicons-arrow-right-24:](source.md) { .card } </div> diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index eb1ddd25..7f299d2e 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -286,3 +286,13 @@ body[data-md-color-scheme="default"] { .md-tabs__link { transform: translateZ(0); } + +.grid.cards .card { + padding: 0; +} + +.grid.cards .card a { + display: block; + padding: 0.8rem; + text-decoration: none; +} From 8d20f22932a3e22aec4f8e4baac90c1557317828 Mon Sep 17 00:00:00 2001 From: morliont <thijs.morlion@gmail.com> Date: Mon, 17 Mar 2025 19:30:01 +0100 Subject: [PATCH 58/93] Enhancement: support dynamic list rendering in custom api widget (#5012) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/customapi.md | 52 +++++++++++++++++++- src/widgets/customapi/component.jsx | 74 +++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 1 deletion(-) diff --git a/docs/widgets/services/customapi.md b/docs/widgets/services/customapi.md index 0deb8294..79345008 100644 --- a/docs/widgets/services/customapi.md +++ b/docs/widgets/services/customapi.md @@ -138,7 +138,15 @@ You can manipulate data with the following tools `remap`, `scale`, `prefix` and prefix: "$" ``` -## List View +## Display Options + +The widget supports different display modes that can be set using the `display` property. + +### Block View (Default) + +The default display mode is `block`, which shows fields in a block format. + +### List View You can change the default block view to a list view by setting the `display` option to `list`. @@ -169,6 +177,48 @@ The list view can optionally display an additional field next to the primary fie format: date ``` +### Dynamic List View + +To display a list of items from an array in the API response, set the `display` property to `dynamic-list` and configure the `mappings` object with the following properties: + +```yaml +widget: + type: customapi + url: https://example.com/api/servers + display: dynamic-list + mappings: + items: data # optional, the path to the array in the API response. Omit this option if the array is at the root level + name: id # required, field in each item to use as the item name (left side) + label: ip_address # required, field in each item to use as the item label (right side) + limit: 5 # optional, limit the number of items to display + target: https://example.com/server/{id} # optional, makes items clickable with template support +``` + +This configuration would work with an API that returns a response like: + +```json +{ + "data": [ + { "id": "server1", "name": "Server 1", "ip_address": "192.168.0.1" }, + { "id": "server2", "name": "Server 2", "ip_address": "192.168.0.2" } + ] +} +``` + +The widget would display a list with two items: + +- "Server 1" on the left and "192.168.0.1" on the right, clickable to "https://example.com/server/server1" +- "Server 2" on the left and "192.168.0.2" on the right, clickable to "https://example.com/server/server2" + +For nested fields in the items, you can use dot notation: + +```yaml +mappings: + items: data.results.servers + name: details.id + label: details.name +``` + ## Custom Headers Pass custom headers using the `headers` option, for example: diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index 6d0a63cd..3a6ac069 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -1,8 +1,10 @@ import { useTranslation } from "next-i18next"; import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import classNames from "classnames"; import useWidgetAPI from "utils/proxy/use-widget-api"; +import * as shvl from "utils/config/shvl"; function getValue(field, data) { let value = data; @@ -165,6 +167,16 @@ export default function Component({ service }) { if (!customData) { switch (display) { + case "dynamic-list": + return ( + <Container service={service}> + <div className="flex flex-col w-full"> + <div className="bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs animate-pulse"> + <div className="font-thin pl-2">Loading...</div> + </div> + </div> + </Container> + ); case "list": return ( <Container service={service}> @@ -196,6 +208,68 @@ export default function Component({ service }) { } switch (display) { + case "dynamic-list": + let listItems = customData; + if (mappings.items) listItems = shvl.get(customData, mappings.items, null); + let error; + if (!listItems || !Array.isArray(listItems)) { + error = { message: "Unable to find items" }; + } + const name = mappings.name; + const label = mappings.label; + if (!name || !label) { + error = { message: "Name and label properties are required" }; + } + if (error) { + return <Container service={service} error={error}></Container>; + } + + const target = mappings.target; + if (mappings.limit && parseInt(mappings.limit, 10) > 0) { + listItems.splice(mappings.limit); + } + + return ( + <Container service={service}> + <div className="flex flex-col w-full"> + {listItems.length === 0 ? ( + <div className="bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs"> + <div className="font-thin pl-2">No items found</div> + </div> + ) : ( + listItems.map((item, index) => { + const itemName = shvl.get(item, name, ""); + const itemLabel = shvl.get(item, label, ""); + const itemUrl = target ? target.replace(/\{([^}]+)\}/g, (_, key) => item[key] || "") : null; + const className = + "bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs"; + + return itemUrl ? ( + <a + key={`${itemName}-${index}`} + className={classNames(className, "hover:bg-theme-300/50 dark:hover:bg-theme-800/20")} + href={itemUrl} + target="_blank" + rel="noopener noreferrer" + > + <div className="font-thin pl-2">{itemName}</div> + <div className="flex flex-row text-right"> + <div className="font-bold mr-2">{itemLabel}</div> + </div> + </a> + ) : ( + <div key={`${itemName}-${index}`} className={className}> + <div className="font-thin pl-2">{itemName}</div> + <div className="flex flex-row text-right"> + <div className="font-bold mr-2">{itemLabel}</div> + </div> + </div> + ); + }) + )} + </div> + </Container> + ); case "list": return ( <Container service={service}> From dca23e85478437775842a99a069922d15277ca4d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:47:55 -0700 Subject: [PATCH 59/93] Enhancement: support shvl syntax for customapi fields (#5020) --- docs/widgets/services/customapi.md | 28 +++++++++++++--------------- src/widgets/customapi/component.jsx | 5 +++++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/docs/widgets/services/customapi.md b/docs/widgets/services/customapi.md index 79345008..f11e21a5 100644 --- a/docs/widgets/services/customapi.md +++ b/docs/widgets/services/customapi.md @@ -22,15 +22,10 @@ widget: - field: key # needs to be YAML string or object label: Field 1 format: text # optional - defaults to text - - field: # needs to be YAML string or object - path: - to: key2 + - field: path.to.key2 format: number # optional - defaults to text label: Field 2 - - field: # needs to be YAML string or object - path: - to: - another: key3 + - field: path.to.another.key3 label: Field 3 format: percent # optional - defaults to text - field: key # needs to be YAML string or object @@ -49,9 +44,7 @@ widget: label: Field 6 format: text additionalField: # optional - field: - hourly: - time: other key + field: hourly.time.key color: theme # optional - defaults to "". Allowed values: `["theme", "adaptive", "black", "white"]`. format: date # optional - field: key @@ -103,9 +96,16 @@ mappings: label: Name - field: status # Alive label: Status - - field: - origin: name # Earth (C-137) + - field: origin.name # Earth (C-137) label: Origin + - field: locations.1.name # Citadel of Ricks + label: Location +``` + +Note that older versions of the widget accepted fields as a yaml object, which is still supported. E.g.: + +```yaml +mappings: - field: locations: 1: name # Citadel of Ricks @@ -170,9 +170,7 @@ The list view can optionally display an additional field next to the primary fie - any: true # will map all other values to: Unknown additionalField: - field: - hourly: - time: key + field: hourly.time.key color: theme format: date ``` diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index 3a6ac069..b8147caa 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -16,6 +16,11 @@ function getValue(field, data) { return value; } + // shvl is easier, everything else is kept for backwards compatibility. + if (typeof field === "string") { + return shvl.get(data, field, null); + } + while (typeof lastField === "object") { key = Object.keys(lastField)[0] ?? null; From 42f1ed3c473e0bf6400fd481d472c4aec3ad8697 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:49:35 -0700 Subject: [PATCH 60/93] Update customapi.md --- docs/widgets/services/customapi.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/widgets/services/customapi.md b/docs/widgets/services/customapi.md index f11e21a5..70947a10 100644 --- a/docs/widgets/services/customapi.md +++ b/docs/widgets/services/customapi.md @@ -19,7 +19,7 @@ widget: requestBody: # optional, can be string or object, see below display: # optional, default to block, see below mappings: - - field: key # needs to be YAML string or object + - field: key label: Field 1 format: text # optional - defaults to text - field: path.to.key2 @@ -28,13 +28,13 @@ widget: - field: path.to.another.key3 label: Field 3 format: percent # optional - defaults to text - - field: key # needs to be YAML string or object + - field: key label: Field 4 format: date # optional - defaults to text locale: nl # optional dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`. timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`. - - field: key # needs to be YAML string or object + - field: key label: Field 5 format: relativeDate # optional - defaults to text locale: nl # optional From ce0102eb6fa9cf2835f221d216ac2a919fcf3ba4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 12:25:10 -0700 Subject: [PATCH 61/93] Enhancement: support full width container (#5021) --- docs/configs/settings.md | 8 ++++++++ src/pages/index.jsx | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 93aa7f8f..d56d0f75 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -254,6 +254,14 @@ layout: columns: 4 ``` +### Full Width + +You can make homepage take up the entire window width by adding: + +```yaml +fullWidth: true +``` + ### Five Columns You can add a fifth column to services (when `style: columns` which is default) by adding: diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 5055a22b..51f5ead3 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -417,7 +417,12 @@ function Home({ initialSettings }) { <Script src="/api/config/custom.js" /> - <div className="relative container m-auto flex flex-col justify-start z-10 h-full"> + <div + className={classNames( + settings.fullWidth ? "" : "container", + "relative m-auto flex flex-col justify-start z-10 h-full", + )} + > <QuickLaunch servicesAndBookmarks={servicesAndBookmarks} searchString={searchString} From 11a6b5d0b87f24e22029272192539e23d8aea9cc Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 12:32:09 -0700 Subject: [PATCH 62/93] Enhancement: support maximum group cols up 8 (#5022) --- docs/configs/settings.md | 8 ++++---- src/components/services/group.jsx | 6 +++--- src/pages/_app.jsx | 6 ++++++ src/pages/index.jsx | 5 +++-- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index d56d0f75..bd000ccb 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -262,15 +262,15 @@ You can make homepage take up the entire window width by adding: fullWidth: true ``` -### Five Columns +### Maximum Group Columns -You can add a fifth column to services (when `style: columns` which is default) by adding: +You can set the maximum number of columns of service groups on larger screen sizes (groups with `style: columns` which is default) by adding: ```yaml -fiveColumns: true +maxGroupColumns: 8 # default is 4, max 8 ``` -By default homepage will max out at 4 columns for services with `columns` style +By default homepage will max out at 4 columns (also the minimum number). If you're setting this to 8, you may want to consider enabling the [fullWidth](#full-width) option as well. ### Collapsible sections diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 06fb83e1..3e6327a4 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -10,7 +10,7 @@ import { columnMap } from "../../utils/layout/columns"; export default function ServicesGroup({ group, layout, - fiveColumns, + maxGroupColumns, disableCollapse, useEqualHeights, groupsInitiallyCollapsed, @@ -31,7 +31,7 @@ export default function ServicesGroup({ className={classNames( "services-group flex-1", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", - layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", + layout?.style !== "row" && maxGroupColumns ? `3xl:basis-1/${maxGroupColumns}` : "", groupPadding, isSubgroup ? "subgroup" : "", )} @@ -97,7 +97,7 @@ export default function ServicesGroup({ key={subgroup.name} group={subgroup} layout={layout?.[subgroup.name]} - fiveColumns={fiveColumns} + maxGroupColumns={maxGroupColumns} disableCollapse={disableCollapse} useEqualHeights={useEqualHeights} groupsInitiallyCollapsed={groupsInitiallyCollapsed} diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 052412d9..f4345a7c 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -52,6 +52,12 @@ const tailwindSafelist = [ "dark:bg-white", "bg-orange-400", "dark:bg-orange-400", + // maxGroupColumns + "3xl:basis-1/4", + "3xl:basis-1/5", + "3xl:basis-1/6", + "3xl:basis-1/7", + "3xl:basis-1/8", // yep "h-0 h-1 h-2 h-3 h-4 h-5 h-6 h-7 h-8 h-9 h-10 h-11 h-12 h-13 h-14 h-15 h-16 h-17 h-18 h-19 h-20 h-21 h-22 h-23 h-24 h-25 h-26 h-27 h-28 h-29 h-30 h-31 h-32 h-33 h-34 h-35 h-36 h-37 h-38 h-39 h-40 h-41 h-42 h-43 h-44 h-45 h-46 h-47 h-48 h-49 h-50 h-51 h-52 h-53 h-54 h-55 h-56 h-57 h-58 h-59 h-60 h-61 h-62 h-63 h-64 h-65 h-66 h-67 h-68 h-69 h-70 h-71 h-72 h-73 h-74 h-75 h-76 h-77 h-78 h-79 h-80 h-81 h-82 h-83 h-84 h-85 h-86 h-87 h-88 h-89 h-90 h-91 h-92 h-93 h-94 h-95 h-96", "sm:h-0 sm:h-1 sm:h-2 sm:h-3 sm:h-4 sm:h-5 sm:h-6 sm:h-7 sm:h-8 sm:h-9 sm:h-10 sm:h-11 sm:h-12 sm:h-13 sm:h-14 sm:h-15 sm:h-16 sm:h-17 sm:h-18 sm:h-19 sm:h-20 sm:h-21 sm:h-22 sm:h-23 sm:h-24 sm:h-25 sm:h-26 sm:h-27 sm:h-28 sm:h-29 sm:h-30 sm:h-31 sm:h-32 sm:h-33 sm:h-34 sm:h-35 sm:h-36 sm:h-37 sm:h-38 sm:h-39 sm:h-40 sm:h-41 sm:h-42 sm:h-43 sm:h-44 sm:h-45 sm:h-46 sm:h-47 sm:h-48 sm:h-49 sm:h-50 sm:h-51 sm:h-52 sm:h-53 sm:h-54 sm:h-55 sm:h-56 sm:h-57 sm:h-58 sm:h-59 sm:h-60 sm:h-61 sm:h-62 sm:h-63 sm:h-64 sm:h-65 sm:h-66 sm:h-67 sm:h-68 sm:h-69 sm:h-70 sm:h-71 sm:h-72 sm:h-73 sm:h-74 sm:h-75 sm:h-76 sm:h-77 sm:h-78 sm:h-79 sm:h-80 sm:h-81 sm:h-82 sm:h-83 sm:h-84 sm:h-85 sm:h-86 sm:h-87 sm:h-88 sm:h-89 sm:h-90 sm:h-91 sm:h-92 sm:h-93 sm:h-94 sm:h-95 sm:h-96", diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 51f5ead3..96a9377d 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -323,7 +323,7 @@ function Home({ initialSettings }) { key={group.name} group={group} layout={settings.layout?.[group.name]} - fiveColumns={settings.fiveColumns} + maxGroupColumns={settings.fiveColumns ? 5 : settings.maxGroupColumns} disableCollapse={settings.disableCollapse} useEqualHeights={settings.useEqualHeights} groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed} @@ -347,7 +347,7 @@ function Home({ initialSettings }) { key={group.name} group={group} layout={settings.layout?.[group.name]} - fiveColumns={settings.fiveColumns} + maxGroupColumns={settings.fiveColumns ? 5 : settings.maxGroupColumns} disableCollapse={settings.disableCollapse} groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed} /> @@ -377,6 +377,7 @@ function Home({ initialSettings }) { bookmarks, settings.layout, settings.fiveColumns, + settings.maxGroupColumns, settings.disableCollapse, settings.useEqualHeights, settings.cardBlur, From 708c4e64d1a94c4e6c445e853b295aeb3fbc50c8 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 12:47:34 -0700 Subject: [PATCH 63/93] Tweak this --- docs/configs/settings.md | 2 +- src/pages/_app.jsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index bd000ccb..d3882121 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -270,7 +270,7 @@ You can set the maximum number of columns of service groups on larger screen siz maxGroupColumns: 8 # default is 4, max 8 ``` -By default homepage will max out at 4 columns (also the minimum number). If you're setting this to 8, you may want to consider enabling the [fullWidth](#full-width) option as well. +By default homepage will max out at 4 columns (thus the minimum for this setting is _5_). Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well. ### Collapsible sections diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index f4345a7c..8c5020f7 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -53,7 +53,6 @@ const tailwindSafelist = [ "bg-orange-400", "dark:bg-orange-400", // maxGroupColumns - "3xl:basis-1/4", "3xl:basis-1/5", "3xl:basis-1/6", "3xl:basis-1/7", From a3b693e2b6bfe84ca33e35d7e77a13fd678a7c2d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 13:03:04 -0700 Subject: [PATCH 64/93] Support maxBookmarkGroupColumns too --- docs/configs/settings.md | 12 +++++++++--- src/components/bookmarks/group.jsx | 4 ++++ src/pages/index.jsx | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index d3882121..9d35ae07 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -264,13 +264,19 @@ fullWidth: true ### Maximum Group Columns -You can set the maximum number of columns of service groups on larger screen sizes (groups with `style: columns` which is default) by adding: +You can set the maximum number of columns of groups on larger screen sizes (note this is only for groups with the default `style: columns`, not groups with `stle: row`) by adding: ```yaml -maxGroupColumns: 8 # default is 4, max 8 +maxGroupColumns: 8 # default is 4 for services, 6 for bookmarks, max 8 ``` -By default homepage will max out at 4 columns (thus the minimum for this setting is _5_). Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well. +By default homepage will max out at 4 columns for services and 6 for bookmarks, thus the minimum for this setting is _5_. Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well. + +If you want to set the maximum columns for bookmark groups separately, you can do so by adding: + +```yaml +maxBookmarkGroupColumns: 6 # default is 6, max 8 +``` ### Collapsible sections diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx index d8eb296d..726f54e8 100644 --- a/src/components/bookmarks/group.jsx +++ b/src/components/bookmarks/group.jsx @@ -12,6 +12,7 @@ export default function BookmarksGroup({ disableCollapse, groupsInitiallyCollapsed, bookmarksStyle, + maxGroupColumns, }) { const panel = useRef(); @@ -25,6 +26,9 @@ export default function BookmarksGroup({ className={classNames( "bookmark-group flex-1 overflow-hidden", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6", + layout?.style !== "row" && maxGroupColumns && parseInt(maxGroupColumns, 10) > 6 + ? `3xl:basis-1/${maxGroupColumns}` + : "", layout?.header === false ? "px-1" : "p-1 pb-0", )} > diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 96a9377d..78702796 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -334,6 +334,7 @@ function Home({ initialSettings }) { bookmarks={group} layout={settings.layout?.[group.name]} disableCollapse={settings.disableCollapse} + maxGroupColumns={settings.maxBookmarkGroupColumns ?? settings.maxGroupColumns} groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed} /> ), @@ -362,6 +363,7 @@ function Home({ initialSettings }) { bookmarks={group} layout={settings.layout?.[group.name]} disableCollapse={settings.disableCollapse} + maxGroupColumns={settings.maxBookmarkGroupColumns ?? settings.maxGroupColumns} groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed} bookmarksStyle={settings.bookmarksStyle} /> @@ -378,6 +380,7 @@ function Home({ initialSettings }) { settings.layout, settings.fiveColumns, settings.maxGroupColumns, + settings.maxBookmarkGroupColumns, settings.disableCollapse, settings.useEqualHeights, settings.cardBlur, From fa28a116583b97a51f750ddec9c29cf2555432c7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 17 Mar 2025 23:30:07 -0700 Subject: [PATCH 65/93] Fix: include new backdrop-blur-xs option (#5030) --- docs/configs/settings.md | 2 +- src/pages/_app.jsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 9d35ae07..c1605f4d 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -78,7 +78,7 @@ background: You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters. ```yaml -cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur +cardBlur: xs # xs, md, etc... see https://tailwindcss.com/docs/backdrop-blur ``` ## Favicon diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index 8c5020f7..c5465a80 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -16,6 +16,7 @@ import nextI18nextConfig from "../../next-i18next.config"; const tailwindSafelist = [ // TODO: remove pending https://github.com/tailwindlabs/tailwindcss/pull/17147 "backdrop-blur", + "backdrop-blur-xs", "backdrop-blur-sm", "backdrop-blur-md", "backdrop-blur-xl", From aed602ad70cabf5ad259cb9ac5bbbbd0e8801d53 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 18 Mar 2025 19:29:43 -0700 Subject: [PATCH 66/93] Tweak: try to reduce rootless startup time (#5037) --- docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index c2858808..9890fbee 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -15,7 +15,7 @@ export HOMEPAGE_BUILDTIME=$(date +%s) # Set privileges for /app but only if pid 1 user is root and we are dropping privileges. # If container is run as an unprivileged user, it means owner already handled ownership setup on their own. # Running chown in that case (as non-root) will cause error -[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app +[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app/config /app/public # Drop privileges (when asked to) if root, otherwise run as current user if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then From 7fd5e6ccb16da4a727b5cb2d7ac1f49f87cc95f4 Mon Sep 17 00:00:00 2001 From: IhatemyISP <1625407+ihatemyisp@users.noreply.github.com> Date: Wed, 19 Mar 2025 19:26:49 -0400 Subject: [PATCH 67/93] Tweak: change moonraker widget standby output (#4060) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/widgets/moonraker/component.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx index f70a1c5b..ed99e418 100644 --- a/src/widgets/moonraker/component.jsx +++ b/src/widgets/moonraker/component.jsx @@ -36,14 +36,16 @@ export default function Component({ service }) { const printStatsInfo = printStats.result.status.print_stats.info ?? {}; const { current_layer: currentLayer = "-", total_layer: totalLayer = "-" } = printStatsInfo; + const layers = printStats.result.status.print_stats.state === "standby" ? "- / -" : `${currentLayer} / ${totalLayer}`; + const progress = + printStats.result.status.print_stats.state === "standby" + ? "-" + : t("common.percent", { value: displayStatus.result.status.display_status.progress * 100 }); return ( <Container service={service}> - <Block label="moonraker.layers" value={`${currentLayer} / ${totalLayer}`} /> - <Block - label="moonraker.print_progress" - value={t("common.percent", { value: displayStatus.result.status.display_status.progress * 100 })} - /> + <Block label="moonraker.layers" value={layers} /> + <Block label="moonraker.print_progress" value={progress} /> <Block label="moonraker.print_status" value={printStats.result.status.print_stats.state} /> </Container> ); From d853bbfe44a63d2d0e123a6ee41b769f5f9571ec Mon Sep 17 00:00:00 2001 From: Chris <67816022+vhsdream@users.noreply.github.com> Date: Fri, 21 Mar 2025 00:46:54 -0400 Subject: [PATCH 68/93] Feature: Slskd Service Widget (#5045) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/index.md | 1 + docs/widgets/services/slskd.md | 25 +++++++++++++++ public/locales/en/common.json | 11 +++++++ src/widgets/components.js | 1 + src/widgets/slskd/component.jsx | 55 +++++++++++++++++++++++++++++++++ src/widgets/slskd/widget.js | 21 +++++++++++++ src/widgets/widgets.js | 2 ++ 7 files changed, 116 insertions(+) create mode 100644 docs/widgets/services/slskd.md create mode 100644 src/widgets/slskd/component.jsx create mode 100644 src/widgets/slskd/widget.js diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index 15caadc2..beb6d491 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -117,6 +117,7 @@ You can also find a list of all available service widgets in the sidebar navigat - [ruTorrent](rutorrent.md) - [SABnzbd](sabnzbd.md) - [Scrutiny](scrutiny.md) +- [Slskd](slskd.md) - [Sonarr](sonarr.md) - [Speedtest Tracker](speedtest-tracker.md) - [Stash](stash.md) diff --git a/docs/widgets/services/slskd.md b/docs/widgets/services/slskd.md new file mode 100644 index 00000000..7afb0760 --- /dev/null +++ b/docs/widgets/services/slskd.md @@ -0,0 +1,25 @@ +--- +title: Slskd +description: Slskd Widget Configuration +--- + +Learn more about [Slskd](https://github.com/slskd/slskd). + +Generate an API key for slskd with `openssl rand -base64 48`. +Add it to your `path/to/config/slskd.yml` in `web > authentication > api_keys`: + +```yaml +homepage_widget: + key: <generated key> + role: readonly + cidr: <homepage subnet> +``` + +Allowed fields: `["slskStatus", "updateStatus", "downloads", "uploads", "sharedFiles"]` (maximum of 4). + +```yaml +widget: + type: slskd + url: http[s]://slskd.host.or.ip[:5030] + key: generatedapikey +``` diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 2bc4cf9c..0535cd6e 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1030,5 +1030,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 6c12d823..148a626b 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -113,6 +113,7 @@ const components = { rutorrent: dynamic(() => import("./rutorrent/component")), sabnzbd: dynamic(() => import("./sabnzbd/component")), scrutiny: dynamic(() => import("./scrutiny/component")), + slskd: dynamic(() => import("./slskd/component")), sonarr: dynamic(() => import("./sonarr/component")), speedtest: dynamic(() => import("./speedtest/component")), spoolman: dynamic(() => import("./spoolman/component")), diff --git a/src/widgets/slskd/component.jsx b/src/widgets/slskd/component.jsx new file mode 100644 index 00000000..8c26d4e4 --- /dev/null +++ b/src/widgets/slskd/component.jsx @@ -0,0 +1,55 @@ +import { useTranslation } from "next-i18next"; +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +const slskdDefaultFields = ["slskStatus", "downloads", "uploads", "sharedFiles"]; +const MAX_ALLOWED_FIELDS = 4; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + + const { data: appData, error: appError } = useWidgetAPI(widget, "application"); + const { data: downData, error: downError } = useWidgetAPI(widget, "downloads"); + const { data: upData, error: upError } = useWidgetAPI(widget, "uploads"); + + if (appError || downError || upError) { + return <Container service={service} error={appError ?? downError ?? upError} />; + } + + if (!widget.fields || widget.fields.length === 0) { + widget.fields = slskdDefaultFields; + } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!appData || !downData || !upData) { + return ( + <Container service={service}> + <Block label="slskd.slskStatus" /> + <Block label="slskd.updateStatus" /> + <Block label="slskd.downloads" /> + <Block label="slskd.uploads" /> + <Block label="slskd.sharedFiles" /> + </Container> + ); + } + + return ( + <Container service={service}> + <Block + label="slskd.slskStatus" + value={appData.server?.isConnected ? t("slskd.connected") : t("slskd.disconnected")} + /> + <Block + label="slskd.updateStatus" + value={appData.version?.isUpdateAvailable ? t("slskd.update_yes") : t("slskd.update_no")} + /> + <Block label="slskd.downloads" value={t("common.number", { value: downData.length ?? 0 })} /> + <Block label="slskd.uploads" value={t("common.number", { value: upData.length ?? 0 })} /> + <Block label="slskd.sharedFiles" value={t("common.number", { value: appData.shares?.files ?? 0 })} /> + </Container> + ); +} diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js new file mode 100644 index 00000000..fdea7738 --- /dev/null +++ b/src/widgets/slskd/widget.js @@ -0,0 +1,21 @@ +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; +import { asJson } from "utils/proxy/api-helpers"; + +const widget = { + api: `{url}/api/v0/{endpoint}`, + proxyHandler: credentialedProxyHandler, + + mappings: { + application: { + endpoint: "application", + }, + downloads: { + endpoint: "transfers/downloads", + }, + uploads: { + endpoint: "transfers/uploads", + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 1537301c..21cff92b 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -104,6 +104,7 @@ import readarr from "./readarr/widget"; import rutorrent from "./rutorrent/widget"; import sabnzbd from "./sabnzbd/widget"; import scrutiny from "./scrutiny/widget"; +import slskd from "./slskd/widget"; import sonarr from "./sonarr/widget"; import speedtest from "./speedtest/widget"; import spoolman from "./spoolman/widget"; @@ -244,6 +245,7 @@ const widgets = { rutorrent, sabnzbd, scrutiny, + slskd, sonarr, speedtest, spoolman, From a4b07b91fedc85cad69df74d11a7001adb92328c Mon Sep 17 00:00:00 2001 From: chiragkrishna <chiragkrishna@gmail.com> Date: Sat, 22 Mar 2025 20:15:27 +0530 Subject: [PATCH 69/93] Enhancement: Add Repositories field to Gitea (#5053) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/widgets/services/gitea.md | 2 +- public/locales/en/common.json | 7 ++++--- src/widgets/gitea/component.jsx | 11 ++++++++--- src/widgets/gitea/widget.js | 3 +++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/widgets/services/gitea.md b/docs/widgets/services/gitea.md index 140c4ee7..eb47849d 100644 --- a/docs/widgets/services/gitea.md +++ b/docs/widgets/services/gitea.md @@ -7,7 +7,7 @@ Learn more about [Gitea](https://gitea.com). API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens. -Allowed fields: `["notifications", "issues", "pulls"]`. +Allowed fields: `["repositories", "notifications", "issues", "pulls"]`. ```yaml widget: diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 0535cd6e..4a9c33d5 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -883,9 +883,10 @@ "species": "Species" }, "gitea": { - "notifications": "Notifications", - "issues": "Issues", - "pulls": "Pull Requests" + "notifications": "Notifications", + "issues": "Issues", + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx index 74e6dc82..c45ded06 100644 --- a/src/widgets/gitea/component.jsx +++ b/src/widgets/gitea/component.jsx @@ -8,17 +8,21 @@ export default function Component({ service }) { const { data: giteaNotifications, error: giteaNotificationsError } = useWidgetAPI(widget, "notifications"); const { data: giteaIssues, error: giteaIssuesError } = useWidgetAPI(widget, "issues"); + const { data: giteaRepositories, error: giteaRepositoriesError } = useWidgetAPI(widget, "repositories"); - if (giteaNotificationsError || giteaIssuesError) { - return <Container service={service} error={giteaNotificationsError ?? giteaIssuesError} />; + if (giteaNotificationsError || giteaIssuesError || giteaRepositoriesError) { + return ( + <Container service={service} error={giteaNotificationsError ?? giteaIssuesError ?? giteaRepositoriesError} /> + ); } - if (!giteaNotifications || !giteaIssues) { + if (!giteaNotifications || !giteaIssues || !giteaRepositories) { return ( <Container service={service}> <Block label="gitea.notifications" /> <Block label="gitea.issues" /> <Block label="gitea.pulls" /> + <Block label="gitea.repositories" /> </Container> ); } @@ -28,6 +32,7 @@ export default function Component({ service }) { <Block label="gitea.notifications" value={giteaNotifications.length} /> <Block label="gitea.issues" value={giteaIssues.issues.length} /> <Block label="gitea.pulls" value={giteaIssues.pulls.length} /> + <Block label="gitea.repositories" value={giteaRepositories.data.length} /> </Container> ); } diff --git a/src/widgets/gitea/widget.js b/src/widgets/gitea/widget.js index 32871b00..b0420ccc 100644 --- a/src/widgets/gitea/widget.js +++ b/src/widgets/gitea/widget.js @@ -16,6 +16,9 @@ const widget = { issues: asJson(data).filter((issue) => !issue.pull_request), }), }, + repositories: { + endpoint: "repos/search", + }, }, }; From 5d557844cc8a738f0cfe4a84c02fea2804862ff9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 07:49:16 -0700 Subject: [PATCH 70/93] Chore(deps): Bump next from 15.1.7 to 15.2.3 (#5055) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 113 ++++++++++++++++++++++++++----------------------- 2 files changed, 61 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 2b8bd695..83e80a38 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "luxon": "^3.5.0", "memory-cache": "^0.2.0", "minecraftstatuspinger": "^1.2.2", - "next": "^15.1.7", + "next": "^15.2.3", "next-i18next": "^12.1.0", "ping": "^0.4.4", "pretty-bytes": "^6.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b5c5910..2848e239 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,11 +51,11 @@ importers: specifier: ^1.2.2 version: 1.2.2 next: - specifier: ^15.1.7 - version: 15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.2.3 + version: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-i18next: specifier: ^12.1.0 - version: 12.1.0(next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ping: specifier: ^0.4.4 version: 0.4.4 @@ -101,6 +101,10 @@ importers: xml-js: specifier: ^1.6.11 version: 1.6.11 + optionalDependencies: + osx-temperature-sensor: + specifier: ^1.0.8 + version: 1.0.8 devDependencies: '@tailwindcss/forms': specifier: ^0.5.10 @@ -147,10 +151,6 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 - optionalDependencies: - osx-temperature-sensor: - specifier: ^1.0.8 - version: 1.0.8 packages: @@ -376,56 +376,56 @@ packages: '@kubernetes/client-node@1.0.0': resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} - '@next/env@15.1.7': - resolution: {integrity: sha512-d9jnRrkuOH7Mhi+LHav2XW91HOgTAWHxjMPkXMGBc9B2b7614P7kjt8tAplRvJpbSt4nbO1lugcT/kAaWzjlLQ==} + '@next/env@15.2.3': + resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} '@next/eslint-plugin-next@15.1.7': resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} - '@next/swc-darwin-arm64@15.1.7': - resolution: {integrity: sha512-hPFwzPJDpA8FGj7IKV3Yf1web3oz2YsR8du4amKw8d+jAOHfYHYFpMkoF6vgSY4W6vB29RtZEklK9ayinGiCmQ==} + '@next/swc-darwin-arm64@15.2.3': + resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.7': - resolution: {integrity: sha512-2qoas+fO3OQKkU0PBUfwTiw/EYpN+kdAx62cePRyY1LqKtP09Vp5UcUntfZYajop5fDFTjSxCHfZVRxzi+9FYQ==} + '@next/swc-darwin-x64@15.2.3': + resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.7': - resolution: {integrity: sha512-sKLLwDX709mPdzxMnRIXLIT9zaX2w0GUlkLYQnKGoXeWUhcvpCrK+yevcwCJPdTdxZEUA0mOXGLdPsGkudGdnA==} + '@next/swc-linux-arm64-gnu@15.2.3': + resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.7': - resolution: {integrity: sha512-zblK1OQbQWdC8fxdX4fpsHDw+VSpBPGEUX4PhSE9hkaWPrWoeIJn+baX53vbsbDRaDKd7bBNcXRovY1hEhFd7w==} + '@next/swc-linux-arm64-musl@15.2.3': + resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.7': - resolution: {integrity: sha512-GOzXutxuLvLHFDAPsMP2zDBMl1vfUHHpdNpFGhxu90jEzH6nNIgmtw/s1MDwpTOiM+MT5V8+I1hmVFeAUhkbgQ==} + '@next/swc-linux-x64-gnu@15.2.3': + resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.7': - resolution: {integrity: sha512-WrZ7jBhR7ATW1z5iEQ0ZJfE2twCNSXbpCSaAunF3BKcVeHFADSI/AW1y5Xt3DzTqPF1FzQlwQTewqetAABhZRQ==} + '@next/swc-linux-x64-musl@15.2.3': + resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.7': - resolution: {integrity: sha512-LDnj1f3OVbou1BqvvXVqouJZKcwq++mV2F+oFHptToZtScIEnhNRJAhJzqAtTE2dB31qDYL45xJwrc+bLeKM2Q==} + '@next/swc-win32-arm64-msvc@15.2.3': + resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.7': - resolution: {integrity: sha512-dC01f1quuf97viOfW05/K8XYv2iuBgAxJZl7mbCKEjMgdQl5JjAKJ0D2qMKZCgPWDeFbFT0Q0nYWwytEW0DWTQ==} + '@next/swc-win32-x64-msvc@15.2.3': + resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -882,8 +882,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001700: - resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + caniuse-lite@1.0.30001706: + resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1955,6 +1955,11 @@ packages: nan@2.22.0: resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1970,8 +1975,8 @@ packages: next: '>= 10.0.0' react: '>= 16.8.0' - next@15.1.7: - resolution: {integrity: sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg==} + next@15.2.3: + resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2977,34 +2982,34 @@ snapshots: - encoding - utf-8-validate - '@next/env@15.1.7': {} + '@next/env@15.2.3': {} '@next/eslint-plugin-next@15.1.7': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.1.7': + '@next/swc-darwin-arm64@15.2.3': optional: true - '@next/swc-darwin-x64@15.1.7': + '@next/swc-darwin-x64@15.2.3': optional: true - '@next/swc-linux-arm64-gnu@15.1.7': + '@next/swc-linux-arm64-gnu@15.2.3': optional: true - '@next/swc-linux-arm64-musl@15.1.7': + '@next/swc-linux-arm64-musl@15.2.3': optional: true - '@next/swc-linux-x64-gnu@15.1.7': + '@next/swc-linux-x64-gnu@15.2.3': optional: true - '@next/swc-linux-x64-musl@15.1.7': + '@next/swc-linux-x64-musl@15.2.3': optional: true - '@next/swc-win32-arm64-msvc@15.1.7': + '@next/swc-win32-arm64-msvc@15.2.3': optional: true - '@next/swc-win32-x64-msvc@15.1.7': + '@next/swc-win32-x64-msvc@15.2.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3486,7 +3491,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001700: {} + caniuse-lite@1.0.30001706: {} chalk@4.1.2: dependencies: @@ -4684,11 +4689,13 @@ snapshots: nan@2.22.0: optional: true + nanoid@3.3.11: {} + nanoid@3.3.8: {} natural-compare@1.4.0: {} - next-i18next@12.1.0(next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.9 '@types/hoist-non-react-statics': 3.3.6 @@ -4696,33 +4703,33 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - react-dom - react-native - next@15.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.1.7 + '@next/env': 15.2.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001700 + caniuse-lite: 1.0.30001706 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.7 - '@next/swc-darwin-x64': 15.1.7 - '@next/swc-linux-arm64-gnu': 15.1.7 - '@next/swc-linux-arm64-musl': 15.1.7 - '@next/swc-linux-x64-gnu': 15.1.7 - '@next/swc-linux-x64-musl': 15.1.7 - '@next/swc-win32-arm64-msvc': 15.1.7 - '@next/swc-win32-x64-msvc': 15.1.7 + '@next/swc-darwin-arm64': 15.2.3 + '@next/swc-darwin-x64': 15.2.3 + '@next/swc-linux-arm64-gnu': 15.2.3 + '@next/swc-linux-arm64-musl': 15.2.3 + '@next/swc-linux-x64-gnu': 15.2.3 + '@next/swc-linux-x64-musl': 15.2.3 + '@next/swc-win32-arm64-msvc': 15.2.3 + '@next/swc-win32-x64-msvc': 15.2.3 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -4860,7 +4867,7 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 From 1f8fd1c69db299ad93a38270b7e107f5fc84174e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 23 Mar 2025 07:11:20 -0700 Subject: [PATCH 71/93] Add install pnpm to source instructions --- docs/installation/source.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/installation/source.md b/docs/installation/source.md index 6697eb92..fd0275a7 100644 --- a/docs/installation/source.md +++ b/docs/installation/source.md @@ -9,7 +9,13 @@ First, clone the repository: git clone https://github.com/gethomepage/homepage.git ``` -Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like): +If `pnpm` is not installed, install it: + +```bash +npm install -g pnpm +``` + +Then install dependencies and build the production bundle: ```bash pnpm install From 77bbdc6a0475bd788ec729717e88eb42d2c183d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:21:33 -0700 Subject: [PATCH 72/93] New Crowdin translations by GitHub Action (#5010) Co-authored-by: Crowdin Bot <support+bot@crowdin.com> --- public/locales/af/common.json | 24 +++-- public/locales/ar/common.json | 14 ++- public/locales/bg/common.json | 14 ++- public/locales/ca/common.json | 14 ++- public/locales/cs/common.json | 14 ++- public/locales/da/common.json | 14 ++- public/locales/de/common.json | 24 +++-- public/locales/el/common.json | 14 ++- public/locales/eo/common.json | 14 ++- public/locales/es/common.json | 14 ++- public/locales/eu/common.json | 14 ++- public/locales/fi/common.json | 14 ++- public/locales/fr/common.json | 28 ++++-- public/locales/he/common.json | 14 ++- public/locales/hi/common.json | 14 ++- public/locales/hr/common.json | 14 ++- public/locales/hu/common.json | 14 ++- public/locales/id/common.json | 32 ++++--- public/locales/it/common.json | 14 ++- public/locales/ja/common.json | 14 ++- public/locales/ko/common.json | 14 ++- public/locales/lv/common.json | 14 ++- public/locales/ms/common.json | 14 ++- public/locales/nl/common.json | 14 ++- public/locales/no/common.json | 14 ++- public/locales/pl/common.json | 14 ++- public/locales/pt/common.json | 14 ++- public/locales/pt_BR/common.json | 138 ++++++++++++++++------------- public/locales/ro/common.json | 14 ++- public/locales/ru/common.json | 50 +++++++---- public/locales/sk/common.json | 14 ++- public/locales/sl/common.json | 14 ++- public/locales/sr/common.json | 14 ++- public/locales/sv/common.json | 14 ++- public/locales/te/common.json | 14 ++- public/locales/th/common.json | 14 ++- public/locales/tr/common.json | 14 ++- public/locales/uk/common.json | 14 ++- public/locales/vi/common.json | 14 ++- public/locales/yue/common.json | 14 ++- public/locales/zh-Hans/common.json | 14 ++- public/locales/zh-Hant/common.json | 14 ++- 42 files changed, 652 insertions(+), 148 deletions(-) diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 20f3d170..bf1e5f9c 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Kennisgewings", "issues": "Kwessies", - "pulls": "Trek Versoeke" + "pulls": "Trek Versoeke", + "repositories": "Bewaarplekke" }, "stash": { "scenes": "Tonele", @@ -1024,11 +1025,22 @@ "timeleft": "Oorblywende Tyd" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "bookmarks": "Boekmerke", + "favorites": "Gunstelinge", + "archived": "Geargiveer", + "highlights": "Hoogtepunte", + "lists": "Lyste", "tags": "Merkers" + }, + "slskd": { + "slskStatus": "Netwerk", + "connected": "Gekoppel", + "disconnected": "Ontkoppel", + "updateStatus": "Opdateer", + "update_yes": "Beskikbaar", + "update_no": "Op Datum", + "downloads": "Aflaaie", + "uploads": "Oplaaie", + "sharedFiles": "Lêers" } } diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 7c7344f8..baa4d593 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "الإشعارات", "issues": "المُشكِلات", - "pulls": "طلبات السحب" + "pulls": "طلبات السحب", + "repositories": "Repositories" }, "stash": { "scenes": "المشاهد", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "التصنيفات" + }, + "slskd": { + "slskStatus": "الشبكة", + "connected": "متصل", + "disconnected": "غير متصل", + "updateStatus": "Update", + "update_yes": "متاح", + "update_no": "حتى الآن", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "ملفات" } } diff --git a/public/locales/bg/common.json b/public/locales/bg/common.json index 74505cc6..3c721bce 100644 --- a/public/locales/bg/common.json +++ b/public/locales/bg/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Известия", "issues": "Издания", - "pulls": "Заявки за сливане" + "pulls": "Заявки за сливане", + "repositories": "Repositories" }, "stash": { "scenes": "Сцени", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Тагове" + }, + "slskd": { + "slskStatus": "Мрежа", + "connected": "Свързан", + "disconnected": "Не е свързан", + "updateStatus": "Update", + "update_yes": "Наличен", + "update_no": "Актуално", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Файлове" } } diff --git a/public/locales/ca/common.json b/public/locales/ca/common.json index 620a0df5..07b1f611 100644 --- a/public/locales/ca/common.json +++ b/public/locales/ca/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notificacions", "issues": "Problemes", - "pulls": "Sol·licitud de Canvis" + "pulls": "Sol·licitud de Canvis", + "repositories": "Repositories" }, "stash": { "scenes": "Escenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Etiquetes" + }, + "slskd": { + "slskStatus": "Xarxa", + "connected": "Connectat", + "disconnected": "Desconnectat", + "updateStatus": "Update", + "update_yes": "Disponible", + "update_no": "Actualitzat", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Fitxers" } } diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 31c7921a..e9a8061d 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Problémy", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "", + "disconnected": "Odpojeno", + "updateStatus": "Update", + "update_yes": "Dostupné", + "update_no": "Žádné", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Soubory" } } diff --git a/public/locales/da/common.json b/public/locales/da/common.json index 8a354b91..901d0ce4 100644 --- a/public/locales/da/common.json +++ b/public/locales/da/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Problemer", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Tilgængelig", + "update_no": "Opdateret", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Filer" } } diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 69c0fe7c..94fb91aa 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -447,7 +447,7 @@ "write": "Schreiben", "gpu": "GPU", "mem": "RAM", - "swap": "Swap" + "swap": "Auslagerung" }, "quicklaunch": { "bookmark": "Lesezeichen", @@ -885,7 +885,8 @@ "gitea": { "notifications": "Benachrichtigungen", "issues": "Probleme", - "pulls": "Pull-Requests" + "pulls": "Pull-Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Szenen", @@ -1024,11 +1025,22 @@ "timeleft": "Verbleibende Zeit" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", + "bookmarks": "Lesezeichen", + "favorites": "Favoriten", + "archived": "Archiviert", "highlights": "Highlights", - "lists": "Lists", + "lists": "Listen", "tags": "Schlagwörter" + }, + "slskd": { + "slskStatus": "Netzwerk", + "connected": "Verbunden", + "disconnected": "Getrennt", + "updateStatus": "Update", + "update_yes": "Verfügbar", + "update_no": "Aktuell", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Dateien" } } diff --git a/public/locales/el/common.json b/public/locales/el/common.json index c582f49f..b1cbe307 100644 --- a/public/locales/el/common.json +++ b/public/locales/el/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Ετικέτες" + }, + "slskd": { + "slskStatus": "Δίκτυο", + "connected": "Συνδέθηκε", + "disconnected": "Αποσυνδέθηκε", + "updateStatus": "Update", + "update_yes": "Διαθέσιμο", + "update_no": "Ενημερωμένο", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Αρχεία" } } diff --git a/public/locales/eo/common.json b/public/locales/eo/common.json index 8a7bb831..908bd124 100644 --- a/public/locales/eo/common.json +++ b/public/locales/eo/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Havebla", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 9d23e343..a5ac67ed 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notificaciones", "issues": "Números", - "pulls": "Solicitudes de cambios" + "pulls": "Solicitudes de cambios", + "repositories": "Repositories" }, "stash": { "scenes": "Escenas", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Etiquetas" + }, + "slskd": { + "slskStatus": "Red", + "connected": "Conectado", + "disconnected": "Desconectado", + "updateStatus": "Update", + "update_yes": "Disponible", + "update_no": "Actualizado", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Archivos" } } diff --git a/public/locales/eu/common.json b/public/locales/eu/common.json index f935b928..f0654ebb 100644 --- a/public/locales/eu/common.json +++ b/public/locales/eu/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Jakinarazpenak", "issues": "Arazoak", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Zerrendak", "tags": "Etiketak" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Konektatuta", + "disconnected": "Deskonektatuta", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/fi/common.json b/public/locales/fi/common.json index 782bc2c4..b1ff23b4 100644 --- a/public/locales/fi/common.json +++ b/public/locales/fi/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Saatavilla", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 191706b2..f0cd54f6 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -149,8 +149,8 @@ "received": "Reçu", "sent": "Envoyé", "externalIPAddress": "IP externe", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "IPv6 externe", + "externalIPv6Prefix": "Préfixe IPv6 externe" }, "caddy": { "upstreams": "En amont", @@ -178,7 +178,7 @@ "connectedAp": "AP connectés", "activeUser": "Périphériques actifs", "alerts": "Alertes", - "connectedGateways": "Connected gateways", + "connectedGateways": "Passerelles connectées", "connectedSwitches": "Switchs connectés" }, "nzbget": { @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Anomalies", - "pulls": "Demandes de tirage" + "pulls": "Demandes de tirage", + "repositories": "Repositories" }, "stash": { "scenes": "Scènes", @@ -1024,11 +1025,22 @@ "timeleft": "Temps restant" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", + "bookmarks": "Marque-pages", + "favorites": "Favoris", + "archived": "Archivé", "highlights": "Highlights", - "lists": "Lists", + "lists": "Listes", "tags": "Étiquettes" + }, + "slskd": { + "slskStatus": "Réseau", + "connected": "Connecté", + "disconnected": "Déconnecté", + "updateStatus": "Mise à jour", + "update_yes": "Disponible", + "update_no": "À jour", + "downloads": "Téléchargements", + "uploads": "Téléversements", + "sharedFiles": "Fichiers" } } diff --git a/public/locales/he/common.json b/public/locales/he/common.json index 57ce66b9..2751430c 100644 --- a/public/locales/he/common.json +++ b/public/locales/he/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "זמין", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 0744578a..19f419cd 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/hr/common.json b/public/locales/hr/common.json index 31f92935..2b1c013c 100644 --- a/public/locales/hr/common.json +++ b/public/locales/hr/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Obavijesti", "issues": "Problemi", - "pulls": "Zahtjevi za povlačenje" + "pulls": "Zahtjevi za povlačenje", + "repositories": "Repositories" }, "stash": { "scenes": "Scene", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Oznake" + }, + "slskd": { + "slskStatus": "Mreža", + "connected": "Povezano", + "disconnected": "Odspojeno", + "updateStatus": "Update", + "update_yes": "Dostupno", + "update_no": "Aktualno", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Datoteke" } } diff --git a/public/locales/hu/common.json b/public/locales/hu/common.json index e21689aa..f6b5e183 100644 --- a/public/locales/hu/common.json +++ b/public/locales/hu/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Üzenetek", "issues": "Problémák", - "pulls": "Pull request-ek" + "pulls": "Pull request-ek", + "repositories": "Repositories" }, "stash": { "scenes": "Jelenetek", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Címkék" + }, + "slskd": { + "slskStatus": "Hálózat", + "connected": "Csatlakozva", + "disconnected": "Kapcsolat bontva", + "updateStatus": "Update", + "update_yes": "Elérhető", + "update_no": "Naprakész", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Fájlok" } } diff --git a/public/locales/id/common.json b/public/locales/id/common.json index 7d049bec..fa4d6459 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -342,7 +342,7 @@ "totalNxDomain": "Domain NX", "totalRefused": "Ditolak", "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", + "totalRecursive": "Rekursif", "totalCached": "Cached", "totalBlocked": "Terblokir", "totalDropped": "Dropped", @@ -705,8 +705,8 @@ "time": "Waktu" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Kekayaan Bersih", + "budget": "Anggaran" }, "grafana": { "dashboards": "Dasbor", @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifikasi", "issues": "Isu", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Adegan", @@ -965,7 +966,7 @@ "lubelogger": { "vehicle": "Kendaraan", "vehicles": "Kendaraan", - "serviceRecords": "Service Records", + "serviceRecords": "Catatan Servis", "reminders": "Pengingat", "nextReminder": "Pengingat Berikutnya", "none": "Tidak ada" @@ -1024,11 +1025,22 @@ "timeleft": "Sisa Waktu" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "bookmarks": "Markah", + "favorites": "Favorit", + "archived": "Diarsipkan", + "highlights": "Sorotan", + "lists": "Daftar", "tags": "Tag" + }, + "slskd": { + "slskStatus": "Jaringan", + "connected": "Tersambung", + "disconnected": "Terputus", + "updateStatus": "Update", + "update_yes": "Tersedia", + "update_no": "Terbaru", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "File" } } diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 3d0dc450..4b0672f9 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifiche", "issues": "Problemi", - "pulls": "Richieste di Pull" + "pulls": "Richieste di Pull", + "repositories": "Repositories" }, "stash": { "scenes": "Scene", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tag" + }, + "slskd": { + "slskStatus": "Rete", + "connected": "Connesso", + "disconnected": "Disconnesso", + "updateStatus": "Update", + "update_yes": "Disponibili", + "update_no": "Aggiornato", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "File" } } diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index 020d7d3b..58869e84 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "通知", "issues": "課題", - "pulls": "プルリクエスト" + "pulls": "プルリクエスト", + "repositories": "Repositories" }, "stash": { "scenes": "シーン", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "タグ" + }, + "slskd": { + "slskStatus": "ネットワーク", + "connected": "接続済", + "disconnected": "切断されました", + "updateStatus": "Update", + "update_yes": "利用可", + "update_no": "最新", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "ファイル" } } diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 00ff2ea1..5f5523ff 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "알림", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "장면", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "태그" + }, + "slskd": { + "slskStatus": "네트워크", + "connected": "연결됨", + "disconnected": "연결 끊김", + "updateStatus": "Update", + "update_yes": "이용 가능", + "update_no": "최신 상태", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "파일" } } diff --git a/public/locales/lv/common.json b/public/locales/lv/common.json index 538febf1..85d9a359 100644 --- a/public/locales/lv/common.json +++ b/public/locales/lv/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/ms/common.json b/public/locales/ms/common.json index ba32381f..4ebfd6d8 100644 --- a/public/locales/ms/common.json +++ b/public/locales/ms/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Adegan", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tanda nama" + }, + "slskd": { + "slskStatus": "Rangkaian", + "connected": "Connected", + "disconnected": "Sambungan Terputus", + "updateStatus": "Update", + "update_yes": "Sudah Ada", + "update_no": "Terkemaskini", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/nl/common.json b/public/locales/nl/common.json index dfa15f10..e26ad05e 100644 --- a/public/locales/nl/common.json +++ b/public/locales/nl/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notificaties", "issues": "Problemen", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scènes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Label" + }, + "slskd": { + "slskStatus": "Netwerk", + "connected": "Verbonden", + "disconnected": "Verbinding verbroken", + "updateStatus": "Update", + "update_yes": "Beschikbaar", + "update_no": "Bijgewerkt", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Bestanden" } } diff --git a/public/locales/no/common.json b/public/locales/no/common.json index b179110b..67710fe1 100644 --- a/public/locales/no/common.json +++ b/public/locales/no/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Varslinger", "issues": "Issues", - "pulls": "Forespørsel" + "pulls": "Forespørsel", + "repositories": "Repositories" }, "stash": { "scenes": "Scener", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Stikkord" + }, + "slskd": { + "slskStatus": "Nettverk", + "connected": "Tilkoblet", + "disconnected": "Frakoblet", + "updateStatus": "Update", + "update_yes": "Tilgjengelig", + "update_no": "Oppdatert", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index 9d669f8a..1316d5c9 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Powiadomienia", "issues": "Zgłoszenia", - "pulls": "Żądania Pull" + "pulls": "Żądania Pull", + "repositories": "Repositories" }, "stash": { "scenes": "Sceny", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tagi" + }, + "slskd": { + "slskStatus": "Sieć", + "connected": "Połączono", + "disconnected": "Rozłączono", + "updateStatus": "Update", + "update_yes": "Dostępne", + "update_no": "Aktualny", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Pliki" } } diff --git a/public/locales/pt/common.json b/public/locales/pt/common.json index 66439545..acbf2d96 100644 --- a/public/locales/pt/common.json +++ b/public/locales/pt/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notificações", "issues": "Problemas", - "pulls": "Solicitar pull" + "pulls": "Solicitar pull", + "repositories": "Repositories" }, "stash": { "scenes": "Cenas", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Etiquetas" + }, + "slskd": { + "slskStatus": "Rede", + "connected": "Conectado", + "disconnected": "Desconectado", + "updateStatus": "Update", + "update_yes": "Disponível", + "update_no": "Atualizado", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Ficheiros" } } diff --git a/public/locales/pt_BR/common.json b/public/locales/pt_BR/common.json index 23c5c3dc..92a1dfcf 100644 --- a/public/locales/pt_BR/common.json +++ b/public/locales/pt_BR/common.json @@ -47,7 +47,7 @@ "load": "Carga", "temp": "TEMP", "max": "Máximo", - "uptime": "CIMA" + "uptime": "ATIVO" }, "unifi": { "users": "Usuários", @@ -61,7 +61,7 @@ "wlan_devices": "Dispositivos WLAN", "lan_users": "Usuários de LAN", "wlan_users": "Usuários de WLAN", - "up": "CIMA", + "up": "ATIVO", "down": "Desligado", "wait": "Por favor, aguarde", "empty_data": "Status do Subsistema desconhecido" @@ -149,8 +149,8 @@ "received": "Recebido", "sent": "Enviado", "externalIPAddress": "IP Externo", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "IPv6 Externo", + "externalIPv6Prefix": "Prefixo IPv6 Externo" }, "caddy": { "upstreams": "Streams de Envio", @@ -178,7 +178,7 @@ "connectedAp": "APs Ligados", "activeUser": "Dispositivos ativos", "alerts": "Alertas", - "connectedGateways": "Connected gateways", + "connectedGateways": "Gateways conectados", "connectedSwitches": "Switches conectados" }, "nzbget": { @@ -229,8 +229,8 @@ "seed": "Semente" }, "develancacheui": { - "cachehitbytes": "Cache Hit Bytes", - "cachemissbytes": "Cache Miss Bytes" + "cachehitbytes": "Bytes de Acerto de Cache", + "cachemissbytes": "Bytes de Falha de Cache" }, "downloadstation": { "download": "Descarregar", @@ -313,13 +313,13 @@ }, "suwayomi": { "download": "Baixado", - "nondownload": "Non-Downloaded", + "nondownload": "Não Baixado", "read": "Lido", "unread": "Não lida", - "downloadedread": "Downloaded & Read", - "downloadedunread": "Downloaded & Unread", - "nondownloadedread": "Non-Downloaded & Read", - "nondownloadedunread": "Non-Downloaded & Unread" + "downloadedread": "Baixado e Lido", + "downloadedunread": "Baixado e Não Lido", + "nondownloadedread": "Não Baixado e Lido", + "nondownloadedunread": "Não Baixado e Não Lido" }, "tailscale": { "address": "Endereço", @@ -337,15 +337,15 @@ }, "technitium": { "totalQueries": "Consultas", - "totalNoError": "Success", - "totalServerFailure": "Failures", - "totalNxDomain": "NX Domains", - "totalRefused": "Refused", - "totalAuthoritative": "Authoritative", - "totalRecursive": "Recursive", - "totalCached": "Cached", + "totalNoError": "Sucesso", + "totalServerFailure": "Falhas", + "totalNxDomain": "Domínios NX", + "totalRefused": "Recusado", + "totalAuthoritative": "Autoritativo", + "totalRecursive": "Recursivo", + "totalCached": "Em cache", "totalBlocked": "Bloqueado", - "totalDropped": "Dropped", + "totalDropped": "Perdidos", "totalClients": "Clientes" }, "tdarr": { @@ -436,7 +436,7 @@ "temp": "TEMP", "_temp": "Temperatura", "warn": "Aviso", - "uptime": "CIMA", + "uptime": "ATIVO", "total": "Total", "free": "Livre", "used": "Utilizado", @@ -705,8 +705,8 @@ "time": "Hora" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Valor Líquido", + "budget": "Orçamento" }, "grafana": { "dashboards": "Painéis", @@ -860,16 +860,16 @@ }, "romm": { "platforms": "Plataformas", - "totalRoms": "Games", + "totalRoms": "Jogos", "saves": "Saves", - "states": "States", - "screenshots": "Screenshots", - "totalfilesize": "Total Size" + "states": "Estados", + "screenshots": "Capturas de Tela", + "totalfilesize": "Tamanho total" }, "mailcow": { "domains": "Domínios", - "mailboxes": "Mailboxes", - "mails": "Mails", + "mailboxes": "Caixas de e-mail", + "mails": "Mensagens", "storage": "Armazenamento" }, "netdata": { @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notificações", "issues": "Problemas", - "pulls": "Solicitações de Envio" + "pulls": "Solicitações de Envio", + "repositories": "Repositories" }, "stash": { "scenes": "Cenas", @@ -951,30 +952,30 @@ }, "linkwarden": { "links": "Links", - "collections": "Collections", + "collections": "Coleções", "tags": "Marcadores" }, "zabbix": { - "unclassified": "Not classified", + "unclassified": "Não classificado", "information": "Informação", - "warning": "Warning", - "average": "Average", - "high": "High", - "disaster": "Disaster" + "warning": "Aviso", + "average": "Médio", + "high": "Alto", + "disaster": "Desastre" }, "lubelogger": { - "vehicle": "Vehicle", - "vehicles": "Vehicles", - "serviceRecords": "Service Records", - "reminders": "Reminders", - "nextReminder": "Next Reminder", - "none": "None" + "vehicle": "Veículo", + "vehicles": "Veículos", + "serviceRecords": "Registros de Serviço", + "reminders": "Lembretes", + "nextReminder": "Próximo Lembrete", + "none": "Nenhum" }, "vikunja": { - "projects": "Active Projects", - "tasks7d": "Tasks Due This Week", - "tasksOverdue": "Overdue Tasks", - "tasksInProgress": "Tasks In Progress" + "projects": "Projetos Ativos", + "tasks7d": "Tarefas que vencem nesta semana", + "tasksOverdue": "Tarefas Atrasadas", + "tasksInProgress": "Tarefas em Andamento" }, "headscale": { "name": "Nome", @@ -986,7 +987,7 @@ }, "beszel": { "name": "Nome", - "systems": "Systems", + "systems": "Sistemas", "up": "Ativo", "down": "Inativo", "paused": "Pausado", @@ -995,27 +996,27 @@ "updated": "Atualizado", "cpu": "CPU", "memory": "MEM", - "disk": "Disk", - "network": "NET" + "disk": "Disco", + "network": "Rede" }, "argocd": { - "apps": "Apps", - "synced": "Synced", - "outOfSync": "Out Of Sync", + "apps": "Aplicativos", + "synced": "Sincronizado", + "outOfSync": "Fora de sincronia", "healthy": "Saudável", - "degraded": "Degraded", - "progressing": "Progressing", + "degraded": "Degradado", + "progressing": "Progredindo", "missing": "Faltando", - "suspended": "Suspended" + "suspended": "Suspenso" }, "spoolman": { "loading": "Carregando" }, "gitlab": { - "groups": "Groups", + "groups": "Grupos", "issues": "Problemas", - "merges": "Merge Requests", - "projects": "Projects" + "merges": "Solicitações de mesclagem", + "projects": "Projetos" }, "apcups": { "status": "Status", @@ -1024,11 +1025,22 @@ "timeleft": "Tempo restante" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "bookmarks": "Favoritos", + "favorites": "Favoritos", + "archived": "Arquivados", + "highlights": "Destaques", + "lists": "Listas", "tags": "Marcadores" + }, + "slskd": { + "slskStatus": "Rede", + "connected": "Conectado", + "disconnected": "Desconectado", + "updateStatus": "Update", + "update_yes": "Disponível", + "update_no": "Atualizado", + "downloads": "Transferências", + "uploads": "Envios", + "sharedFiles": "Arquivos" } } diff --git a/public/locales/ro/common.json b/public/locales/ro/common.json index 4d38502d..b0eb7747 100644 --- a/public/locales/ro/common.json +++ b/public/locales/ro/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Disponibile", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 72785a96..e1e1a94f 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -149,8 +149,8 @@ "received": "Получено", "sent": "Отправлено", "externalIPAddress": "Внеш. IP", - "externalIPv6Address": "Ext. IPv6", - "externalIPv6Prefix": "Ext. IPv6-Prefix" + "externalIPv6Address": "Внешний IPv6", + "externalIPv6Prefix": "Внешний IPv6 префикс" }, "caddy": { "upstreams": "Входящие каналы", @@ -178,7 +178,7 @@ "connectedAp": "Подключенные точки доступа", "activeUser": "Активные устройства", "alerts": "Предупреждения", - "connectedGateways": "Connected gateways", + "connectedGateways": "Подключенные шлюзы", "connectedSwitches": "Подключенные коммутаторы" }, "nzbget": { @@ -705,8 +705,8 @@ "time": "Время" }, "firefly": { - "networth": "Net Worth", - "budget": "Budget" + "networth": "Общая средства", + "budget": "Бюджет" }, "grafana": { "dashboards": "Панели", @@ -861,7 +861,7 @@ "romm": { "platforms": "Платформы", "totalRoms": "Игры", - "saves": "Сейвы", + "saves": "Сохранения", "states": "Состояния", "screenshots": "Скриншоты", "totalfilesize": "Общий объем" @@ -885,7 +885,8 @@ "gitea": { "notifications": "Уведомления", "issues": "Вопросы", - "pulls": "Запросы на слияние (Pull Request)" + "pulls": "Запросы на слияние (Pull Request)", + "repositories": "Repositories" }, "stash": { "scenes": "Сцены", @@ -927,7 +928,7 @@ "total": "Всего" }, "swagdashboard": { - "proxied": "Прокси", + "proxied": "Проксировано", "auth": "С Авторизацией", "outdated": "Устаревшие", "banned": "Заблокированные" @@ -958,17 +959,17 @@ "unclassified": "Не классифицировано", "information": "Информация", "warning": "Предупреждение", - "average": "Средняя", + "average": "Среднее", "high": "Высокая", - "disaster": "Чрезвычайная" + "disaster": "Чрезвычайное" }, "lubelogger": { - "vehicle": "Автомобиль", - "vehicles": "Автомобили", - "serviceRecords": "Сервисные работы", + "vehicle": "Транспорт", + "vehicles": "Транспорты", + "serviceRecords": "Сервисные записи", "reminders": "Напоминания", "nextReminder": "Следующее напоминание", - "none": "Нет" + "none": "Отсутствует" }, "vikunja": { "projects": "Активные Проекты", @@ -1024,11 +1025,22 @@ "timeleft": "Осталось" }, "hoarder": { - "bookmarks": "Bookmarks", - "favorites": "Favorites", - "archived": "Archived", - "highlights": "Highlights", - "lists": "Lists", + "bookmarks": "Закладки", + "favorites": "Избранное", + "archived": "Архивированное", + "highlights": "События", + "lists": "Список", "tags": "Теги" + }, + "slskd": { + "slskStatus": "Сеть", + "connected": "Подключено", + "disconnected": "Отключено", + "updateStatus": "Обновление", + "update_yes": "Доступно", + "update_no": "Последняя версия", + "downloads": "Скачивания", + "uploads": "Загрузки", + "sharedFiles": "Файлов" } } diff --git a/public/locales/sk/common.json b/public/locales/sk/common.json index 4272c51f..9c154cce 100644 --- a/public/locales/sk/common.json +++ b/public/locales/sk/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Oznámenia", "issues": "Problémy", - "pulls": "Pull requesty" + "pulls": "Pull requesty", + "repositories": "Repositories" }, "stash": { "scenes": "Scény", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Štítky" + }, + "slskd": { + "slskStatus": "Sieť", + "connected": "Pripojené", + "disconnected": "Odpojené", + "updateStatus": "Update", + "update_yes": "Dostupné", + "update_no": "Aktuálny", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Súborov" } } diff --git a/public/locales/sl/common.json b/public/locales/sl/common.json index 34db459d..a32aa0dd 100644 --- a/public/locales/sl/common.json +++ b/public/locales/sl/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Obvestila", "issues": "Težave", - "pulls": "Zahteve za prenos" + "pulls": "Zahteve za prenos", + "repositories": "Repositories" }, "stash": { "scenes": "Scene", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Značke" + }, + "slskd": { + "slskStatus": "Omrežje", + "connected": "Povezan", + "disconnected": "Prekinjeno", + "updateStatus": "Update", + "update_yes": "Na voljo", + "update_no": "Posodobljeno", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Datotek" } } diff --git a/public/locales/sr/common.json b/public/locales/sr/common.json index ba50eef1..4e3f5fb0 100644 --- a/public/locales/sr/common.json +++ b/public/locales/sr/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/sv/common.json b/public/locales/sv/common.json index ead80b0b..caa18acd 100644 --- a/public/locales/sv/common.json +++ b/public/locales/sv/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Tillgänglig", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/te/common.json b/public/locales/te/common.json index 2cd066a6..e34d6fae 100644 --- a/public/locales/te/common.json +++ b/public/locales/te/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "అందుబాటులో వున్నవి", + "update_no": "తాజాగా", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/th/common.json b/public/locales/th/common.json index 42a0b6a2..b37b662d 100644 --- a/public/locales/th/common.json +++ b/public/locales/th/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 40611dac..815b9150 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Bildirimler", "issues": "Sorunlar", - "pulls": "Değişiklik İstekleri" + "pulls": "Değişiklik İstekleri", + "repositories": "Repositories" }, "stash": { "scenes": "Sahneler", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Etiketler" + }, + "slskd": { + "slskStatus": "Ağ", + "connected": "Bağlandı", + "disconnected": "Bağlantı kesildi", + "updateStatus": "Update", + "update_yes": "Kullanılabilir", + "update_no": "Güncel", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Dosyalar" } } diff --git a/public/locales/uk/common.json b/public/locales/uk/common.json index 0914c49f..3412d591 100644 --- a/public/locales/uk/common.json +++ b/public/locales/uk/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Сповіщення", "issues": "Питання", - "pulls": "Pull-запити" + "pulls": "Pull-запити", + "repositories": "Repositories" }, "stash": { "scenes": "Сцени", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Теги" + }, + "slskd": { + "slskStatus": "Мережа", + "connected": "З'єднано", + "disconnected": "Відключено", + "updateStatus": "Update", + "update_yes": "Доступно", + "update_no": "Актуально", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Файли" } } diff --git a/public/locales/vi/common.json b/public/locales/vi/common.json index d2753c97..7e8974f8 100644 --- a/public/locales/vi/common.json +++ b/public/locales/vi/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "Notifications", "issues": "Issues", - "pulls": "Pull Requests" + "pulls": "Pull Requests", + "repositories": "Repositories" }, "stash": { "scenes": "Scenes", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "Network", + "connected": "Connected", + "disconnected": "Disconnected", + "updateStatus": "Update", + "update_yes": "Available", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/yue/common.json b/public/locales/yue/common.json index 64bc1e72..dfe604dd 100644 --- a/public/locales/yue/common.json +++ b/public/locales/yue/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "信息", "issues": "出版", - "pulls": "提取請求" + "pulls": "提取請求", + "repositories": "Repositories" }, "stash": { "scenes": "場景", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "標籤" + }, + "slskd": { + "slskStatus": "網絡", + "connected": "Connected", + "disconnected": "連接已中斷", + "updateStatus": "Update", + "update_yes": "可用", + "update_no": "已更新至最新", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "檔案" } } diff --git a/public/locales/zh-Hans/common.json b/public/locales/zh-Hans/common.json index 5e54cd8d..064e2c1c 100644 --- a/public/locales/zh-Hans/common.json +++ b/public/locales/zh-Hans/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "通知", "issues": "问题", - "pulls": "PR" + "pulls": "PR", + "repositories": "Repositories" }, "stash": { "scenes": "场景", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "Tags" + }, + "slskd": { + "slskStatus": "网络", + "connected": "已连接", + "disconnected": "未连接", + "updateStatus": "Update", + "update_yes": "可用", + "update_no": "Up to Date", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "Files" } } diff --git a/public/locales/zh-Hant/common.json b/public/locales/zh-Hant/common.json index 5a356009..eb1f7423 100644 --- a/public/locales/zh-Hant/common.json +++ b/public/locales/zh-Hant/common.json @@ -885,7 +885,8 @@ "gitea": { "notifications": "信息", "issues": "出版", - "pulls": "提取請求" + "pulls": "提取請求", + "repositories": "Repositories" }, "stash": { "scenes": "場景", @@ -1030,5 +1031,16 @@ "highlights": "Highlights", "lists": "Lists", "tags": "標籤" + }, + "slskd": { + "slskStatus": "網絡", + "connected": "Connected", + "disconnected": "連接已中斷", + "updateStatus": "Update", + "update_yes": "可觀看", + "update_no": "已更新至最新", + "downloads": "Downloads", + "uploads": "Uploads", + "sharedFiles": "檔案" } } From cadf1433af005b54fd5b26270100eddc91cc36d9 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:22:02 -0700 Subject: [PATCH 73/93] Bump version to 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 209aea33..ae9047c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.0.4", + "version": "1.1.0", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From e19dcc2729795fc6a1feac8744f239a7f9677752 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Mar 2025 13:27:20 -0700 Subject: [PATCH 74/93] Only deploy docs from main branch --- .github/workflows/docs-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml index def1ee1e..5479e492 100644 --- a/.github/workflows/docs-publish.yml +++ b/.github/workflows/docs-publish.yml @@ -55,7 +55,7 @@ jobs: run: MKINSIDERS=false mkdocs build deploy: name: Build & Deploy - if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' + if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest needs: - pre-commit From 2cabe77b555b94e8adfba75cfea1afdce4b3b23a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:15:39 -0700 Subject: [PATCH 75/93] Fix: add fallback for shvl syntax --- src/widgets/customapi/component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index b8147caa..7624c2f5 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -18,7 +18,7 @@ function getValue(field, data) { // shvl is easier, everything else is kept for backwards compatibility. if (typeof field === "string") { - return shvl.get(data, field, null); + return shvl.get(data, field, null) ?? data[field] ?? null; } while (typeof lastField === "object") { From 999dade86114deae80870364282f251e35993a78 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:16:50 -0700 Subject: [PATCH 76/93] Fix: add fallback for shvl syntax (#5080) From 313835c0e6ba383c9da2d6204cfa14923eef84bb Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:20:02 -0700 Subject: [PATCH 77/93] Bump version to 1.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ae9047c1..7f0fbdf7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "homepage", - "version": "1.1.0", + "version": "1.1.1", "private": true, "scripts": { "preinstall": "npx only-allow pnpm", From ee7e8fab615c6d7d473f85fd95f251070ceb3571 Mon Sep 17 00:00:00 2001 From: Matheus Vellone <matheusvellone@gmail.com> Date: Fri, 28 Mar 2025 20:29:23 -0300 Subject: [PATCH 78/93] Fix: support shvl on customapi dynamic list target (#5081) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/widgets/customapi/component.jsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index 7624c2f5..cb377628 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -245,7 +245,15 @@ export default function Component({ service }) { listItems.map((item, index) => { const itemName = shvl.get(item, name, ""); const itemLabel = shvl.get(item, label, ""); - const itemUrl = target ? target.replace(/\{([^}]+)\}/g, (_, key) => item[key] || "") : null; + + const itemUrl = target + ? [...target.matchAll(/\{(.*?)\}/g)] + .map((match) => match[1]) + .reduce((url, targetTemplate) => { + const value = shvl.get(item, targetTemplate, item[targetTemplate]) ?? ""; + return url.replaceAll(`{${targetTemplate}}`, value); + }, target) + : null; const className = "bg-theme-200/50 dark:bg-theme-900/20 rounded-sm m-1 flex-1 flex flex-row items-center justify-between p-1 text-xs"; From 4567427b9cde4c468174b466869dd29f2b039664 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 28 Mar 2025 16:32:56 -0700 Subject: [PATCH 79/93] Enhancement: add shvl fallback for custom api dynamic list (#5091) --- src/widgets/customapi/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index cb377628..b651045f 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -243,8 +243,8 @@ export default function Component({ service }) { </div> ) : ( listItems.map((item, index) => { - const itemName = shvl.get(item, name, ""); - const itemLabel = shvl.get(item, label, ""); + const itemName = shvl.get(item, name, item[name]) ?? ""; + const itemLabel = shvl.get(item, label, item[label]) ?? ""; const itemUrl = target ? [...target.matchAll(/\{(.*?)\}/g)] From 30cb893354883a33b67588693e74f296bd02604c Mon Sep 17 00:00:00 2001 From: Chris <67816022+vhsdream@users.noreply.github.com> Date: Sat, 29 Mar 2025 22:49:53 -0400 Subject: [PATCH 80/93] Fix: remove unneeded import from Hoarder widget.js (#5097) --- src/widgets/hoarder/widget.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/widgets/hoarder/widget.js b/src/widgets/hoarder/widget.js index 8a3cfef0..b005b04f 100644 --- a/src/widgets/hoarder/widget.js +++ b/src/widgets/hoarder/widget.js @@ -1,5 +1,4 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; -import { asJson } from "utils/proxy/api-helpers"; const widget = { api: `{url}/api/v1/{endpoint}`, From 954ab544931658dfcab1540382b7d241e5e907b5 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 30 Mar 2025 08:52:23 -0700 Subject: [PATCH 81/93] Speed up CI: Skip unnecessary build steps, optimize caching etc (#5098) --- .dockerignore | 2 +- .github/workflows/docker-publish.yml | 131 ++++++++++++++------------- Dockerfile | 72 +++++++-------- 3 files changed, 104 insertions(+), 101 deletions(-) diff --git a/.dockerignore b/.dockerignore index edbf8525..698137cb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -16,11 +16,11 @@ **/compose* **/Dockerfile* **/node_modules +!.next/standalone/node_modules **/npm-debug.log **/obj **/secrets.dev.yaml **/values.dev.yaml -**/.next README.md config/ k3d/ diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c7d36f33..afb7fca4 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,9 +1,4 @@ -name: Docker - -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. +name: Docker CI on: schedule: @@ -13,7 +8,6 @@ on: - main - feature/** - dev - # Publish semver tags as releases. tags: [ 'v*.*.*' ] paths-ignore: - 'docs/**' @@ -26,89 +20,56 @@ on: merge_group: env: - # github.repository as <account>/<repo> IMAGE_NAME: ${{ github.repository }} - jobs: pre-commit: name: Linting Checks runs-on: ubuntu-22.04 steps: - - - name: Checkout repository + - name: Checkout repository uses: actions/checkout@v4 - - - name: Install python + + - name: Install python uses: actions/setup-python@v5 with: python-version: 3.x - - - name: Check files + + - name: Check files uses: pre-commit/action@v3.0.1 - - - name: Install pnpm + + - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 run_install: false - - - name: Install Node.js + + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' - - - name: Install dependencies + + - name: Install dependencies run: pnpm install - - - name: Lint frontend + + - name: Lint frontend run: pnpm run lint build: name: Docker Build & Push - if: github.repository == 'gethomepage/homepage' + if: github.repository == 'gethomepage/homepage' runs-on: self-hosted - needs: - - pre-commit + needs: [ pre-commit ] permissions: contents: read packages: write - # This is used to complete the identity challenge - # with sigstore/fulcio when running outside of PRs. id-token: write steps: - name: Checkout repository uses: actions/checkout@v4 - # Login to Docker Registry - # https://github.com/docker/login-action - - name: Log into registry ${{ env.REGISTRY }} - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to Docker Hub - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - # Setup QEMU - # https://github.com/marketplace/actions/docker-setup-buildx#with-qemu - - name: Setup QEMU - uses: docker/setup-qemu-action@v3.6.0 - - # Workaround: https://github.com/docker/build-push-action/issues/461 - - name: Setup Docker buildx - uses: docker/setup-buildx-action@v3 - - # Extract metadata (tags, labels) for Docker - # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta uses: docker/metadata-action@v5 @@ -119,8 +80,57 @@ jobs: flavor: | latest=auto - # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action + - name: Next.js build cache + uses: actions/cache@v4 + with: + path: .next/cache + key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }} + restore-keys: | + nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Build app + run: | + NEXT_PUBLIC_BUILDTIME="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" \ + NEXT_PUBLIC_VERSION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" \ + NEXT_PUBLIC_REVISION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" \ + pnpm run build + + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to Docker Hub + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3.6.0 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v3 + - name: Build and push Docker image id: build-and-push uses: docker/build-push-action@v6 @@ -130,18 +140,15 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | + CI=true BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} - # https://github.com/docker/setup-qemu-action#about - # platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6 platforms: linux/amd64,linux/arm64 cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max - # Temp fix - # https://github.com/docker/build-push-action/issues/252 - # https://github.com/moby/buildkit/issues/1896 + # https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896 - name: Move cache run: | rm -rf /tmp/.buildx-cache diff --git a/Dockerfile b/Dockerfile index 7963407c..ec59c6b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,67 +1,63 @@ -# Install dependencies only when needed -FROM docker.io/node:22-alpine AS deps - -WORKDIR /app - -COPY --link package.json pnpm-lock.yaml* ./ - -SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] -RUN apk add --no-cache libc6-compat \ - && apk add --no-cache --virtual .gyp python3 make g++ \ - && npm install -g pnpm - -RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store" - -RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm install -r --offline - -# Rebuild the source code only when needed -FROM docker.io/node:22-alpine AS builder +# ========================= +# Builder Stage +# ========================= +FROM node:22-slim AS builder WORKDIR /app +# Setup RUN mkdir config +COPY . . +ARG CI ARG BUILDTIME ARG VERSION ARG REVISION +ENV CI=$CI -COPY --link --from=deps /app/node_modules ./node_modules/ -COPY . . +# Install and build only outside CI +RUN if [ "$CI" != "true" ]; then \ + corepack enable && corepack prepare pnpm@latest --activate && \ + pnpm install --frozen-lockfile --prefer-offline && \ + NEXT_TELEMETRY_DISABLED=1 \ + NEXT_PUBLIC_BUILDTIME=$BUILDTIME \ + NEXT_PUBLIC_VERSION=$VERSION \ + NEXT_PUBLIC_REVISION=$REVISION \ + pnpm run build; \ + else \ + echo "✅ Using prebuilt app from CI context"; \ + fi -SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] -RUN npm install -g pnpm \ - && pnpm run telemetry \ - && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION pnpm run build - -# Production image, copy all the files and run next -FROM docker.io/node:22-alpine AS runner -LABEL org.opencontainers.image.title "Homepage" -LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations." +# ========================= +# Runtime Stage +# ========================= +FROM node:22-alpine AS runner +LABEL org.opencontainers.image.title="Homepage" +LABEL org.opencontainers.image.description="A self-hosted services landing page, with docker and service integrations." LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage" LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki' LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage' LABEL org.opencontainers.image.licenses='Apache-2.0' -ENV NODE_ENV=production - +# Setup WORKDIR /app -# Copy files from context (this allows the files to copy before the builder stage is done). -COPY --link --chown=1000:1000 package.json next.config.js ./ +# Copy some files from context COPY --link --chown=1000:1000 /public ./public/ - -# Copy files from builder -COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./ -COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ +# Copy only necessary files from the build stage +COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./ +COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static + RUN apk add --no-cache su-exec +ENV NODE_ENV=production ENV HOSTNAME=0.0.0.0 ENV PORT=3000 EXPOSE $PORT HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \ - CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://127.0.0.1:$PORT/api/healthcheck || exit 1 + CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:$PORT/api/healthcheck || exit 1 ENTRYPOINT ["docker-entrypoint.sh"] CMD ["node", "server.js"] From eda06965fa55709bb7dbbc8bca1d2616d7f36b51 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 30 Mar 2025 21:40:03 -0700 Subject: [PATCH 82/93] Chore: add organize imports to pre-commit (#5104) --- .pre-commit-config.yaml | 7 ++-- .prettierrc | 1 - .prettierrc.js | 5 +++ next-i18next.config.js | 4 +-- package.json | 1 + pnpm-lock.yaml | 26 +++++++++++--- src/components/bookmarks/group.jsx | 8 ++--- src/components/bookmarks/item.jsx | 4 +-- src/components/favicon.jsx | 2 +- src/components/quicklaunch.jsx | 6 ++-- src/components/resolvedicon.jsx | 2 +- src/components/services/dropdown.jsx | 4 +-- src/components/services/group.jsx | 8 ++--- src/components/services/item.jsx | 10 +++--- src/components/services/kubernetes-status.jsx | 2 +- src/components/services/widget.jsx | 2 +- src/components/services/widget/block.jsx | 2 +- src/components/tab.jsx | 2 +- src/components/toggles/color.jsx | 4 +-- src/components/version.jsx | 4 +-- src/components/widgets/datetime/datetime.jsx | 2 +- src/components/widgets/glances/glances.jsx | 6 ++-- .../widgets/kubernetes/kubernetes.jsx | 4 +-- src/components/widgets/kubernetes/node.jsx | 2 +- src/components/widgets/longhorn/longhorn.jsx | 2 +- .../widgets/openmeteo/openmeteo.jsx | 14 ++++---- .../widgets/openweathermap/weather.jsx | 12 +++---- src/components/widgets/resources/cpu.jsx | 6 ++-- src/components/widgets/resources/cputemp.jsx | 6 ++-- src/components/widgets/resources/disk.jsx | 6 ++-- src/components/widgets/resources/memory.jsx | 6 ++-- src/components/widgets/resources/network.jsx | 6 ++-- .../widgets/resources/resources.jsx | 6 ++-- src/components/widgets/resources/uptime.jsx | 6 ++-- src/components/widgets/search/search.jsx | 12 +++---- src/components/widgets/stocks/stocks.jsx | 8 ++--- .../widgets/unifi_console/unifi_console.jsx | 8 ++--- src/components/widgets/weather/weather.jsx | 14 ++++---- src/components/widgets/widget.jsx | 2 +- src/components/widgets/widget/container.jsx | 4 +-- .../widgets/widget/container_button.jsx | 2 +- .../widgets/widget/container_form.jsx | 2 +- .../widgets/widget/container_link.jsx | 2 +- src/components/widgets/widget/resources.jsx | 2 +- src/pages/_app.jsx | 6 ++-- src/pages/_document.jsx | 2 +- src/pages/api/config/[path].js | 2 +- src/pages/api/hash.js | 2 +- src/pages/api/releases.js | 2 +- src/pages/api/search/searchSuggestion.js | 2 +- src/pages/api/services/proxy.js | 10 +++--- src/pages/api/widgets/glances.js | 4 +-- src/pages/api/widgets/longhorn.js | 4 +-- src/pages/api/widgets/openweathermap.js | 2 +- src/pages/api/widgets/stocks.js | 2 +- src/pages/api/widgets/weather.js | 2 +- src/pages/index.jsx | 36 +++++++++---------- src/utils/config/api-response.js | 6 ++-- src/utils/config/config.js | 4 +-- src/utils/config/docker.js | 2 +- src/utils/config/kubernetes.js | 4 +-- src/utils/config/service-helpers.js | 6 ++-- src/utils/contexts/color.jsx | 2 +- src/utils/contexts/settings.jsx | 2 +- src/utils/contexts/tab.jsx | 2 +- src/utils/contexts/theme.jsx | 2 +- src/utils/hooks/window-focus.js | 2 +- src/utils/kubernetes/export.js | 6 ++-- src/utils/kubernetes/ingress-list.js | 2 +- src/utils/kubernetes/resource-helpers.js | 6 ++-- src/utils/kubernetes/traefik-list.js | 2 +- src/utils/proxy/handlers/credentialed.js | 10 +++--- src/utils/proxy/handlers/generic.js | 6 ++-- src/utils/proxy/handlers/jsonrpc.js | 4 +-- src/utils/proxy/handlers/synology.js | 2 +- src/utils/proxy/http.js | 2 +- src/utils/proxy/validate-widget-data.js | 2 +- src/widgets/adguard/component.jsx | 4 +-- src/widgets/apcups/component.jsx | 2 +- src/widgets/apcups/proxy.js | 2 +- src/widgets/argocd/component.jsx | 2 +- src/widgets/atsumeru/component.jsx | 4 +-- src/widgets/audiobookshelf/component.jsx | 4 +-- src/widgets/audiobookshelf/proxy.js | 4 +-- src/widgets/authentik/component.jsx | 4 +-- src/widgets/autobrr/component.jsx | 4 +-- src/widgets/azuredevops/component.jsx | 4 +-- src/widgets/bazarr/component.jsx | 4 +-- src/widgets/bazarr/widget.js | 2 +- src/widgets/beszel/component.jsx | 4 +-- src/widgets/beszel/proxy.js | 2 +- src/widgets/caddy/component.jsx | 4 +-- src/widgets/calendar/agenda.jsx | 2 +- src/widgets/calendar/component.jsx | 8 ++--- src/widgets/calendar/event.jsx | 6 ++-- src/widgets/calendar/integrations/ical.jsx | 6 ++-- src/widgets/calendar/integrations/lidarr.jsx | 2 +- src/widgets/calendar/integrations/radarr.jsx | 4 +-- src/widgets/calendar/integrations/readarr.jsx | 2 +- src/widgets/calendar/integrations/sonarr.jsx | 2 +- src/widgets/calendar/monthly.jsx | 4 +-- src/widgets/calendar/proxy.js | 2 +- src/widgets/calibreweb/component.jsx | 4 +-- src/widgets/changedetectionio/component.jsx | 4 +-- src/widgets/channelsdvrserver/component.jsx | 4 +-- src/widgets/cloudflared/component.jsx | 2 +- src/widgets/coinmarketcap/component.jsx | 8 ++--- src/widgets/crowdsec/component.jsx | 4 +-- src/widgets/crowdsec/proxy.js | 4 +-- src/widgets/customapi/component.jsx | 8 ++--- src/widgets/deluge/component.jsx | 4 +-- src/widgets/deluge/proxy.js | 4 +-- src/widgets/develancacheui/component.jsx | 4 +-- src/widgets/diskstation/component.jsx | 4 +-- src/widgets/docker/component.jsx | 8 ++--- src/widgets/downloadstation/component.jsx | 4 +-- src/widgets/emby/component.jsx | 6 ++-- src/widgets/esphome/component.jsx | 2 +- src/widgets/evcc/component.jsx | 4 +-- src/widgets/fileflows/component.jsx | 4 +-- src/widgets/firefly/component.jsx | 4 +-- src/widgets/flood/component.jsx | 4 +-- src/widgets/flood/proxy.js | 4 +-- src/widgets/freshrss/component.jsx | 4 +-- src/widgets/freshrss/proxy.js | 4 +-- src/widgets/frigate/component.jsx | 4 +-- src/widgets/fritzbox/component.jsx | 4 +-- src/widgets/fritzbox/proxy.js | 2 +- src/widgets/gamedig/component.jsx | 4 +-- src/widgets/gamedig/proxy.js | 2 +- src/widgets/gatus/component.jsx | 4 +-- src/widgets/ghostfolio/component.jsx | 4 +-- src/widgets/gitea/component.jsx | 2 +- src/widgets/gitlab/component.jsx | 4 +-- src/widgets/glances/component.jsx | 12 +++---- src/widgets/glances/components/chart.jsx | 2 +- src/widgets/glances/components/chart_dual.jsx | 2 +- src/widgets/glances/components/container.jsx | 2 +- src/widgets/glances/metrics/containers.jsx | 4 +-- src/widgets/glances/metrics/cpu.jsx | 6 ++-- src/widgets/glances/metrics/disk.jsx | 6 ++-- src/widgets/glances/metrics/fs.jsx | 2 +- src/widgets/glances/metrics/gpu.jsx | 6 ++-- src/widgets/glances/metrics/info.jsx | 2 +- src/widgets/glances/metrics/memory.jsx | 6 ++-- src/widgets/glances/metrics/net.jsx | 6 ++-- src/widgets/glances/metrics/process.jsx | 4 +-- src/widgets/glances/metrics/sensor.jsx | 6 ++-- src/widgets/gluetun/component.jsx | 2 +- src/widgets/gotify/component.jsx | 2 +- src/widgets/grafana/component.jsx | 4 +-- src/widgets/hdhomerun/component.jsx | 2 +- src/widgets/headscale/component.jsx | 4 +-- src/widgets/healthchecks/component.jsx | 2 +- src/widgets/hoarder/component.jsx | 4 +-- src/widgets/homeassistant/component.jsx | 2 +- src/widgets/homeassistant/proxy.js | 2 +- src/widgets/homebox/component.jsx | 4 +-- src/widgets/homebox/proxy.js | 4 +-- src/widgets/homebridge/component.jsx | 4 +-- src/widgets/homebridge/proxy.js | 4 +-- src/widgets/iframe/component.jsx | 2 +- src/widgets/immich/component.jsx | 4 +-- src/widgets/jackett/component.jsx | 4 +-- src/widgets/jackett/proxy.js | 4 +-- src/widgets/jdownloader/component.jsx | 2 +- src/widgets/jdownloader/proxy.js | 4 +-- src/widgets/jellyseerr/component.jsx | 2 +- src/widgets/kavita/component.jsx | 4 +-- src/widgets/kavita/proxy.js | 4 +-- src/widgets/komga/component.jsx | 4 +-- src/widgets/komga/proxy.js | 2 +- src/widgets/kopia/component.jsx | 4 +-- src/widgets/kubernetes/component.jsx | 6 ++-- src/widgets/lidarr/component.jsx | 4 +-- src/widgets/linkwarden/component.jsx | 4 +-- src/widgets/lubelogger/component.jsx | 4 +-- src/widgets/mailcow/component.jsx | 4 +-- src/widgets/mastodon/component.jsx | 4 +-- src/widgets/mealie/component.jsx | 4 +-- src/widgets/medusa/component.jsx | 4 +-- src/widgets/mikrotik/component.jsx | 4 +-- src/widgets/minecraft/component.jsx | 4 +-- src/widgets/minecraft/proxy.js | 2 +- src/widgets/miniflux/component.jsx | 4 +-- src/widgets/moonraker/component.jsx | 4 +-- src/widgets/mylar/component.jsx | 4 +-- src/widgets/myspeed/component.jsx | 4 +-- src/widgets/navidrome/component.jsx | 2 +- src/widgets/netalertx/component.jsx | 4 +-- src/widgets/netdata/component.jsx | 4 +-- src/widgets/nextcloud/component.jsx | 4 +-- src/widgets/nextdns/component.jsx | 4 +-- src/widgets/npm/component.jsx | 2 +- src/widgets/npm/proxy.js | 2 +- src/widgets/nzbget/component.jsx | 4 +-- src/widgets/octoprint/component.jsx | 2 +- src/widgets/omada/component.jsx | 4 +-- src/widgets/omada/proxy.js | 2 +- src/widgets/ombi/component.jsx | 2 +- src/widgets/opendtu/component.jsx | 4 +-- src/widgets/openmediavault/component.jsx | 2 +- .../methods/downloader_get_downloadlist.jsx | 2 +- .../methods/services_get_status.jsx | 2 +- .../openmediavault/methods/smart_get_list.jsx | 2 +- src/widgets/openmediavault/proxy.js | 6 ++-- src/widgets/openwrt/methods/interface.jsx | 4 +-- src/widgets/openwrt/methods/system.jsx | 4 +-- src/widgets/openwrt/proxy.js | 4 +-- src/widgets/opnsense/component.jsx | 4 +-- src/widgets/overseerr/component.jsx | 4 +-- src/widgets/paperlessngx/component.jsx | 2 +- src/widgets/peanut/component.jsx | 4 +-- src/widgets/pfsense/component.jsx | 4 +-- src/widgets/photoprism/component.jsx | 4 +-- src/widgets/photoprism/proxy.js | 4 +-- src/widgets/pihole/component.jsx | 4 +-- src/widgets/pihole/proxy.js | 4 +-- src/widgets/plantit/component.jsx | 4 +-- src/widgets/plex/component.jsx | 2 +- src/widgets/plex/proxy.js | 4 +-- src/widgets/portainer/component.jsx | 2 +- src/widgets/prometheus/component.jsx | 4 +-- src/widgets/prometheusmetric/component.jsx | 4 +-- src/widgets/prowlarr/component.jsx | 4 +-- src/widgets/proxmox/component.jsx | 4 +-- src/widgets/proxmoxbackupserver/component.jsx | 4 +-- src/widgets/pterodactyl/component.jsx | 2 +- src/widgets/pyload/component.jsx | 4 +-- src/widgets/pyload/proxy.js | 4 +-- src/widgets/qbittorrent/component.jsx | 4 +-- src/widgets/qbittorrent/proxy.js | 4 +-- src/widgets/qnap/component.jsx | 4 +-- src/widgets/qnap/proxy.js | 4 +-- src/widgets/radarr/component.jsx | 4 +-- src/widgets/radarr/widget.js | 2 +- src/widgets/readarr/component.jsx | 4 +-- src/widgets/readarr/widget.js | 2 +- src/widgets/romm/component.jsx | 4 +-- src/widgets/rutorrent/component.jsx | 4 +-- src/widgets/rutorrent/proxy.js | 4 +-- src/widgets/sabnzbd/component.jsx | 4 +-- src/widgets/scrutiny/component.jsx | 2 +- src/widgets/slskd/component.jsx | 4 +-- src/widgets/slskd/widget.js | 1 - src/widgets/sonarr/component.jsx | 4 +-- src/widgets/sonarr/widget.js | 2 +- src/widgets/speedtest/component.jsx | 4 +-- src/widgets/spoolman/component.jsx | 4 +-- src/widgets/stash/component.jsx | 4 +-- src/widgets/stocks/component.jsx | 4 +-- src/widgets/strelaysrv/component.jsx | 4 +-- src/widgets/suwayomi/component.jsx | 4 +-- src/widgets/suwayomi/proxy.js | 4 +-- src/widgets/swagdashboard/component.jsx | 2 +- src/widgets/tailscale/component.jsx | 4 +-- src/widgets/tandoor/component.jsx | 2 +- src/widgets/tautulli/component.jsx | 6 ++-- src/widgets/tdarr/component.jsx | 4 +-- src/widgets/tdarr/proxy.js | 4 +-- src/widgets/technitium/component.jsx | 4 +-- src/widgets/technitium/widget.js | 2 +- src/widgets/traefik/component.jsx | 2 +- src/widgets/transmission/component.jsx | 4 +-- src/widgets/transmission/proxy.js | 4 +-- src/widgets/truenas/component.jsx | 4 +-- src/widgets/truenas/widget.js | 2 +- src/widgets/tubearchivist/component.jsx | 4 +-- src/widgets/unifi/component.jsx | 4 +-- src/widgets/unifi/proxy.js | 6 ++-- src/widgets/unmanic/component.jsx | 6 ++-- src/widgets/unmanic/widget.js | 2 +- src/widgets/uptimekuma/component.jsx | 4 +-- src/widgets/uptimerobot/component.jsx | 4 +-- src/widgets/urbackup/component.jsx | 4 +-- src/widgets/vikunja/component.jsx | 4 +-- src/widgets/vikunja/widget.js | 2 +- src/widgets/watchtower/component.jsx | 4 +-- src/widgets/watchtower/proxy.js | 4 +-- src/widgets/wgeasy/component.jsx | 2 +- src/widgets/whatsupdocker/component.jsx | 2 +- src/widgets/widgets.js | 22 ++++++------ src/widgets/xteve/component.jsx | 4 +-- src/widgets/xteve/proxy.js | 4 +-- src/widgets/zabbix/component.jsx | 4 +-- 285 files changed, 601 insertions(+), 576 deletions(-) delete mode 100644 .prettierrc create mode 100644 .prettierrc.js diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6cc46b47..0b4f5624 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,11 +9,14 @@ repos: - id: check-yaml exclude: "(^mkdocs\\.yml$)" - id: check-added-large-files -- repo: https://github.com/pre-commit/mirrors-prettier - rev: 'v3.0.3' +- repo: https://github.com/rbubley/mirrors-prettier + rev: 'v3.3.3' hooks: - id: prettier types_or: - javascript - markdown - jsx + additional_dependencies: + - prettier@3.3.3 + - 'prettier-plugin-organize-imports@4.1.0' diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 0967ef42..00000000 --- a/.prettierrc +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..b48ef007 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +const config = { + plugins: [require("prettier-plugin-organize-imports")], +}; + +module.exports = config; diff --git a/next-i18next.config.js b/next-i18next.config.js index a1b5c7b3..f6968dc3 100644 --- a/next-i18next.config.js +++ b/next-i18next.config.js @@ -131,8 +131,8 @@ module.exports = { ? BIBIT_UNITS : BIT_UNITS : options.binary - ? BIBYTE_UNITS - : BYTE_UNITS; + ? BIBYTE_UNITS + : BYTE_UNITS; if (value === 0) return `0 ${sizes[0]}/s`; diff --git a/package.json b/package.json index 7f0fbdf7..07be3d1d 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "eslint-plugin-react-hooks": "^5.1.0", "postcss": "^8.5.2", "prettier": "^3.5.2", + "prettier-plugin-organize-imports": "^4.1.0", "tailwind-scrollbar": "^4.0.1", "tailwindcss": "^4.0.9", "typescript": "^5.7.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2848e239..40069cad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -101,10 +101,6 @@ importers: xml-js: specifier: ^1.6.11 version: 1.6.11 - optionalDependencies: - osx-temperature-sensor: - specifier: ^1.0.8 - version: 1.0.8 devDependencies: '@tailwindcss/forms': specifier: ^0.5.10 @@ -142,6 +138,9 @@ importers: prettier: specifier: ^3.5.2 version: 3.5.2 + prettier-plugin-organize-imports: + specifier: ^4.1.0 + version: 4.1.0(prettier@3.5.2)(typescript@5.7.3) tailwind-scrollbar: specifier: ^4.0.1 version: 4.0.1(react@18.3.1)(tailwindcss@4.0.9) @@ -151,6 +150,10 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 + optionalDependencies: + osx-temperature-sensor: + specifier: ^1.0.8 + version: 1.0.8 packages: @@ -2144,6 +2147,16 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} + prettier-plugin-organize-imports@4.1.0: + resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} + peerDependencies: + prettier: '>=2.0' + typescript: '>=2.9' + vue-tsc: ^2.1.0 + peerDependenciesMeta: + vue-tsc: + optional: true + prettier@3.5.2: resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} engines: {node: '>=14'} @@ -4883,6 +4896,11 @@ snapshots: dependencies: fast-diff: 1.3.0 + prettier-plugin-organize-imports@4.1.0(prettier@3.5.2)(typescript@5.7.3): + dependencies: + prettier: 3.5.2 + typescript: 5.7.3 + prettier@3.5.2: {} pretty-bytes@6.1.1: {} diff --git a/src/components/bookmarks/group.jsx b/src/components/bookmarks/group.jsx index 726f54e8..2334dad5 100644 --- a/src/components/bookmarks/group.jsx +++ b/src/components/bookmarks/group.jsx @@ -1,10 +1,10 @@ -import { useRef, useEffect } from "react"; -import classNames from "classnames"; import { Disclosure, Transition } from "@headlessui/react"; -import { MdKeyboardArrowDown } from "react-icons/md"; -import ErrorBoundary from "components/errorboundry"; +import classNames from "classnames"; import List from "components/bookmarks/list"; +import ErrorBoundary from "components/errorboundry"; import ResolvedIcon from "components/resolvedicon"; +import { useEffect, useRef } from "react"; +import { MdKeyboardArrowDown } from "react-icons/md"; export default function BookmarksGroup({ bookmarks, diff --git a/src/components/bookmarks/item.jsx b/src/components/bookmarks/item.jsx index c9b84eac..7ea16bba 100644 --- a/src/components/bookmarks/item.jsx +++ b/src/components/bookmarks/item.jsx @@ -1,7 +1,7 @@ -import { useContext } from "react"; import classNames from "classnames"; -import { SettingsContext } from "utils/contexts/settings"; import ResolvedIcon from "components/resolvedicon"; +import { useContext } from "react"; +import { SettingsContext } from "utils/contexts/settings"; export default function Item({ bookmark, iconOnly = false }) { const description = bookmark.description ?? new URL(bookmark.href).hostname; diff --git a/src/components/favicon.jsx b/src/components/favicon.jsx index 8221c799..8961d655 100644 --- a/src/components/favicon.jsx +++ b/src/components/favicon.jsx @@ -1,6 +1,6 @@ /* eslint-disable @next/next/no-img-element */ /* eslint-disable jsx-a11y/alt-text */ -import { useRef, useEffect, useContext } from "react"; +import { useContext, useEffect, useRef } from "react"; import { ColorContext } from "utils/contexts/color"; import themes from "utils/styles/themes"; diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index e1f6bc09..14f0f4fb 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import { useEffect, useState, useRef, useCallback, useContext } from "react"; import classNames from "classnames"; +import { useCallback, useContext, useEffect, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; import useSWR from "swr"; import { SettingsContext } from "utils/contexts/settings"; @@ -53,7 +53,7 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea const result = results[currentItemIndex]; window.open( result.href, - newWindow ? "_blank" : result.target ?? searchProvider?.target ?? settings.target ?? "_blank", + newWindow ? "_blank" : (result.target ?? searchProvider?.target ?? settings.target ?? "_blank"), "noreferrer", ); } diff --git a/src/components/resolvedicon.jsx b/src/components/resolvedicon.jsx index eb2a5c0d..77ba9119 100644 --- a/src/components/resolvedicon.jsx +++ b/src/components/resolvedicon.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import Image from "next/image"; +import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; import { ThemeContext } from "utils/contexts/theme"; diff --git a/src/components/services/dropdown.jsx b/src/components/services/dropdown.jsx index 00b8a429..e8e11d97 100644 --- a/src/components/services/dropdown.jsx +++ b/src/components/services/dropdown.jsx @@ -1,7 +1,7 @@ -import { Fragment } from "react"; import { Menu, Transition } from "@headlessui/react"; -import { BiCog } from "react-icons/bi"; import classNames from "classnames"; +import { Fragment } from "react"; +import { BiCog } from "react-icons/bi"; export default function Dropdown({ options, value, setValue }) { return ( diff --git a/src/components/services/group.jsx b/src/components/services/group.jsx index 3e6327a4..cad7b5aa 100644 --- a/src/components/services/group.jsx +++ b/src/components/services/group.jsx @@ -1,9 +1,9 @@ -import { useRef, useEffect } from "react"; -import classNames from "classnames"; import { Disclosure, Transition } from "@headlessui/react"; -import { MdKeyboardArrowDown } from "react-icons/md"; -import List from "components/services/list"; +import classNames from "classnames"; import ResolvedIcon from "components/resolvedicon"; +import List from "components/services/list"; +import { useEffect, useRef } from "react"; +import { MdKeyboardArrowDown } from "react-icons/md"; import { columnMap } from "../../utils/layout/columns"; diff --git a/src/components/services/item.jsx b/src/components/services/item.jsx index 72b0fd50..8e851611 100644 --- a/src/components/services/item.jsx +++ b/src/components/services/item.jsx @@ -1,15 +1,15 @@ import classNames from "classnames"; +import ResolvedIcon from "components/resolvedicon"; import { useContext, useState } from "react"; +import { SettingsContext } from "utils/contexts/settings"; import Docker from "widgets/docker/component"; import Kubernetes from "widgets/kubernetes/component"; -import { SettingsContext } from "utils/contexts/settings"; -import ResolvedIcon from "components/resolvedicon"; -import Status from "./status"; -import Widget from "./widget"; +import KubernetesStatus from "./kubernetes-status"; import Ping from "./ping"; import SiteMonitor from "./site-monitor"; -import KubernetesStatus from "./kubernetes-status"; +import Status from "./status"; +import Widget from "./widget"; export default function Item({ service, groupName, useEqualHeights }) { const hasLink = service.href && service.href !== "#"; diff --git a/src/components/services/kubernetes-status.jsx b/src/components/services/kubernetes-status.jsx index a256a2df..e4ea958d 100644 --- a/src/components/services/kubernetes-status.jsx +++ b/src/components/services/kubernetes-status.jsx @@ -1,5 +1,5 @@ -import useSWR from "swr"; import { t } from "i18next"; +import useSWR from "swr"; export default function KubernetesStatus({ service, style }) { const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : ""; diff --git a/src/components/services/widget.jsx b/src/components/services/widget.jsx index bda638a4..6e3a6360 100644 --- a/src/components/services/widget.jsx +++ b/src/components/services/widget.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import ErrorBoundary from "components/errorboundry"; +import { useTranslation } from "next-i18next"; import components from "widgets/components"; diff --git a/src/components/services/widget/block.jsx b/src/components/services/widget/block.jsx index 8cd74aad..720140cc 100644 --- a/src/components/services/widget/block.jsx +++ b/src/components/services/widget/block.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import classNames from "classnames"; +import { useTranslation } from "next-i18next"; export default function Block({ value, label }) { const { t } = useTranslation(); diff --git a/src/components/tab.jsx b/src/components/tab.jsx index 2c3984c9..dc183fe4 100644 --- a/src/components/tab.jsx +++ b/src/components/tab.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import classNames from "classnames"; +import { useContext } from "react"; import { TabContext } from "utils/contexts/tab"; function slugify(tabName) { diff --git a/src/components/toggles/color.jsx b/src/components/toggles/color.jsx index 60cc8de8..7ea700ab 100644 --- a/src/components/toggles/color.jsx +++ b/src/components/toggles/color.jsx @@ -1,7 +1,7 @@ -import { useContext, Fragment } from "react"; -import { IoColorPalette } from "react-icons/io5"; import { Popover, Transition } from "@headlessui/react"; import classNames from "classnames"; +import { Fragment, useContext } from "react"; +import { IoColorPalette } from "react-icons/io5"; import { ColorContext } from "utils/contexts/color"; const colors = [ diff --git a/src/components/version.jsx b/src/components/version.jsx index b8ee1eb8..946fb0a9 100644 --- a/src/components/version.jsx +++ b/src/components/version.jsx @@ -1,8 +1,8 @@ +import { compareVersions, validate } from "compare-versions"; import cache from "memory-cache"; import { useTranslation } from "next-i18next"; -import useSWR from "swr"; -import { compareVersions, validate } from "compare-versions"; import { MdNewReleases } from "react-icons/md"; +import useSWR from "swr"; const LATEST_RELEASE_CACHE_KEY = "latestRelease"; diff --git a/src/components/widgets/datetime/datetime.jsx b/src/components/widgets/datetime/datetime.jsx index a7aec5da..b59cf809 100644 --- a/src/components/widgets/datetime/datetime.jsx +++ b/src/components/widgets/datetime/datetime.jsx @@ -1,5 +1,5 @@ -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import { useEffect, useState } from "react"; import Container from "../widget/container"; import Raw from "../widget/raw"; diff --git a/src/components/widgets/glances/glances.jsx b/src/components/widgets/glances/glances.jsx index 0803b88c..7f772808 100644 --- a/src/components/widgets/glances/glances.jsx +++ b/src/components/widgets/glances/glances.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; +import classNames from "classnames"; +import { useTranslation } from "next-i18next"; import { useContext } from "react"; import { FaMemory, FaRegClock, FaThermometerHalf } from "react-icons/fa"; import { FiCpu, FiHardDrive } from "react-icons/fi"; -import { useTranslation } from "next-i18next"; -import classNames from "classnames"; +import useSWR from "swr"; import { SettingsContext } from "utils/contexts/settings"; import Error from "../widget/error"; diff --git a/src/components/widgets/kubernetes/kubernetes.jsx b/src/components/widgets/kubernetes/kubernetes.jsx index f7b101c7..50b173bc 100644 --- a/src/components/widgets/kubernetes/kubernetes.jsx +++ b/src/components/widgets/kubernetes/kubernetes.jsx @@ -1,8 +1,8 @@ -import useSWR from "swr"; import { useTranslation } from "next-i18next"; +import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import Raw from "../widget/raw"; import Node from "./node"; diff --git a/src/components/widgets/kubernetes/node.jsx b/src/components/widgets/kubernetes/node.jsx index ba8f8b77..aebb40f2 100644 --- a/src/components/widgets/kubernetes/node.jsx +++ b/src/components/widgets/kubernetes/node.jsx @@ -1,7 +1,7 @@ +import { useTranslation } from "next-i18next"; import { FaMemory } from "react-icons/fa"; import { FiAlertTriangle, FiCpu, FiServer } from "react-icons/fi"; import { SiKubernetes } from "react-icons/si"; -import { useTranslation } from "next-i18next"; import UsageBar from "../resources/usage-bar"; diff --git a/src/components/widgets/longhorn/longhorn.jsx b/src/components/widgets/longhorn/longhorn.jsx index 22047e2c..235c77d0 100644 --- a/src/components/widgets/longhorn/longhorn.jsx +++ b/src/components/widgets/longhorn/longhorn.jsx @@ -1,7 +1,7 @@ import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import Raw from "../widget/raw"; import Node from "./node"; diff --git a/src/components/widgets/openmeteo/openmeteo.jsx b/src/components/widgets/openmeteo/openmeteo.jsx index 4d3e7e89..a46f53ab 100644 --- a/src/components/widgets/openmeteo/openmeteo.jsx +++ b/src/components/widgets/openmeteo/openmeteo.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/openmeteo-condition-map"; import Container from "../widget/container"; import ContainerButton from "../widget/container_button"; -import WidgetIcon from "../widget/widget_icon"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; -import mapIcon from "../../../utils/weather/openmeteo-condition-map"; +import WidgetIcon from "../widget/widget_icon"; function Widget({ options }) { const { t } = useTranslation(); diff --git a/src/components/widgets/openweathermap/weather.jsx b/src/components/widgets/openweathermap/weather.jsx index df0280e3..3336ed4f 100644 --- a/src/components/widgets/openweathermap/weather.jsx +++ b/src/components/widgets/openweathermap/weather.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/owm-condition-map"; import Container from "../widget/container"; import ContainerButton from "../widget/container_button"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; import WidgetIcon from "../widget/widget_icon"; -import mapIcon from "../../../utils/weather/owm-condition-map"; function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/resources/cpu.jsx b/src/components/widgets/resources/cpu.jsx index 1963637d..1bea4af9 100644 --- a/src/components/widgets/resources/cpu.jsx +++ b/src/components/widgets/resources/cpu.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FiCpu } from "react-icons/fi"; import { useTranslation } from "next-i18next"; +import { FiCpu } from "react-icons/fi"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Cpu({ expanded, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/cputemp.jsx b/src/components/widgets/resources/cputemp.jsx index ef994c65..248cd396 100644 --- a/src/components/widgets/resources/cputemp.jsx +++ b/src/components/widgets/resources/cputemp.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaThermometerHalf } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaThermometerHalf } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; function convertToFahrenheit(t) { return (t * 9) / 5 + 32; diff --git a/src/components/widgets/resources/disk.jsx b/src/components/widgets/resources/disk.jsx index 15da7780..d5706ba5 100644 --- a/src/components/widgets/resources/disk.jsx +++ b/src/components/widgets/resources/disk.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FiHardDrive } from "react-icons/fi"; import { useTranslation } from "next-i18next"; +import { FiHardDrive } from "react-icons/fi"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Disk({ options, expanded, diskUnits, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/memory.jsx b/src/components/widgets/resources/memory.jsx index 155b7ecb..a8c82cbf 100644 --- a/src/components/widgets/resources/memory.jsx +++ b/src/components/widgets/resources/memory.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaMemory } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaMemory } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Memory({ expanded, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/network.jsx b/src/components/widgets/resources/network.jsx index a2a3acac..48286030 100644 --- a/src/components/widgets/resources/network.jsx +++ b/src/components/widgets/resources/network.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaNetworkWired } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaNetworkWired } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Network({ options, refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/resources/resources.jsx b/src/components/widgets/resources/resources.jsx index db26caa7..1002f98c 100644 --- a/src/components/widgets/resources/resources.jsx +++ b/src/components/widgets/resources/resources.jsx @@ -1,12 +1,12 @@ import Container from "../widget/container"; import Raw from "../widget/raw"; -import Disk from "./disk"; import Cpu from "./cpu"; -import Memory from "./memory"; import CpuTemp from "./cputemp"; -import Uptime from "./uptime"; +import Disk from "./disk"; +import Memory from "./memory"; import Network from "./network"; +import Uptime from "./uptime"; export default function Resources({ options }) { const { expanded, units, diskUnits, tempmin, tempmax } = options; diff --git a/src/components/widgets/resources/uptime.jsx b/src/components/widgets/resources/uptime.jsx index 2fac0fcd..f21634c2 100644 --- a/src/components/widgets/resources/uptime.jsx +++ b/src/components/widgets/resources/uptime.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { FaRegClock } from "react-icons/fa"; import { useTranslation } from "next-i18next"; +import { FaRegClock } from "react-icons/fa"; +import useSWR from "swr"; -import Resource from "../widget/resource"; import Error from "../widget/error"; +import Resource from "../widget/resource"; export default function Uptime({ refresh = 1500 }) { const { t } = useTranslation(); diff --git a/src/components/widgets/search/search.jsx b/src/components/widgets/search/search.jsx index e0564c48..6699a374 100644 --- a/src/components/widgets/search/search.jsx +++ b/src/components/widgets/search/search.jsx @@ -1,10 +1,10 @@ -import { useState, useEffect, Fragment } from "react"; -import { useTranslation } from "next-i18next"; -import { FiSearch } from "react-icons/fi"; -import { SiDuckduckgo, SiGoogle, SiBaidu, SiBrave } from "react-icons/si"; -import { BiLogoBing } from "react-icons/bi"; -import { Listbox, Transition, Combobox } from "@headlessui/react"; +import { Combobox, Listbox, Transition } from "@headlessui/react"; import classNames from "classnames"; +import { useTranslation } from "next-i18next"; +import { Fragment, useEffect, useState } from "react"; +import { BiLogoBing } from "react-icons/bi"; +import { FiSearch } from "react-icons/fi"; +import { SiBaidu, SiBrave, SiDuckduckgo, SiGoogle } from "react-icons/si"; import ContainerForm from "../widget/container_form"; import Raw from "../widget/raw"; diff --git a/src/components/widgets/stocks/stocks.jsx b/src/components/widgets/stocks/stocks.jsx index 1a9018d3..e6657878 100644 --- a/src/components/widgets/stocks/stocks.jsx +++ b/src/components/widgets/stocks/stocks.jsx @@ -1,13 +1,13 @@ -import useSWR from "swr"; -import { useState } from "react"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; import { FaChartLine } from "react-icons/fa6"; +import useSWR from "swr"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; -import WidgetIcon from "../widget/widget_icon"; import Raw from "../widget/raw"; +import WidgetIcon from "../widget/widget_icon"; export default function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/unifi_console/unifi_console.jsx b/src/components/widgets/unifi_console/unifi_console.jsx index 5295dbb7..09e6952f 100644 --- a/src/components/widgets/unifi_console/unifi_console.jsx +++ b/src/components/widgets/unifi_console/unifi_console.jsx @@ -1,13 +1,13 @@ -import { BiError, BiWifi, BiCheckCircle, BiXCircle, BiNetworkChart } from "react-icons/bi"; -import { MdSettingsEthernet } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { BiCheckCircle, BiError, BiNetworkChart, BiWifi, BiXCircle } from "react-icons/bi"; +import { MdSettingsEthernet } from "react-icons/md"; import { SiUbiquiti } from "react-icons/si"; -import Error from "../widget/error"; import Container from "../widget/container"; +import Error from "../widget/error"; +import PrimaryText from "../widget/primary_text"; import Raw from "../widget/raw"; import WidgetIcon from "../widget/widget_icon"; -import PrimaryText from "../widget/primary_text"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/components/widgets/weather/weather.jsx b/src/components/widgets/weather/weather.jsx index 4ebb08c5..98768963 100644 --- a/src/components/widgets/weather/weather.jsx +++ b/src/components/widgets/weather/weather.jsx @@ -1,16 +1,16 @@ -import useSWR from "swr"; -import { useState } from "react"; -import { WiCloudDown } from "react-icons/wi"; -import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { useTranslation } from "next-i18next"; +import { useState } from "react"; +import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; +import { WiCloudDown } from "react-icons/wi"; +import useSWR from "swr"; -import Error from "../widget/error"; +import mapIcon from "../../../utils/weather/condition-map"; import Container from "../widget/container"; +import ContainerButton from "../widget/container_button"; +import Error from "../widget/error"; import PrimaryText from "../widget/primary_text"; import SecondaryText from "../widget/secondary_text"; import WidgetIcon from "../widget/widget_icon"; -import ContainerButton from "../widget/container_button"; -import mapIcon from "../../../utils/weather/condition-map"; function Widget({ options }) { const { t, i18n } = useTranslation(); diff --git a/src/components/widgets/widget.jsx b/src/components/widgets/widget.jsx index 6cb48fde..ebc706ac 100644 --- a/src/components/widgets/widget.jsx +++ b/src/components/widgets/widget.jsx @@ -1,5 +1,5 @@ -import dynamic from "next/dynamic"; import ErrorBoundary from "components/errorboundry"; +import dynamic from "next/dynamic"; const widgetMappings = { weatherapi: dynamic(() => import("components/widgets/weather/weather")), diff --git a/src/components/widgets/widget/container.jsx b/src/components/widgets/widget/container.jsx index ae06d8ba..fe6397e0 100644 --- a/src/components/widgets/widget/container.jsx +++ b/src/components/widgets/widget/container.jsx @@ -2,10 +2,10 @@ import classNames from "classnames"; import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; -import WidgetIcon from "./widget_icon"; import PrimaryText from "./primary_text"; -import SecondaryText from "./secondary_text"; import Raw from "./raw"; +import SecondaryText from "./secondary_text"; +import WidgetIcon from "./widget_icon"; export function getAllClasses(options, additionalClassNames = "") { if (options?.style?.header === "boxedWidgets") { diff --git a/src/components/widgets/widget/container_button.jsx b/src/components/widgets/widget/container_button.jsx index a6379081..e0802511 100644 --- a/src/components/widgets/widget/container_button.jsx +++ b/src/components/widgets/widget/container_button.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerButton({ children = [], options, additionalClassNames = "", callback }) { return ( diff --git a/src/components/widgets/widget/container_form.jsx b/src/components/widgets/widget/container_form.jsx index 68cbd64b..a9afef3a 100644 --- a/src/components/widgets/widget/container_form.jsx +++ b/src/components/widgets/widget/container_form.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerForm({ children = [], options, additionalClassNames = "", callback }) { return ( diff --git a/src/components/widgets/widget/container_link.jsx b/src/components/widgets/widget/container_link.jsx index 6f157875..a36f311c 100644 --- a/src/components/widgets/widget/container_link.jsx +++ b/src/components/widgets/widget/container_link.jsx @@ -1,4 +1,4 @@ -import { getAllClasses, getInnerBlock, getBottomBlock } from "./container"; +import { getAllClasses, getBottomBlock, getInnerBlock } from "./container"; export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) { return ( diff --git a/src/components/widgets/widget/resources.jsx b/src/components/widgets/widget/resources.jsx index 2f594942..b9a48a41 100644 --- a/src/components/widgets/widget/resources.jsx +++ b/src/components/widgets/widget/resources.jsx @@ -1,8 +1,8 @@ import classNames from "classnames"; import ContainerLink from "./container_link"; -import Resource from "./resource"; import Raw from "./raw"; +import Resource from "./resource"; import WidgetLabel from "./widget_label"; export default function Resources({ options, children, target, additionalClassNames }) { diff --git a/src/pages/_app.jsx b/src/pages/_app.jsx index c5465a80..8e88f6b2 100644 --- a/src/pages/_app.jsx +++ b/src/pages/_app.jsx @@ -1,14 +1,14 @@ /* eslint-disable react/jsx-props-no-spreading */ -import { SWRConfig } from "swr"; import { appWithTranslation } from "next-i18next"; import Head from "next/head"; import "styles/globals.css"; -import "styles/theme.css"; import "styles/manrope.css"; +import "styles/theme.css"; +import { SWRConfig } from "swr"; import { ColorProvider } from "utils/contexts/color"; -import { ThemeProvider } from "utils/contexts/theme"; import { SettingsProvider } from "utils/contexts/settings"; import { TabProvider } from "utils/contexts/tab"; +import { ThemeProvider } from "utils/contexts/theme"; import nextI18nextConfig from "../../next-i18next.config"; diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx index 31083438..ece38aec 100644 --- a/src/pages/_document.jsx +++ b/src/pages/_document.jsx @@ -1,4 +1,4 @@ -import { Html, Head, Main, NextScript } from "next/document"; +import { Head, Html, Main, NextScript } from "next/document"; export default function Document() { return ( diff --git a/src/pages/api/config/[path].js b/src/pages/api/config/[path].js index 6cb04698..b69ddff5 100644 --- a/src/pages/api/config/[path].js +++ b/src/pages/api/config/[path].js @@ -1,5 +1,5 @@ -import path from "path"; import fs from "fs"; +import path from "path"; import { CONF_DIR } from "utils/config/config"; import createLogger from "utils/logger"; diff --git a/src/pages/api/hash.js b/src/pages/api/hash.js index 992f9ea6..33fb4ef5 100644 --- a/src/pages/api/hash.js +++ b/src/pages/api/hash.js @@ -1,6 +1,6 @@ -import { join } from "path"; import { createHash } from "crypto"; import { readFileSync } from "fs"; +import { join } from "path"; import checkAndCopyConfig, { CONF_DIR } from "utils/config/config"; diff --git a/src/pages/api/releases.js b/src/pages/api/releases.js index 372ace9d..01d0e8a5 100644 --- a/src/pages/api/releases.js +++ b/src/pages/api/releases.js @@ -1,5 +1,5 @@ -import { cachedRequest } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { cachedRequest } from "utils/proxy/http"; const logger = createLogger("releases"); diff --git a/src/pages/api/search/searchSuggestion.js b/src/pages/api/search/searchSuggestion.js index 209d1f2c..13f3f301 100644 --- a/src/pages/api/search/searchSuggestion.js +++ b/src/pages/api/search/searchSuggestion.js @@ -1,8 +1,8 @@ import { searchProviders } from "components/widgets/search/search"; import { getSettings } from "utils/config/config"; -import { cachedRequest } from "utils/proxy/http"; import { widgetsFromConfig } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { query, providerName } = req.query; diff --git a/src/pages/api/services/proxy.js b/src/pages/api/services/proxy.js index 3f8adc88..0cdf806f 100644 --- a/src/pages/api/services/proxy.js +++ b/src/pages/api/services/proxy.js @@ -1,9 +1,9 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import createLogger from "utils/logger"; -import genericProxyHandler from "utils/proxy/handlers/generic"; -import widgets from "widgets/widgets"; -import calendarProxyHandler from "widgets/calendar/proxy"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; +import calendarProxyHandler from "widgets/calendar/proxy"; +import widgets from "widgets/widgets"; const logger = createLogger("servicesProxy"); diff --git a/src/pages/api/widgets/glances.js b/src/pages/api/widgets/glances.js index 199c133e..f0a3a7d9 100644 --- a/src/pages/api/widgets/glances.js +++ b/src/pages/api/widgets/glances.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("glances"); diff --git a/src/pages/api/widgets/longhorn.js b/src/pages/api/widgets/longhorn.js index 9126e937..c45086bc 100644 --- a/src/pages/api/widgets/longhorn.js +++ b/src/pages/api/widgets/longhorn.js @@ -1,6 +1,6 @@ -import { httpProxy } from "../../../utils/proxy/http"; -import createLogger from "../../../utils/logger"; import { getSettings } from "../../../utils/config/config"; +import createLogger from "../../../utils/logger"; +import { httpProxy } from "../../../utils/proxy/http"; const logger = createLogger("longhorn"); diff --git a/src/pages/api/widgets/openweathermap.js b/src/pages/api/widgets/openweathermap.js index 3bdc7a82..993ee1f5 100644 --- a/src/pages/api/widgets/openweathermap.js +++ b/src/pages/api/widgets/openweathermap.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { latitude, longitude, units, provider, cache, lang, index } = req.query; diff --git a/src/pages/api/widgets/stocks.js b/src/pages/api/widgets/stocks.js index 4e9f3f55..77881ad7 100644 --- a/src/pages/api/widgets/stocks.js +++ b/src/pages/api/widgets/stocks.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import createLogger from "utils/logger"; +import { cachedRequest } from "utils/proxy/http"; const logger = createLogger("stocks"); diff --git a/src/pages/api/widgets/weather.js b/src/pages/api/widgets/weather.js index 9e63e48d..78418f74 100644 --- a/src/pages/api/widgets/weather.js +++ b/src/pages/api/widgets/weather.js @@ -1,6 +1,6 @@ -import { cachedRequest } from "utils/proxy/http"; import { getSettings } from "utils/config/config"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; +import { cachedRequest } from "utils/proxy/http"; export default async function handler(req, res) { const { latitude, longitude, provider, cache, lang, index } = req.query; diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 78702796..f8d48fdf 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,31 +1,31 @@ /* eslint-disable react/no-array-index-key */ -import useSWR, { SWRConfig } from "swr"; -import Head from "next/head"; -import Script from "next/script"; -import dynamic from "next/dynamic"; import classNames from "classnames"; -import { useTranslation } from "next-i18next"; -import { useEffect, useContext, useState, useMemo } from "react"; -import { BiError } from "react-icons/bi"; -import { serverSideTranslations } from "next-i18next/serverSideTranslations"; -import { useRouter } from "next/router"; -import Tab, { slugifyAndEncode } from "components/tab"; -import ServicesGroup from "components/services/group"; import BookmarksGroup from "components/bookmarks/group"; -import Widget from "components/widgets/widget"; -import Revalidate from "components/toggles/revalidate"; -import { ColorContext } from "utils/contexts/color"; -import { ThemeContext } from "utils/contexts/theme"; -import { SettingsContext } from "utils/contexts/settings"; -import { TabContext } from "utils/contexts/tab"; import ErrorBoundary from "components/errorboundry"; import QuickLaunch from "components/quicklaunch"; +import ServicesGroup from "components/services/group"; +import Tab, { slugifyAndEncode } from "components/tab"; +import Revalidate from "components/toggles/revalidate"; +import Widget from "components/widgets/widget"; +import { useTranslation } from "next-i18next"; +import { serverSideTranslations } from "next-i18next/serverSideTranslations"; +import dynamic from "next/dynamic"; +import Head from "next/head"; +import { useRouter } from "next/router"; +import Script from "next/script"; +import { useContext, useEffect, useMemo, useState } from "react"; +import { BiError } from "react-icons/bi"; +import useSWR, { SWRConfig } from "swr"; +import { ColorContext } from "utils/contexts/color"; +import { SettingsContext } from "utils/contexts/settings"; +import { TabContext } from "utils/contexts/tab"; +import { ThemeContext } from "utils/contexts/theme"; import { bookmarksResponse, servicesResponse, widgetsResponse } from "utils/config/api-response"; -import themes from "utils/styles/themes"; import { getSettings } from "utils/config/config"; import useWindowFocus from "utils/hooks/window-focus"; import createLogger from "utils/logger"; +import themes from "utils/styles/themes"; const ThemeToggle = dynamic(() => import("components/toggles/theme"), { ssr: false, diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index 03f155fb..4691f9bc 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -4,13 +4,13 @@ import path from "path"; import yaml from "js-yaml"; -import checkAndCopyConfig, { getSettings, substituteEnvironmentVars, CONF_DIR } from "utils/config/config"; +import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config"; import { + cleanServiceGroups, + findGroupByName, servicesFromConfig, servicesFromDocker, - cleanServiceGroups, servicesFromKubernetes, - findGroupByName, } from "utils/config/service-helpers"; import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers"; diff --git a/src/utils/config/config.js b/src/utils/config/config.js index 18dedf62..3f688842 100644 --- a/src/utils/config/config.js +++ b/src/utils/config/config.js @@ -1,9 +1,9 @@ /* eslint-disable no-console */ -import { join } from "path"; import { copyFileSync, existsSync, mkdirSync, readFileSync } from "fs"; +import { join } from "path"; -import cache from "memory-cache"; import yaml from "js-yaml"; +import cache from "memory-cache"; const cacheKey = "homepageEnvironmentVariables"; const homepageVarPrefix = "HOMEPAGE_VAR_"; diff --git a/src/utils/config/docker.js b/src/utils/config/docker.js index 6ea728e9..ed1d3347 100644 --- a/src/utils/config/docker.js +++ b/src/utils/config/docker.js @@ -1,5 +1,5 @@ -import path from "path"; import { readFileSync } from "fs"; +import path from "path"; import yaml from "js-yaml"; diff --git a/src/utils/config/kubernetes.js b/src/utils/config/kubernetes.js index 6d2fc17b..680c408e 100644 --- a/src/utils/config/kubernetes.js +++ b/src/utils/config/kubernetes.js @@ -1,8 +1,8 @@ -import path from "path"; import { readFileSync } from "fs"; +import path from "path"; +import { ApiextensionsV1Api, KubeConfig } from "@kubernetes/client-node"; import yaml from "js-yaml"; -import { KubeConfig, ApiextensionsV1Api } from "@kubernetes/client-node"; import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config"; diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index 38e7a2bf..c3df6579 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -1,15 +1,15 @@ import { promises as fs } from "fs"; import path from "path"; -import yaml from "js-yaml"; import Docker from "dockerode"; +import yaml from "js-yaml"; -import createLogger from "utils/logger"; import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config"; import getDockerArguments from "utils/config/docker"; -import kubernetes from "utils/kubernetes/export"; import { getKubeConfig } from "utils/config/kubernetes"; import * as shvl from "utils/config/shvl"; +import kubernetes from "utils/kubernetes/export"; +import createLogger from "utils/logger"; const logger = createLogger("service-helpers"); diff --git a/src/utils/contexts/color.jsx b/src/utils/contexts/color.jsx index d7d985f0..bc16d605 100644 --- a/src/utils/contexts/color.jsx +++ b/src/utils/contexts/color.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useEffect, useMemo } from "react"; +import { createContext, useEffect, useMemo, useState } from "react"; let lastColor = false; diff --git a/src/utils/contexts/settings.jsx b/src/utils/contexts/settings.jsx index d6993b14..76451953 100644 --- a/src/utils/contexts/settings.jsx +++ b/src/utils/contexts/settings.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useMemo } from "react"; +import { createContext, useMemo, useState } from "react"; export const SettingsContext = createContext(); diff --git a/src/utils/contexts/tab.jsx b/src/utils/contexts/tab.jsx index 8cd5d520..2a3d3457 100644 --- a/src/utils/contexts/tab.jsx +++ b/src/utils/contexts/tab.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useMemo } from "react"; +import { createContext, useMemo, useState } from "react"; export const TabContext = createContext(); diff --git a/src/utils/contexts/theme.jsx b/src/utils/contexts/theme.jsx index 85d613fc..385eeaa2 100644 --- a/src/utils/contexts/theme.jsx +++ b/src/utils/contexts/theme.jsx @@ -1,4 +1,4 @@ -import { createContext, useState, useEffect, useMemo } from "react"; +import { createContext, useEffect, useMemo, useState } from "react"; const getInitialTheme = () => { if (typeof window !== "undefined" && window.localStorage) { diff --git a/src/utils/hooks/window-focus.js b/src/utils/hooks/window-focus.js index 3ad57ad0..a221e48e 100644 --- a/src/utils/hooks/window-focus.js +++ b/src/utils/hooks/window-focus.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useEffect, useState } from "react"; const hasFocus = () => typeof document !== "undefined" && document.hasFocus(); diff --git a/src/utils/kubernetes/export.js b/src/utils/kubernetes/export.js index ba41593e..ae53aaca 100644 --- a/src/utils/kubernetes/export.js +++ b/src/utils/kubernetes/export.js @@ -1,7 +1,7 @@ -import listIngress from "utils/kubernetes/ingress-list"; -import listTraefikIngress from "utils/kubernetes/traefik-list"; import listHttpRoute from "utils/kubernetes/httproute-list"; -import { isDiscoverable, constructedServiceFromResource } from "utils/kubernetes/resource-helpers"; +import listIngress from "utils/kubernetes/ingress-list"; +import { constructedServiceFromResource, isDiscoverable } from "utils/kubernetes/resource-helpers"; +import listTraefikIngress from "utils/kubernetes/traefik-list"; const kubernetes = { listIngress, diff --git a/src/utils/kubernetes/ingress-list.js b/src/utils/kubernetes/ingress-list.js index 49b5d667..1cd9ca95 100644 --- a/src/utils/kubernetes/ingress-list.js +++ b/src/utils/kubernetes/ingress-list.js @@ -1,6 +1,6 @@ import { NetworkingV1Api } from "@kubernetes/client-node"; -import { getKubernetes, getKubeConfig } from "utils/config/kubernetes"; +import { getKubeConfig, getKubernetes } from "utils/config/kubernetes"; import createLogger from "utils/logger"; const logger = createLogger("ingress-list"); diff --git a/src/utils/kubernetes/resource-helpers.js b/src/utils/kubernetes/resource-helpers.js index 1b59526a..0ac143ac 100644 --- a/src/utils/kubernetes/resource-helpers.js +++ b/src/utils/kubernetes/resource-helpers.js @@ -1,15 +1,15 @@ import { CustomObjectsApi } from "@kubernetes/client-node"; +import { substituteEnvironmentVars } from "utils/config/config"; import { - getKubeConfig, ANNOTATION_BASE, ANNOTATION_WIDGET_BASE, + getKubeConfig, HTTPROUTE_API_GROUP, HTTPROUTE_API_VERSION, } from "utils/config/kubernetes"; -import { substituteEnvironmentVars } from "utils/config/config"; -import createLogger from "utils/logger"; import * as shvl from "utils/config/shvl"; +import createLogger from "utils/logger"; const logger = createLogger("resource-helpers"); const kc = getKubeConfig(); diff --git a/src/utils/kubernetes/traefik-list.js b/src/utils/kubernetes/traefik-list.js index 0368629a..f6e07241 100644 --- a/src/utils/kubernetes/traefik-list.js +++ b/src/utils/kubernetes/traefik-list.js @@ -1,6 +1,6 @@ import { CustomObjectsApi } from "@kubernetes/client-node"; -import { getKubernetes, getKubeConfig, checkCRD, ANNOTATION_BASE } from "utils/config/kubernetes"; +import { ANNOTATION_BASE, checkCRD, getKubeConfig, getKubernetes } from "utils/config/kubernetes"; import createLogger from "utils/logger"; const logger = createLogger("traefik-list"); diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index 056e919f..d0dbc2d6 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -1,9 +1,9 @@ -import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; -import validateWidgetData from "utils/proxy/validate-widget-data"; -import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import { getSettings } from "utils/config/config"; +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import validateWidgetData from "utils/proxy/validate-widget-data"; import widgets from "widgets/widgets"; const logger = createLogger("credentialedProxyHandler"); diff --git a/src/utils/proxy/handlers/generic.js b/src/utils/proxy/handlers/generic.js index 4a71f704..1914114c 100644 --- a/src/utils/proxy/handlers/generic.js +++ b/src/utils/proxy/handlers/generic.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; -import validateWidgetData from "utils/proxy/validate-widget-data"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { formatApiCall, sanitizeErrorURL } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; +import validateWidgetData from "utils/proxy/validate-widget-data"; import widgets from "widgets/widgets"; const logger = createLogger("genericProxyHandler"); diff --git a/src/utils/proxy/handlers/jsonrpc.js b/src/utils/proxy/handlers/jsonrpc.js index f9fb1883..bdb10e02 100644 --- a/src/utils/proxy/handlers/jsonrpc.js +++ b/src/utils/proxy/handlers/jsonrpc.js @@ -1,9 +1,9 @@ import { JSONRPCClient, JSONRPCErrorException } from "json-rpc-2.0"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const logger = createLogger("jsonrpcProxyHandler"); diff --git a/src/utils/proxy/handlers/synology.js b/src/utils/proxy/handlers/synology.js index 030e53ba..6fe98dce 100644 --- a/src/utils/proxy/handlers/synology.js +++ b/src/utils/proxy/handlers/synology.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { asJson, formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import widgets from "widgets/widgets"; const INFO_ENDPOINT = "{url}/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query"; diff --git a/src/utils/proxy/http.js b/src/utils/proxy/http.js index f8d2dcce..1a22a7f7 100644 --- a/src/utils/proxy/http.js +++ b/src/utils/proxy/http.js @@ -5,8 +5,8 @@ import { createUnzip, constants as zlibConstants } from "node:zlib"; import { http, https } from "follow-redirects"; import cache from "memory-cache"; -import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import { sanitizeErrorURL } from "./api-helpers"; +import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import createLogger from "utils/logger"; diff --git a/src/utils/proxy/validate-widget-data.js b/src/utils/proxy/validate-widget-data.js index 8f865fe2..de2a3c4e 100644 --- a/src/utils/proxy/validate-widget-data.js +++ b/src/utils/proxy/validate-widget-data.js @@ -1,6 +1,6 @@ /* eslint-disable no-console */ -import widgets from "widgets/widgets"; import createLogger from "utils/logger"; +import widgets from "widgets/widgets"; const logger = createLogger("validateWidgetData"); diff --git a/src/widgets/adguard/component.jsx b/src/widgets/adguard/component.jsx index 6cb9175a..e5a7670a 100644 --- a/src/widgets/adguard/component.jsx +++ b/src/widgets/adguard/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/apcups/component.jsx b/src/widgets/apcups/component.jsx index c1c26b5c..85e621db 100644 --- a/src/widgets/apcups/component.jsx +++ b/src/widgets/apcups/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/apcups/proxy.js b/src/widgets/apcups/proxy.js index 8e1d7ffc..bf22730e 100644 --- a/src/widgets/apcups/proxy.js +++ b/src/widgets/apcups/proxy.js @@ -1,5 +1,5 @@ -import net from "node:net"; import { Buffer } from "node:buffer"; +import net from "node:net"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; diff --git a/src/widgets/argocd/component.jsx b/src/widgets/argocd/component.jsx index d4283acf..f61bed43 100644 --- a/src/widgets/argocd/component.jsx +++ b/src/widgets/argocd/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/atsumeru/component.jsx b/src/widgets/atsumeru/component.jsx index 2b87ac34..01cc8e46 100644 --- a/src/widgets/atsumeru/component.jsx +++ b/src/widgets/atsumeru/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/audiobookshelf/component.jsx b/src/widgets/audiobookshelf/component.jsx index 0444b6b4..b410e1a7 100755 --- a/src/widgets/audiobookshelf/component.jsx +++ b/src/widgets/audiobookshelf/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/audiobookshelf/proxy.js b/src/widgets/audiobookshelf/proxy.js index 1a89736b..afff3ba9 100644 --- a/src/widgets/audiobookshelf/proxy.js +++ b/src/widgets/audiobookshelf/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "audiobookshelfProxyHandler"; diff --git a/src/widgets/authentik/component.jsx b/src/widgets/authentik/component.jsx index d4446551..edf5ece1 100644 --- a/src/widgets/authentik/component.jsx +++ b/src/widgets/authentik/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/autobrr/component.jsx b/src/widgets/autobrr/component.jsx index a73a7d17..5454cd3c 100644 --- a/src/widgets/autobrr/component.jsx +++ b/src/widgets/autobrr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/azuredevops/component.jsx b/src/widgets/azuredevops/component.jsx index bfe9797f..7a36aab2 100644 --- a/src/widgets/azuredevops/component.jsx +++ b/src/widgets/azuredevops/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/bazarr/component.jsx b/src/widgets/bazarr/component.jsx index 120774fb..f79ec206 100644 --- a/src/widgets/bazarr/component.jsx +++ b/src/widgets/bazarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/bazarr/widget.js b/src/widgets/bazarr/widget.js index 5b89b2b4..c54e38ad 100644 --- a/src/widgets/bazarr/widget.js +++ b/src/widgets/bazarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/{endpoint}/wanted?apikey={key}", diff --git a/src/widgets/beszel/component.jsx b/src/widgets/beszel/component.jsx index a191c31f..e80a9fab 100644 --- a/src/widgets/beszel/component.jsx +++ b/src/widgets/beszel/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/beszel/proxy.js b/src/widgets/beszel/proxy.js index 078e22c3..96dfc913 100644 --- a/src/widgets/beszel/proxy.js +++ b/src/widgets/beszel/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "beszelProxyHandler"; const tokenCacheKey = `${proxyName}__token`; diff --git a/src/widgets/caddy/component.jsx b/src/widgets/caddy/component.jsx index 60e71e9e..1613760d 100644 --- a/src/widgets/caddy/component.jsx +++ b/src/widgets/caddy/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/calendar/agenda.jsx b/src/widgets/calendar/agenda.jsx index 6a3be031..cb00c1d2 100644 --- a/src/widgets/calendar/agenda.jsx +++ b/src/widgets/calendar/agenda.jsx @@ -1,5 +1,5 @@ -import { DateTime } from "luxon"; import classNames from "classnames"; +import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; import Event, { compareDateTimezone } from "./event"; diff --git a/src/widgets/calendar/component.jsx b/src/widgets/calendar/component.jsx index 56858fad..0647d4ad 100644 --- a/src/widgets/calendar/component.jsx +++ b/src/widgets/calendar/component.jsx @@ -1,12 +1,12 @@ -import { useEffect, useMemo, useState, useContext } from "react"; -import dynamic from "next/dynamic"; +import Container from "components/services/widget/container"; import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; +import dynamic from "next/dynamic"; +import { useContext, useEffect, useMemo, useState } from "react"; import { SettingsContext } from "utils/contexts/settings"; -import Monthly from "./monthly"; import Agenda from "./agenda"; +import Monthly from "./monthly"; const colorVariants = { // https://tailwindcss.com/docs/content-configuration#dynamic-class-names diff --git a/src/widgets/calendar/event.jsx b/src/widgets/calendar/event.jsx index 754c6ee9..6ea2e1ae 100644 --- a/src/widgets/calendar/event.jsx +++ b/src/widgets/calendar/event.jsx @@ -1,7 +1,7 @@ -import { useState } from "react"; -import { useTranslation } from "next-i18next"; -import { DateTime } from "luxon"; import classNames from "classnames"; +import { DateTime } from "luxon"; +import { useTranslation } from "next-i18next"; +import { useState } from "react"; import { IoMdCheckmarkCircleOutline } from "react-icons/io"; export default function Event({ event, colorVariants, showDate = false, showTime = false, showDateColumn = true }) { diff --git a/src/widgets/calendar/integrations/ical.jsx b/src/widgets/calendar/integrations/ical.jsx index 77729982..46217977 100644 --- a/src/widgets/calendar/integrations/ical.jsx +++ b/src/widgets/calendar/integrations/ical.jsx @@ -1,11 +1,11 @@ -import { DateTime } from "luxon"; import { parseString } from "cal-parser"; -import { useEffect } from "react"; +import { DateTime } from "luxon"; import { useTranslation } from "next-i18next"; +import { useEffect } from "react"; import { RRule } from "rrule"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; // https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781 function simpleHash(str) { diff --git a/src/widgets/calendar/integrations/lidarr.jsx b/src/widgets/calendar/integrations/lidarr.jsx index d4a6edbe..65ad1da2 100644 --- a/src/widgets/calendar/integrations/lidarr.jsx +++ b/src/widgets/calendar/integrations/lidarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: lidarrData, error: lidarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/integrations/radarr.jsx b/src/widgets/calendar/integrations/radarr.jsx index 945eadd9..9c8880a9 100644 --- a/src/widgets/calendar/integrations/radarr.jsx +++ b/src/widgets/calendar/integrations/radarr.jsx @@ -1,9 +1,9 @@ import { DateTime } from "luxon"; -import { useEffect } from "react"; import { useTranslation } from "next-i18next"; +import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { t } = useTranslation(); diff --git a/src/widgets/calendar/integrations/readarr.jsx b/src/widgets/calendar/integrations/readarr.jsx index 6ae919ef..4fe3872e 100644 --- a/src/widgets/calendar/integrations/readarr.jsx +++ b/src/widgets/calendar/integrations/readarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: readarrData, error: readarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/integrations/sonarr.jsx b/src/widgets/calendar/integrations/sonarr.jsx index 34cc679d..abdec328 100644 --- a/src/widgets/calendar/integrations/sonarr.jsx +++ b/src/widgets/calendar/integrations/sonarr.jsx @@ -1,8 +1,8 @@ import { DateTime } from "luxon"; import { useEffect } from "react"; -import useWidgetAPI from "../../../utils/proxy/use-widget-api"; import Error from "../../../components/services/widget/error"; +import useWidgetAPI from "../../../utils/proxy/use-widget-api"; export default function Integration({ config, params, setEvents, hideErrors = false }) { const { data: sonarrData, error: sonarrError } = useWidgetAPI(config, "calendar", { diff --git a/src/widgets/calendar/monthly.jsx b/src/widgets/calendar/monthly.jsx index 7313232f..4e870261 100644 --- a/src/widgets/calendar/monthly.jsx +++ b/src/widgets/calendar/monthly.jsx @@ -1,7 +1,7 @@ -import { useMemo } from "react"; -import { DateTime, Info } from "luxon"; import classNames from "classnames"; +import { DateTime, Info } from "luxon"; import { useTranslation } from "next-i18next"; +import { useMemo } from "react"; import Event, { compareDateTimezone } from "./event"; diff --git a/src/widgets/calendar/proxy.js b/src/widgets/calendar/proxy.js index d36f30c9..c98441ee 100644 --- a/src/widgets/calendar/proxy.js +++ b/src/widgets/calendar/proxy.js @@ -1,6 +1,6 @@ import getServiceWidget from "utils/config/service-helpers"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("calendarProxyHandler"); diff --git a/src/widgets/calibreweb/component.jsx b/src/widgets/calibreweb/component.jsx index c334d7d2..be8424e5 100644 --- a/src/widgets/calibreweb/component.jsx +++ b/src/widgets/calibreweb/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/changedetectionio/component.jsx b/src/widgets/changedetectionio/component.jsx index a08f38d9..d7d7272b 100644 --- a/src/widgets/changedetectionio/component.jsx +++ b/src/widgets/changedetectionio/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/channelsdvrserver/component.jsx b/src/widgets/channelsdvrserver/component.jsx index 42202c05..79ca3f14 100644 --- a/src/widgets/channelsdvrserver/component.jsx +++ b/src/widgets/channelsdvrserver/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/cloudflared/component.jsx b/src/widgets/cloudflared/component.jsx index 8825402c..790a5f34 100644 --- a/src/widgets/cloudflared/component.jsx +++ b/src/widgets/cloudflared/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/coinmarketcap/component.jsx b/src/widgets/coinmarketcap/component.jsx index 35a3401f..fd9c030f 100644 --- a/src/widgets/coinmarketcap/component.jsx +++ b/src/widgets/coinmarketcap/component.jsx @@ -1,9 +1,9 @@ -import { useState } from "react"; -import { useTranslation } from "next-i18next"; import classNames from "classnames"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import Dropdown from "components/services/dropdown"; +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { useState } from "react"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/crowdsec/component.jsx b/src/widgets/crowdsec/component.jsx index 5bc34d1a..f567ad70 100644 --- a/src/widgets/crowdsec/component.jsx +++ b/src/widgets/crowdsec/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/crowdsec/proxy.js b/src/widgets/crowdsec/proxy.js index 85803845..d3257fa6 100644 --- a/src/widgets/crowdsec/proxy.js +++ b/src/widgets/crowdsec/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "crowdsecProxyHandler"; diff --git a/src/widgets/customapi/component.jsx b/src/widgets/customapi/component.jsx index b651045f..50a371ad 100644 --- a/src/widgets/customapi/component.jsx +++ b/src/widgets/customapi/component.jsx @@ -1,10 +1,10 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import classNames from "classnames"; +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; -import useWidgetAPI from "utils/proxy/use-widget-api"; import * as shvl from "utils/config/shvl"; +import useWidgetAPI from "utils/proxy/use-widget-api"; function getValue(field, data) { let value = data; diff --git a/src/widgets/deluge/component.jsx b/src/widgets/deluge/component.jsx index 510340b7..eb6ddfaa 100644 --- a/src/widgets/deluge/component.jsx +++ b/src/widgets/deluge/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/deluge/proxy.js b/src/widgets/deluge/proxy.js index 0430a6ac..ef255160 100644 --- a/src/widgets/deluge/proxy.js +++ b/src/widgets/deluge/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import widgets from "widgets/widgets"; const logger = createLogger("delugeProxyHandler"); diff --git a/src/widgets/develancacheui/component.jsx b/src/widgets/develancacheui/component.jsx index 4fc184ef..61f608e1 100644 --- a/src/widgets/develancacheui/component.jsx +++ b/src/widgets/develancacheui/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/diskstation/component.jsx b/src/widgets/diskstation/component.jsx index 9c516af9..0ca0b8ae 100644 --- a/src/widgets/diskstation/component.jsx +++ b/src/widgets/diskstation/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/docker/component.jsx b/src/widgets/docker/component.jsx index 074ce1eb..6e05454f 100644 --- a/src/widgets/docker/component.jsx +++ b/src/widgets/docker/component.jsx @@ -1,9 +1,9 @@ -import useSWR from "swr"; -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import useSWR from "swr"; -import { calculateCPUPercent, calculateUsedMemory, calculateThroughput } from "./stats-helpers"; +import { calculateCPUPercent, calculateThroughput, calculateUsedMemory } from "./stats-helpers"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/downloadstation/component.jsx b/src/widgets/downloadstation/component.jsx index 0d9d8085..016f4953 100644 --- a/src/widgets/downloadstation/component.jsx +++ b/src/widgets/downloadstation/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx index 41220e22..88858da2 100644 --- a/src/widgets/emby/component.jsx +++ b/src/widgets/emby/component.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; -import { BsVolumeMuteFill, BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; -import { MdOutlineSmartDisplay } from "react-icons/md"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill, BsVolumeMuteFill } from "react-icons/bs"; +import { MdOutlineSmartDisplay } from "react-icons/md"; import { getURLSearchParams } from "utils/proxy/api-helpers"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/esphome/component.jsx b/src/widgets/esphome/component.jsx index 6ed1b7b1..e0f02089 100644 --- a/src/widgets/esphome/component.jsx +++ b/src/widgets/esphome/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/evcc/component.jsx b/src/widgets/evcc/component.jsx index 2f086902..d0debdc3 100644 --- a/src/widgets/evcc/component.jsx +++ b/src/widgets/evcc/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fileflows/component.jsx b/src/widgets/fileflows/component.jsx index 9b8e0794..fdc75c6e 100755 --- a/src/widgets/fileflows/component.jsx +++ b/src/widgets/fileflows/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/firefly/component.jsx b/src/widgets/firefly/component.jsx index baff2304..af236a80 100644 --- a/src/widgets/firefly/component.jsx +++ b/src/widgets/firefly/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/flood/component.jsx b/src/widgets/flood/component.jsx index 44c03fd3..92a2b61a 100644 --- a/src/widgets/flood/component.jsx +++ b/src/widgets/flood/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js index e0c10173..5e5335ae 100644 --- a/src/widgets/flood/proxy.js +++ b/src/widgets/flood/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("floodProxyHandler"); diff --git a/src/widgets/freshrss/component.jsx b/src/widgets/freshrss/component.jsx index c5029b8f..70833e1d 100644 --- a/src/widgets/freshrss/component.jsx +++ b/src/widgets/freshrss/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/freshrss/proxy.js b/src/widgets/freshrss/proxy.js index 881094bd..6168db86 100644 --- a/src/widgets/freshrss/proxy.js +++ b/src/widgets/freshrss/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "freshrssProxyHandler"; diff --git a/src/widgets/frigate/component.jsx b/src/widgets/frigate/component.jsx index a19a464a..ab67c461 100644 --- a/src/widgets/frigate/component.jsx +++ b/src/widgets/frigate/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index c557ece5..d7928c20 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index 20521560..c8c57fbc 100644 --- a/src/widgets/fritzbox/proxy.js +++ b/src/widgets/fritzbox/proxy.js @@ -2,9 +2,9 @@ import { xml2json } from "xml-js"; import { fritzboxDefaultFields } from "./component"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("fritzboxProxyHandler"); diff --git a/src/widgets/gamedig/component.jsx b/src/widgets/gamedig/component.jsx index 1c127538..5acd1b9c 100644 --- a/src/widgets/gamedig/component.jsx +++ b/src/widgets/gamedig/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gamedig/proxy.js b/src/widgets/gamedig/proxy.js index 731bb445..79d7fa02 100644 --- a/src/widgets/gamedig/proxy.js +++ b/src/widgets/gamedig/proxy.js @@ -1,7 +1,7 @@ import { GameDig } from "gamedig"; -import createLogger from "utils/logger"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const proxyName = "gamedigProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/gatus/component.jsx b/src/widgets/gatus/component.jsx index 668c0388..25aae239 100644 --- a/src/widgets/gatus/component.jsx +++ b/src/widgets/gatus/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/ghostfolio/component.jsx b/src/widgets/ghostfolio/component.jsx index 524e30d9..f2587586 100644 --- a/src/widgets/ghostfolio/component.jsx +++ b/src/widgets/ghostfolio/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gitea/component.jsx b/src/widgets/gitea/component.jsx index c45ded06..81b69d67 100644 --- a/src/widgets/gitea/component.jsx +++ b/src/widgets/gitea/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gitlab/component.jsx b/src/widgets/gitlab/component.jsx index a012ee12..4d2805ba 100644 --- a/src/widgets/gitlab/component.jsx +++ b/src/widgets/gitlab/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/component.jsx b/src/widgets/glances/component.jsx index bff31ac1..4ca0cc72 100644 --- a/src/widgets/glances/component.jsx +++ b/src/widgets/glances/component.jsx @@ -1,13 +1,13 @@ -import Memory from "./metrics/memory"; +import Containers from "./metrics/containers"; import Cpu from "./metrics/cpu"; -import Sensor from "./metrics/sensor"; -import Net from "./metrics/net"; -import Process from "./metrics/process"; import Disk from "./metrics/disk"; +import Fs from "./metrics/fs"; import GPU from "./metrics/gpu"; import Info from "./metrics/info"; -import Fs from "./metrics/fs"; -import Containers from "./metrics/containers"; +import Memory from "./metrics/memory"; +import Net from "./metrics/net"; +import Process from "./metrics/process"; +import Sensor from "./metrics/sensor"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/glances/components/chart.jsx b/src/widgets/glances/components/chart.jsx index 132fcc8e..b919a92d 100644 --- a/src/widgets/glances/components/chart.jsx +++ b/src/widgets/glances/components/chart.jsx @@ -1,5 +1,5 @@ import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; +import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; import CustomTooltip from "./custom_tooltip"; diff --git a/src/widgets/glances/components/chart_dual.jsx b/src/widgets/glances/components/chart_dual.jsx index 5fabe755..d6ec2076 100644 --- a/src/widgets/glances/components/chart_dual.jsx +++ b/src/widgets/glances/components/chart_dual.jsx @@ -1,5 +1,5 @@ import { PureComponent } from "react"; -import { AreaChart, Area, ResponsiveContainer, Tooltip } from "recharts"; +import { Area, AreaChart, ResponsiveContainer, Tooltip } from "recharts"; import CustomTooltip from "./custom_tooltip"; diff --git a/src/widgets/glances/components/container.jsx b/src/widgets/glances/components/container.jsx index 0b6fb5f2..7bcd5c46 100644 --- a/src/widgets/glances/components/container.jsx +++ b/src/widgets/glances/components/container.jsx @@ -1,5 +1,5 @@ -import { useContext } from "react"; import classNames from "classnames"; +import { useContext } from "react"; import { SettingsContext } from "utils/contexts/settings"; import Error from "./error"; diff --git a/src/widgets/glances/metrics/containers.jsx b/src/widgets/glances/metrics/containers.jsx index 4b7ac001..93ecbc28 100644 --- a/src/widgets/glances/metrics/containers.jsx +++ b/src/widgets/glances/metrics/containers.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; import ResolvedIcon from "components/resolvedicon"; +import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/cpu.jsx b/src/widgets/glances/metrics/cpu.jsx index e993fca9..3debf11a 100644 --- a/src/widgets/glances/metrics/cpu.jsx +++ b/src/widgets/glances/metrics/cpu.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/disk.jsx b/src/widgets/glances/metrics/disk.jsx index 0a459e07..69dd2d99 100644 --- a/src/widgets/glances/metrics/disk.jsx +++ b/src/widgets/glances/metrics/disk.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/fs.jsx b/src/widgets/glances/metrics/fs.jsx index 4dd238e0..317a781f 100644 --- a/src/widgets/glances/metrics/fs.jsx +++ b/src/widgets/glances/metrics/fs.jsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/gpu.jsx b/src/widgets/glances/metrics/gpu.jsx index 37b06ce3..7eab536c 100644 --- a/src/widgets/glances/metrics/gpu.jsx +++ b/src/widgets/glances/metrics/gpu.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/info.jsx b/src/widgets/glances/metrics/info.jsx index 5e969800..3c0ef429 100644 --- a/src/widgets/glances/metrics/info.jsx +++ b/src/widgets/glances/metrics/info.jsx @@ -1,7 +1,7 @@ import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/memory.jsx b/src/widgets/glances/metrics/memory.jsx index 8cfddb66..e5fbc350 100644 --- a/src/widgets/glances/metrics/memory.jsx +++ b/src/widgets/glances/metrics/memory.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/net.jsx b/src/widgets/glances/metrics/net.jsx index 372c4ec6..2bdd491c 100644 --- a/src/widgets/glances/metrics/net.jsx +++ b/src/widgets/glances/metrics/net.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/process.jsx b/src/widgets/glances/metrics/process.jsx index 06001e6e..ad3fee54 100644 --- a/src/widgets/glances/metrics/process.jsx +++ b/src/widgets/glances/metrics/process.jsx @@ -1,8 +1,8 @@ -import { useTranslation } from "next-i18next"; import ResolvedIcon from "components/resolvedicon"; +import { useTranslation } from "next-i18next"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/glances/metrics/sensor.jsx b/src/widgets/glances/metrics/sensor.jsx index 3cb38c1c..b5a16d10 100644 --- a/src/widgets/glances/metrics/sensor.jsx +++ b/src/widgets/glances/metrics/sensor.jsx @@ -1,9 +1,9 @@ -import dynamic from "next/dynamic"; -import { useState, useEffect } from "react"; import { useTranslation } from "next-i18next"; +import dynamic from "next/dynamic"; +import { useEffect, useState } from "react"; -import Container from "../components/container"; import Block from "../components/block"; +import Container from "../components/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gluetun/component.jsx b/src/widgets/gluetun/component.jsx index a834cb4c..f7128237 100644 --- a/src/widgets/gluetun/component.jsx +++ b/src/widgets/gluetun/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/gotify/component.jsx b/src/widgets/gotify/component.jsx index 57b6b9c7..6cf9cea9 100644 --- a/src/widgets/gotify/component.jsx +++ b/src/widgets/gotify/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/grafana/component.jsx b/src/widgets/grafana/component.jsx index 859be017..82d6e5c9 100755 --- a/src/widgets/grafana/component.jsx +++ b/src/widgets/grafana/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/hdhomerun/component.jsx b/src/widgets/hdhomerun/component.jsx index dd55013f..2532f92b 100644 --- a/src/widgets/hdhomerun/component.jsx +++ b/src/widgets/hdhomerun/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/headscale/component.jsx b/src/widgets/headscale/component.jsx index 9d0da65b..acee3a82 100644 --- a/src/widgets/headscale/component.jsx +++ b/src/widgets/headscale/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/healthchecks/component.jsx b/src/widgets/healthchecks/component.jsx index 5fcef856..b65f91c5 100644 --- a/src/widgets/healthchecks/component.jsx +++ b/src/widgets/healthchecks/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import { i18n } from "../../../next-i18next.config"; diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx index 99497d6f..4be6fbab 100644 --- a/src/widgets/hoarder/component.jsx +++ b/src/widgets/hoarder/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homeassistant/component.jsx b/src/widgets/homeassistant/component.jsx index 5bd2f55c..1df415ae 100644 --- a/src/widgets/homeassistant/component.jsx +++ b/src/widgets/homeassistant/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homeassistant/proxy.js b/src/widgets/homeassistant/proxy.js index e1f02ddb..7702eb5d 100644 --- a/src/widgets/homeassistant/proxy.js +++ b/src/widgets/homeassistant/proxy.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("homeassistantProxyHandler"); diff --git a/src/widgets/homebox/component.jsx b/src/widgets/homebox/component.jsx index d5ca97be..4c550748 100644 --- a/src/widgets/homebox/component.jsx +++ b/src/widgets/homebox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homebox/proxy.js b/src/widgets/homebox/proxy.js index c91ce552..8a4550fc 100644 --- a/src/widgets/homebox/proxy.js +++ b/src/widgets/homebox/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "homeboxProxyHandler"; const sessionTokenCacheKey = `${proxyName}__sessionToken`; diff --git a/src/widgets/homebridge/component.jsx b/src/widgets/homebridge/component.jsx index 97896af1..6201b70b 100644 --- a/src/widgets/homebridge/component.jsx +++ b/src/widgets/homebridge/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/homebridge/proxy.js b/src/widgets/homebridge/proxy.js index 4da9197b..675e2976 100644 --- a/src/widgets/homebridge/proxy.js +++ b/src/widgets/homebridge/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "homebridgeProxyHandler"; diff --git a/src/widgets/iframe/component.jsx b/src/widgets/iframe/component.jsx index 01146771..9d2d60ca 100644 --- a/src/widgets/iframe/component.jsx +++ b/src/widgets/iframe/component.jsx @@ -1,6 +1,6 @@ -import { useState, useEffect } from "react"; import classNames from "classnames"; import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; export default function Component({ service }) { const [refreshTimer, setRefreshTimer] = useState(0); diff --git a/src/widgets/immich/component.jsx b/src/widgets/immich/component.jsx index 7f614797..a38cac1e 100644 --- a/src/widgets/immich/component.jsx +++ b/src/widgets/immich/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jackett/component.jsx b/src/widgets/jackett/component.jsx index 9c5ce0c5..63e3e1c3 100644 --- a/src/widgets/jackett/component.jsx +++ b/src/widgets/jackett/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jackett/proxy.js b/src/widgets/jackett/proxy.js index 035309b3..10e85175 100644 --- a/src/widgets/jackett/proxy.js +++ b/src/widgets/jackett/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const logger = createLogger("jackettProxyHandler"); diff --git a/src/widgets/jdownloader/component.jsx b/src/widgets/jdownloader/component.jsx index 6350faeb..a7722c7c 100644 --- a/src/widgets/jdownloader/component.jsx +++ b/src/widgets/jdownloader/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/jdownloader/proxy.js b/src/widgets/jdownloader/proxy.js index ae8c845c..d5d5ac3d 100644 --- a/src/widgets/jdownloader/proxy.js +++ b/src/widgets/jdownloader/proxy.js @@ -2,11 +2,11 @@ import crypto from "crypto"; import querystring from "querystring"; -import { sha256, uniqueRid, validateRid, createEncryptionToken, decrypt, encrypt } from "./tools"; +import { createEncryptionToken, decrypt, encrypt, sha256, uniqueRid, validateRid } from "./tools"; import getServiceWidget from "utils/config/service-helpers"; -import { httpProxy } from "utils/proxy/http"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "jdownloaderProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/jellyseerr/component.jsx b/src/widgets/jellyseerr/component.jsx index 06456c4d..d99fffdb 100644 --- a/src/widgets/jellyseerr/component.jsx +++ b/src/widgets/jellyseerr/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/kavita/component.jsx b/src/widgets/kavita/component.jsx index df982328..887b3bbe 100644 --- a/src/widgets/kavita/component.jsx +++ b/src/widgets/kavita/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/kavita/proxy.js b/src/widgets/kavita/proxy.js index 842e4b87..cb3b3569 100644 --- a/src/widgets/kavita/proxy.js +++ b/src/widgets/kavita/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "kavitaProxyHandler"; diff --git a/src/widgets/komga/component.jsx b/src/widgets/komga/component.jsx index 4272ddfc..1e31b726 100644 --- a/src/widgets/komga/component.jsx +++ b/src/widgets/komga/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/komga/proxy.js b/src/widgets/komga/proxy.js index a827f408..b3d72690 100644 --- a/src/widgets/komga/proxy.js +++ b/src/widgets/komga/proxy.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "komgaProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/kopia/component.jsx b/src/widgets/kopia/component.jsx index 92c6774c..d022a545 100755 --- a/src/widgets/kopia/component.jsx +++ b/src/widgets/kopia/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/kubernetes/component.jsx b/src/widgets/kubernetes/component.jsx index b93e07fb..d3587a59 100644 --- a/src/widgets/kubernetes/component.jsx +++ b/src/widgets/kubernetes/component.jsx @@ -1,7 +1,7 @@ -import useSWR from "swr"; -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import useSWR from "swr"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/lidarr/component.jsx b/src/widgets/lidarr/component.jsx index 28295e57..92f5b893 100644 --- a/src/widgets/lidarr/component.jsx +++ b/src/widgets/lidarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/linkwarden/component.jsx b/src/widgets/linkwarden/component.jsx index 8046faf9..b2b0d91a 100644 --- a/src/widgets/linkwarden/component.jsx +++ b/src/widgets/linkwarden/component.jsx @@ -1,6 +1,6 @@ -import React, { useState, useEffect } from "react"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx index 8a18f158..390b74ea 100644 --- a/src/widgets/lubelogger/component.jsx +++ b/src/widgets/lubelogger/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "react-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mailcow/component.jsx b/src/widgets/mailcow/component.jsx index 96ef0e45..e5d9db65 100644 --- a/src/widgets/mailcow/component.jsx +++ b/src/widgets/mailcow/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mastodon/component.jsx b/src/widgets/mastodon/component.jsx index dbb36320..3a5d9ab6 100644 --- a/src/widgets/mastodon/component.jsx +++ b/src/widgets/mastodon/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mealie/component.jsx b/src/widgets/mealie/component.jsx index aa18c459..4a558157 100644 --- a/src/widgets/mealie/component.jsx +++ b/src/widgets/mealie/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/medusa/component.jsx b/src/widgets/medusa/component.jsx index a5ea4ca1..88f55bcb 100644 --- a/src/widgets/medusa/component.jsx +++ b/src/widgets/medusa/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mikrotik/component.jsx b/src/widgets/mikrotik/component.jsx index a34ce62f..4bab6792 100644 --- a/src/widgets/mikrotik/component.jsx +++ b/src/widgets/mikrotik/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/minecraft/component.jsx b/src/widgets/minecraft/component.jsx index e277abb6..00c5f6f8 100644 --- a/src/widgets/minecraft/component.jsx +++ b/src/widgets/minecraft/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/minecraft/proxy.js b/src/widgets/minecraft/proxy.js index 5f238acb..d1fe1463 100644 --- a/src/widgets/minecraft/proxy.js +++ b/src/widgets/minecraft/proxy.js @@ -1,7 +1,7 @@ import mc from "minecraftstatuspinger"; -import createLogger from "utils/logger"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; const proxyName = "minecraftProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/miniflux/component.jsx b/src/widgets/miniflux/component.jsx index 5f5f649e..2cbbb254 100644 --- a/src/widgets/miniflux/component.jsx +++ b/src/widgets/miniflux/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx index ed99e418..238c8327 100644 --- a/src/widgets/moonraker/component.jsx +++ b/src/widgets/moonraker/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/mylar/component.jsx b/src/widgets/mylar/component.jsx index 0306b1b6..95ec1aca 100644 --- a/src/widgets/mylar/component.jsx +++ b/src/widgets/mylar/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/myspeed/component.jsx b/src/widgets/myspeed/component.jsx index 7de1b2b0..dacd2b59 100644 --- a/src/widgets/myspeed/component.jsx +++ b/src/widgets/myspeed/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/navidrome/component.jsx b/src/widgets/navidrome/component.jsx index 7a89f6ca..6218e6d9 100644 --- a/src/widgets/navidrome/component.jsx +++ b/src/widgets/navidrome/component.jsx @@ -1,5 +1,5 @@ -import { useTranslation } from "next-i18next"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/netalertx/component.jsx b/src/widgets/netalertx/component.jsx index a52defd3..786db9a5 100644 --- a/src/widgets/netalertx/component.jsx +++ b/src/widgets/netalertx/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/netdata/component.jsx b/src/widgets/netdata/component.jsx index 98d0f797..2d04aa23 100644 --- a/src/widgets/netdata/component.jsx +++ b/src/widgets/netdata/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/nextcloud/component.jsx b/src/widgets/nextcloud/component.jsx index 2989b6f4..d1f1cac9 100755 --- a/src/widgets/nextcloud/component.jsx +++ b/src/widgets/nextcloud/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useMemo } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/nextdns/component.jsx b/src/widgets/nextdns/component.jsx index 75c04a85..45e01281 100644 --- a/src/widgets/nextdns/component.jsx +++ b/src/widgets/nextdns/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/npm/component.jsx b/src/widgets/npm/component.jsx index 1ffaf27e..54e123a8 100644 --- a/src/widgets/npm/component.jsx +++ b/src/widgets/npm/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/npm/proxy.js b/src/widgets/npm/proxy.js index 6c7ba09e..79307782 100644 --- a/src/widgets/npm/proxy.js +++ b/src/widgets/npm/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import createLogger from "utils/logger"; const proxyName = "npmProxyHandler"; const tokenCacheKey = `${proxyName}__token`; diff --git a/src/widgets/nzbget/component.jsx b/src/widgets/nzbget/component.jsx index 4c0a9d48..a11ac9da 100644 --- a/src/widgets/nzbget/component.jsx +++ b/src/widgets/nzbget/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/octoprint/component.jsx b/src/widgets/octoprint/component.jsx index 21c3f7d0..e6b13809 100644 --- a/src/widgets/octoprint/component.jsx +++ b/src/widgets/octoprint/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/omada/component.jsx b/src/widgets/omada/component.jsx index 0d76e1a1..bf301d81 100644 --- a/src/widgets/omada/component.jsx +++ b/src/widgets/omada/component.jsx @@ -1,8 +1,8 @@ import { useTranslation } from "next-i18next"; -import useWidgetAPI from "../../utils/proxy/use-widget-api"; -import Container from "../../components/services/widget/container"; import Block from "../../components/services/widget/block"; +import Container from "../../components/services/widget/container"; +import useWidgetAPI from "../../utils/proxy/use-widget-api"; export default function Component({ service }) { const { t } = useTranslation(); diff --git a/src/widgets/omada/proxy.js b/src/widgets/omada/proxy.js index f4da1293..a5af47b2 100644 --- a/src/widgets/omada/proxy.js +++ b/src/widgets/omada/proxy.js @@ -1,6 +1,6 @@ -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "omadaProxyHandler"; diff --git a/src/widgets/ombi/component.jsx b/src/widgets/ombi/component.jsx index 3beb1198..859c01aa 100644 --- a/src/widgets/ombi/component.jsx +++ b/src/widgets/ombi/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/opendtu/component.jsx b/src/widgets/opendtu/component.jsx index 4fed88e4..c1b924b9 100644 --- a/src/widgets/opendtu/component.jsx +++ b/src/widgets/opendtu/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/component.jsx b/src/widgets/openmediavault/component.jsx index bd34a750..c14581f9 100644 --- a/src/widgets/openmediavault/component.jsx +++ b/src/widgets/openmediavault/component.jsx @@ -1,6 +1,6 @@ +import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist"; import ServicesGetStatus from "./methods/services_get_status"; import SmartGetList from "./methods/smart_get_list"; -import DownloaderGetDownloadList from "./methods/downloader_get_downloadlist"; export default function Component({ service }) { switch (service.widget.method) { diff --git a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx index 22327b92..7caf3426 100644 --- a/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx +++ b/src/widgets/openmediavault/methods/downloader_get_downloadlist.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/methods/services_get_status.jsx b/src/widgets/openmediavault/methods/services_get_status.jsx index 0579f41a..7ab0f8c1 100644 --- a/src/widgets/openmediavault/methods/services_get_status.jsx +++ b/src/widgets/openmediavault/methods/services_get_status.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/methods/smart_get_list.jsx b/src/widgets/openmediavault/methods/smart_get_list.jsx index 6c812449..4998c02f 100644 --- a/src/widgets/openmediavault/methods/smart_get_list.jsx +++ b/src/widgets/openmediavault/methods/smart_get_list.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openmediavault/proxy.js b/src/widgets/openmediavault/proxy.js index 9cda42e8..d2365f2b 100644 --- a/src/widgets/openmediavault/proxy.js +++ b/src/widgets/openmediavault/proxy.js @@ -1,8 +1,8 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; -import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const PROXY_NAME = "OMVProxyHandler"; diff --git a/src/widgets/openwrt/methods/interface.jsx b/src/widgets/openwrt/methods/interface.jsx index e02e3171..4f77036f 100644 --- a/src/widgets/openwrt/methods/interface.jsx +++ b/src/widgets/openwrt/methods/interface.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openwrt/methods/system.jsx b/src/widgets/openwrt/methods/system.jsx index 56c3dc9e..55c0b005 100644 --- a/src/widgets/openwrt/methods/system.jsx +++ b/src/widgets/openwrt/methods/system.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/openwrt/proxy.js b/src/widgets/openwrt/proxy.js index 0a0da3ff..5db90790 100644 --- a/src/widgets/openwrt/proxy.js +++ b/src/widgets/openwrt/proxy.js @@ -1,7 +1,7 @@ -import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { sendJsonRpcRequest } from "utils/proxy/handlers/jsonrpc"; import widgets from "widgets/widgets"; const PROXY_NAME = "OpenWRTProxyHandler"; diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index b8a90d72..1caaab47 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/overseerr/component.jsx b/src/widgets/overseerr/component.jsx index 3ec66587..d5c64392 100644 --- a/src/widgets/overseerr/component.jsx +++ b/src/widgets/overseerr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/paperlessngx/component.jsx b/src/widgets/paperlessngx/component.jsx index 6585d231..bafc2e99 100644 --- a/src/widgets/paperlessngx/component.jsx +++ b/src/widgets/paperlessngx/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/peanut/component.jsx b/src/widgets/peanut/component.jsx index bc0b739b..54a293ad 100644 --- a/src/widgets/peanut/component.jsx +++ b/src/widgets/peanut/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pfsense/component.jsx b/src/widgets/pfsense/component.jsx index 18a54933..9f43488b 100644 --- a/src/widgets/pfsense/component.jsx +++ b/src/widgets/pfsense/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/photoprism/component.jsx b/src/widgets/photoprism/component.jsx index 71772a7a..21817a10 100644 --- a/src/widgets/photoprism/component.jsx +++ b/src/widgets/photoprism/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/photoprism/proxy.js b/src/widgets/photoprism/proxy.js index fe5096b3..1959817a 100644 --- a/src/widgets/photoprism/proxy.js +++ b/src/widgets/photoprism/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("photoprismProxyHandler"); diff --git a/src/widgets/pihole/component.jsx b/src/widgets/pihole/component.jsx index e065bf39..6895ab28 100644 --- a/src/widgets/pihole/component.jsx +++ b/src/widgets/pihole/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pihole/proxy.js b/src/widgets/pihole/proxy.js index 2f2d9a88..75cd0fb5 100644 --- a/src/widgets/pihole/proxy.js +++ b/src/widgets/pihole/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "piholeProxyHandler"; diff --git a/src/widgets/plantit/component.jsx b/src/widgets/plantit/component.jsx index af46e964..d93304e7 100644 --- a/src/widgets/plantit/component.jsx +++ b/src/widgets/plantit/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/plex/component.jsx b/src/widgets/plex/component.jsx index 688893d3..153d57b5 100644 --- a/src/widgets/plex/component.jsx +++ b/src/widgets/plex/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/plex/proxy.js b/src/widgets/plex/proxy.js index c092ebaa..18ffc49b 100644 --- a/src/widgets/plex/proxy.js +++ b/src/widgets/plex/proxy.js @@ -2,10 +2,10 @@ import cache from "memory-cache"; import { xml2json } from "xml-js"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "plexProxyHandler"; diff --git a/src/widgets/portainer/component.jsx b/src/widgets/portainer/component.jsx index 149707fc..f8a89507 100644 --- a/src/widgets/portainer/component.jsx +++ b/src/widgets/portainer/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prometheus/component.jsx b/src/widgets/prometheus/component.jsx index 003831e5..7b3722d0 100644 --- a/src/widgets/prometheus/component.jsx +++ b/src/widgets/prometheus/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prometheusmetric/component.jsx b/src/widgets/prometheusmetric/component.jsx index 3ea20af0..d58efde9 100644 --- a/src/widgets/prometheusmetric/component.jsx +++ b/src/widgets/prometheusmetric/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx index 55f28634..13d388f7 100644 --- a/src/widgets/prowlarr/component.jsx +++ b/src/widgets/prowlarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "react-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "react-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx index fc4c728c..51762a73 100644 --- a/src/widgets/proxmox/component.jsx +++ b/src/widgets/proxmox/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/proxmoxbackupserver/component.jsx b/src/widgets/proxmoxbackupserver/component.jsx index 2eb12258..efc71bbb 100644 --- a/src/widgets/proxmoxbackupserver/component.jsx +++ b/src/widgets/proxmoxbackupserver/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pterodactyl/component.jsx b/src/widgets/pterodactyl/component.jsx index b1ccab8d..9a702eef 100644 --- a/src/widgets/pterodactyl/component.jsx +++ b/src/widgets/pterodactyl/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pyload/component.jsx b/src/widgets/pyload/component.jsx index f0e58f52..f618f75e 100644 --- a/src/widgets/pyload/component.jsx +++ b/src/widgets/pyload/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/pyload/proxy.js b/src/widgets/pyload/proxy.js index a380c865..2a1949c1 100644 --- a/src/widgets/pyload/proxy.js +++ b/src/widgets/pyload/proxy.js @@ -1,10 +1,10 @@ import cache from "memory-cache"; import getServiceWidget from "utils/config/service-helpers"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import widgets from "widgets/widgets"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; +import widgets from "widgets/widgets"; const proxyName = "pyloadProxyHandler"; const logger = createLogger(proxyName); diff --git a/src/widgets/qbittorrent/component.jsx b/src/widgets/qbittorrent/component.jsx index 7fc47f99..c9f64816 100644 --- a/src/widgets/qbittorrent/component.jsx +++ b/src/widgets/qbittorrent/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/qbittorrent/proxy.js b/src/widgets/qbittorrent/proxy.js index aead7582..8f1874bf 100644 --- a/src/widgets/qbittorrent/proxy.js +++ b/src/widgets/qbittorrent/proxy.js @@ -1,7 +1,7 @@ -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const logger = createLogger("qbittorrentProxyHandler"); diff --git a/src/widgets/qnap/component.jsx b/src/widgets/qnap/component.jsx index 79f3c8be..d7fdf8bc 100644 --- a/src/widgets/qnap/component.jsx +++ b/src/widgets/qnap/component.jsx @@ -1,8 +1,8 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["_text", "_cdata"] }] */ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/qnap/proxy.js b/src/widgets/qnap/proxy.js index 07917d28..1c5356ae 100644 --- a/src/widgets/qnap/proxy.js +++ b/src/widgets/qnap/proxy.js @@ -3,10 +3,10 @@ import cache from "memory-cache"; import { xml2json } from "xml-js"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; const proxyName = "qnapProxyHandler"; const sessionTokenCacheKey = `${proxyName}__sessionToken`; diff --git a/src/widgets/radarr/component.jsx b/src/widgets/radarr/component.jsx index 70ddcb33..bcf9301b 100644 --- a/src/widgets/radarr/component.jsx +++ b/src/widgets/radarr/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useCallback } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/radarr/widget.js b/src/widgets/radarr/widget.js index 7d370378..4f71b8d9 100644 --- a/src/widgets/radarr/widget.js +++ b/src/widgets/radarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/readarr/component.jsx b/src/widgets/readarr/component.jsx index cbf68a4d..845b7820 100644 --- a/src/widgets/readarr/component.jsx +++ b/src/widgets/readarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/readarr/widget.js b/src/widgets/readarr/widget.js index 58cc09c4..f786f0bc 100644 --- a/src/widgets/readarr/widget.js +++ b/src/widgets/readarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { jsonArrayFilter } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v1/{endpoint}?apikey={key}", diff --git a/src/widgets/romm/component.jsx b/src/widgets/romm/component.jsx index 5c6349d0..b0787fb3 100644 --- a/src/widgets/romm/component.jsx +++ b/src/widgets/romm/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/rutorrent/component.jsx b/src/widgets/rutorrent/component.jsx index 9d2ad4e2..245a786c 100644 --- a/src/widgets/rutorrent/component.jsx +++ b/src/widgets/rutorrent/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/rutorrent/proxy.js b/src/widgets/rutorrent/proxy.js index e0ae44fe..910f2311 100644 --- a/src/widgets/rutorrent/proxy.js +++ b/src/widgets/rutorrent/proxy.js @@ -1,8 +1,8 @@ import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import createLogger from "utils/logger"; const logger = createLogger("rutorrentProxyHandler"); diff --git a/src/widgets/sabnzbd/component.jsx b/src/widgets/sabnzbd/component.jsx index 5a9ba488..9807dd93 100644 --- a/src/widgets/sabnzbd/component.jsx +++ b/src/widgets/sabnzbd/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/scrutiny/component.jsx b/src/widgets/scrutiny/component.jsx index f81a519c..2450a95e 100644 --- a/src/widgets/scrutiny/component.jsx +++ b/src/widgets/scrutiny/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/slskd/component.jsx b/src/widgets/slskd/component.jsx index 8c26d4e4..40a206b6 100644 --- a/src/widgets/slskd/component.jsx +++ b/src/widgets/slskd/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/slskd/widget.js b/src/widgets/slskd/widget.js index fdea7738..3eedd356 100644 --- a/src/widgets/slskd/widget.js +++ b/src/widgets/slskd/widget.js @@ -1,5 +1,4 @@ import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; -import { asJson } from "utils/proxy/api-helpers"; const widget = { api: `{url}/api/v0/{endpoint}`, diff --git a/src/widgets/sonarr/component.jsx b/src/widgets/sonarr/component.jsx index 725e6d66..19cc2c12 100644 --- a/src/widgets/sonarr/component.jsx +++ b/src/widgets/sonarr/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useCallback } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import QueueEntry from "../../components/widgets/queue/queueEntry"; diff --git a/src/widgets/sonarr/widget.js b/src/widgets/sonarr/widget.js index acb4a551..1fcef8eb 100644 --- a/src/widgets/sonarr/widget.js +++ b/src/widgets/sonarr/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/v3/{endpoint}?apikey={key}", diff --git a/src/widgets/speedtest/component.jsx b/src/widgets/speedtest/component.jsx index e34f53ac..7be00aa2 100644 --- a/src/widgets/speedtest/component.jsx +++ b/src/widgets/speedtest/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/spoolman/component.jsx b/src/widgets/spoolman/component.jsx index b690f9c0..62eb3a1d 100644 --- a/src/widgets/spoolman/component.jsx +++ b/src/widgets/spoolman/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/stash/component.jsx b/src/widgets/stash/component.jsx index e3986d4b..965c6b59 100644 --- a/src/widgets/stash/component.jsx +++ b/src/widgets/stash/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import { formatProxyUrl } from "utils/proxy/api-helpers"; diff --git a/src/widgets/stocks/component.jsx b/src/widgets/stocks/component.jsx index bcd3b110..be471ddf 100644 --- a/src/widgets/stocks/component.jsx +++ b/src/widgets/stocks/component.jsx @@ -1,7 +1,7 @@ -import { useTranslation } from "next-i18next"; import classNames from "classnames"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/strelaysrv/component.jsx b/src/widgets/strelaysrv/component.jsx index 0aa70d88..026e19b7 100644 --- a/src/widgets/strelaysrv/component.jsx +++ b/src/widgets/strelaysrv/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/suwayomi/component.jsx b/src/widgets/suwayomi/component.jsx index 1a8625b9..1cbd8c53 100644 --- a/src/widgets/suwayomi/component.jsx +++ b/src/widgets/suwayomi/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/suwayomi/proxy.js b/src/widgets/suwayomi/proxy.js index def811cc..4df55b95 100644 --- a/src/widgets/suwayomi/proxy.js +++ b/src/widgets/suwayomi/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "suwayomiProxyHandler"; diff --git a/src/widgets/swagdashboard/component.jsx b/src/widgets/swagdashboard/component.jsx index 2b17278f..4220e3c8 100644 --- a/src/widgets/swagdashboard/component.jsx +++ b/src/widgets/swagdashboard/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tailscale/component.jsx b/src/widgets/tailscale/component.jsx index a6e76bed..b95cb016 100644 --- a/src/widgets/tailscale/component.jsx +++ b/src/widgets/tailscale/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tandoor/component.jsx b/src/widgets/tandoor/component.jsx index b31cad95..4a02d539 100644 --- a/src/widgets/tandoor/component.jsx +++ b/src/widgets/tandoor/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx index 50e8295f..3f6443dd 100644 --- a/src/widgets/tautulli/component.jsx +++ b/src/widgets/tautulli/component.jsx @@ -1,8 +1,8 @@ /* eslint-disable camelcase */ -import { useTranslation } from "next-i18next"; -import { BsFillPlayFill, BsPauseFill, BsCpu, BsFillCpuFill } from "react-icons/bs"; -import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; +import { BsCpu, BsFillCpuFill, BsFillPlayFill, BsPauseFill } from "react-icons/bs"; +import { MdOutlineSmartDisplay, MdSmartDisplay } from "react-icons/md"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tdarr/component.jsx b/src/widgets/tdarr/component.jsx index ce9d43fd..824a56b3 100644 --- a/src/widgets/tdarr/component.jsx +++ b/src/widgets/tdarr/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/tdarr/proxy.js b/src/widgets/tdarr/proxy.js index 88da30fd..d6897dfc 100644 --- a/src/widgets/tdarr/proxy.js +++ b/src/widgets/tdarr/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "tdarrProxyHandler"; diff --git a/src/widgets/technitium/component.jsx b/src/widgets/technitium/component.jsx index 22f56e96..fa221025 100644 --- a/src/widgets/technitium/component.jsx +++ b/src/widgets/technitium/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/technitium/widget.js b/src/widgets/technitium/widget.js index c3432a67..fc4577be 100644 --- a/src/widgets/technitium/widget.js +++ b/src/widgets/technitium/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/api/{endpoint}?token={key}&utc=true", diff --git a/src/widgets/traefik/component.jsx b/src/widgets/traefik/component.jsx index 598170fa..e4b3b46b 100644 --- a/src/widgets/traefik/component.jsx +++ b/src/widgets/traefik/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/transmission/component.jsx b/src/widgets/transmission/component.jsx index bd19c52e..474fe69f 100644 --- a/src/widgets/transmission/component.jsx +++ b/src/widgets/transmission/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/transmission/proxy.js b/src/widgets/transmission/proxy.js index 8b8049bc..b0be7bac 100644 --- a/src/widgets/transmission/proxy.js +++ b/src/widgets/transmission/proxy.js @@ -1,9 +1,9 @@ import cache from "memory-cache"; -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "transmissionProxyHandler"; diff --git a/src/widgets/truenas/component.jsx b/src/widgets/truenas/component.jsx index 0e56bc91..12ceef56 100644 --- a/src/widgets/truenas/component.jsx +++ b/src/widgets/truenas/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import Pool from "widgets/truenas/pool"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/truenas/widget.js b/src/widgets/truenas/widget.js index d322753f..528114ed 100644 --- a/src/widgets/truenas/widget.js +++ b/src/widgets/truenas/widget.js @@ -1,5 +1,5 @@ -import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import { asJson, jsonArrayFilter } from "utils/proxy/api-helpers"; +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { api: "{url}/api/v2.0/{endpoint}", diff --git a/src/widgets/tubearchivist/component.jsx b/src/widgets/tubearchivist/component.jsx index 6af255cd..427298e4 100644 --- a/src/widgets/tubearchivist/component.jsx +++ b/src/widgets/tubearchivist/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx index 0c00b487..ad58d1d9 100644 --- a/src/widgets/unifi/component.jsx +++ b/src/widgets/unifi/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/unifi/proxy.js b/src/widgets/unifi/proxy.js index 24be7dd9..c932fc41 100644 --- a/src/widgets/unifi/proxy.js +++ b/src/widgets/unifi/proxy.js @@ -1,11 +1,11 @@ import cache from "memory-cache"; -import { formatApiCall } from "utils/proxy/api-helpers"; -import { httpProxy } from "utils/proxy/http"; -import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; import getServiceWidget from "utils/config/service-helpers"; import { getPrivateWidgetOptions } from "utils/config/widget-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { addCookieToJar, setCookieHeader } from "utils/proxy/cookie-jar"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const udmpPrefix = "/proxy/network"; diff --git a/src/widgets/unmanic/component.jsx b/src/widgets/unmanic/component.jsx index 7cc8eec1..12069e52 100644 --- a/src/widgets/unmanic/component.jsx +++ b/src/widgets/unmanic/component.jsx @@ -1,9 +1,9 @@ -import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useEffect, useState } from "react"; -import useWidgetAPI from "utils/proxy/use-widget-api"; import { formatProxyUrl } from "utils/proxy/api-helpers"; +import useWidgetAPI from "utils/proxy/use-widget-api"; export default function Component({ service }) { const { widget } = service; diff --git a/src/widgets/unmanic/widget.js b/src/widgets/unmanic/widget.js index 4c9713e4..ef4493e9 100644 --- a/src/widgets/unmanic/widget.js +++ b/src/widgets/unmanic/widget.js @@ -1,5 +1,5 @@ -import genericProxyHandler from "utils/proxy/handlers/generic"; import { asJson } from "utils/proxy/api-helpers"; +import genericProxyHandler from "utils/proxy/handlers/generic"; const widget = { api: "{url}/unmanic/api/v2/{endpoint}", diff --git a/src/widgets/uptimekuma/component.jsx b/src/widgets/uptimekuma/component.jsx index d044c255..e8a42e48 100644 --- a/src/widgets/uptimekuma/component.jsx +++ b/src/widgets/uptimekuma/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/uptimerobot/component.jsx b/src/widgets/uptimerobot/component.jsx index c18462ba..a1f234c2 100644 --- a/src/widgets/uptimerobot/component.jsx +++ b/src/widgets/uptimerobot/component.jsx @@ -1,7 +1,7 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import { useTranslation } from "next-i18next"; import { useEffect, useState } from "react"; -import Container from "components/services/widget/container"; -import Block from "components/services/widget/block"; import { formatProxyUrl } from "utils/proxy/api-helpers"; diff --git a/src/widgets/urbackup/component.jsx b/src/widgets/urbackup/component.jsx index 76769e13..9d8f92ba 100644 --- a/src/widgets/urbackup/component.jsx +++ b/src/widgets/urbackup/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx index 7f8efb41..1afccd38 100644 --- a/src/widgets/vikunja/component.jsx +++ b/src/widgets/vikunja/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js index 9a192026..8e5e680a 100644 --- a/src/widgets/vikunja/widget.js +++ b/src/widgets/vikunja/widget.js @@ -1,5 +1,5 @@ -import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; import { asJson } from "utils/proxy/api-helpers"; +import credentialedProxyHandler from "utils/proxy/handlers/credentialed"; const widget = { api: `{url}/api/v1/{endpoint}`, diff --git a/src/widgets/watchtower/component.jsx b/src/widgets/watchtower/component.jsx index 0bed9445..58b2a3f5 100644 --- a/src/widgets/watchtower/component.jsx +++ b/src/widgets/watchtower/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/watchtower/proxy.js b/src/widgets/watchtower/proxy.js index 588d08ee..484c3c7d 100644 --- a/src/widgets/watchtower/proxy.js +++ b/src/widgets/watchtower/proxy.js @@ -1,7 +1,7 @@ -import { httpProxy } from "utils/proxy/http"; -import { formatApiCall } from "utils/proxy/api-helpers"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; +import { formatApiCall } from "utils/proxy/api-helpers"; +import { httpProxy } from "utils/proxy/http"; import widgets from "widgets/widgets"; const proxyName = "watchtowerProxyHandler"; diff --git a/src/widgets/wgeasy/component.jsx b/src/widgets/wgeasy/component.jsx index eb42532e..829b120d 100644 --- a/src/widgets/wgeasy/component.jsx +++ b/src/widgets/wgeasy/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/whatsupdocker/component.jsx b/src/widgets/whatsupdocker/component.jsx index 52afe09d..cc3b5174 100644 --- a/src/widgets/whatsupdocker/component.jsx +++ b/src/widgets/whatsupdocker/component.jsx @@ -1,5 +1,5 @@ -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 21cff92b..992855d0 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -41,15 +41,15 @@ import gotify from "./gotify/widget"; import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/widget"; import headscale from "./headscale/widget"; +import healthchecks from "./healthchecks/widget"; import hoarder from "./hoarder/widget"; import homeassistant from "./homeassistant/widget"; import homebox from "./homebox/widget"; import homebridge from "./homebridge/widget"; -import healthchecks from "./healthchecks/widget"; import immich from "./immich/widget"; import jackett from "./jackett/widget"; -import jellyseerr from "./jellyseerr/widget"; import jdownloader from "./jdownloader/widget"; +import jellyseerr from "./jellyseerr/widget"; import kavita from "./kavita/widget"; import komga from "./komga/widget"; import kopia from "./kopia/widget"; @@ -60,9 +60,9 @@ import mailcow from "./mailcow/widget"; import mastodon from "./mastodon/widget"; import mealie from "./mealie/widget"; import medusa from "./medusa/widget"; +import mikrotik from "./mikrotik/widget"; import minecraft from "./minecraft/widget"; import miniflux from "./miniflux/widget"; -import mikrotik from "./mikrotik/widget"; import mjpeg from "./mjpeg/widget"; import moonraker from "./moonraker/widget"; import mylar from "./mylar/widget"; @@ -78,15 +78,14 @@ import octoprint from "./octoprint/widget"; import omada from "./omada/widget"; import ombi from "./ombi/widget"; import opendtu from "./opendtu/widget"; -import opnsense from "./opnsense/widget"; -import overseerr from "./overseerr/widget"; import openmediavault from "./openmediavault/widget"; import openwrt from "./openwrt/widget"; +import opnsense from "./opnsense/widget"; +import overseerr from "./overseerr/widget"; import paperlessngx from "./paperlessngx/widget"; import peanut from "./peanut/widget"; import pfsense from "./pfsense/widget"; import photoprism from "./photoprism/widget"; -import proxmoxbackupserver from "./proxmoxbackupserver/widget"; import pihole from "./pihole/widget"; import plantit from "./plantit/widget"; import plex from "./plex/widget"; @@ -95,12 +94,14 @@ import prometheus from "./prometheus/widget"; import prometheusmetric from "./prometheusmetric/widget"; import prowlarr from "./prowlarr/widget"; import proxmox from "./proxmox/widget"; +import proxmoxbackupserver from "./proxmoxbackupserver/widget"; import pterodactyl from "./pterodactyl/widget"; import pyload from "./pyload/widget"; import qbittorrent from "./qbittorrent/widget"; import qnap from "./qnap/widget"; import radarr from "./radarr/widget"; import readarr from "./readarr/widget"; +import romm from "./romm/widget"; import rutorrent from "./rutorrent/widget"; import sabnzbd from "./sabnzbd/widget"; import scrutiny from "./scrutiny/widget"; @@ -111,28 +112,27 @@ import spoolman from "./spoolman/widget"; import stash from "./stash/widget"; import stocks from "./stocks/widget"; import strelaysrv from "./strelaysrv/widget"; -import swagdashboard from "./swagdashboard/widget"; import suwayomi from "./suwayomi/widget"; +import swagdashboard from "./swagdashboard/widget"; import tailscale from "./tailscale/widget"; import tandoor from "./tandoor/widget"; import tautulli from "./tautulli/widget"; -import technitium from "./technitium/widget"; import tdarr from "./tdarr/widget"; +import technitium from "./technitium/widget"; import traefik from "./traefik/widget"; import transmission from "./transmission/widget"; -import tubearchivist from "./tubearchivist/widget"; import truenas from "./truenas/widget"; +import tubearchivist from "./tubearchivist/widget"; import unifi from "./unifi/widget"; import unmanic from "./unmanic/widget"; import uptimekuma from "./uptimekuma/widget"; import uptimerobot from "./uptimerobot/widget"; +import urbackup from "./urbackup/widget"; import vikunja from "./vikunja/widget"; import watchtower from "./watchtower/widget"; import wgeasy from "./wgeasy/widget"; import whatsupdocker from "./whatsupdocker/widget"; import xteve from "./xteve/widget"; -import urbackup from "./urbackup/widget"; -import romm from "./romm/widget"; import zabbix from "./zabbix/widget"; const widgets = { diff --git a/src/widgets/xteve/component.jsx b/src/widgets/xteve/component.jsx index 9d514e75..41f2beb0 100644 --- a/src/widgets/xteve/component.jsx +++ b/src/widgets/xteve/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/xteve/proxy.js b/src/widgets/xteve/proxy.js index 453e3645..53d82bc4 100644 --- a/src/widgets/xteve/proxy.js +++ b/src/widgets/xteve/proxy.js @@ -1,8 +1,8 @@ +import getServiceWidget from "utils/config/service-helpers"; +import createLogger from "utils/logger"; import { formatApiCall } from "utils/proxy/api-helpers"; import { httpProxy } from "utils/proxy/http"; -import createLogger from "utils/logger"; import widgets from "widgets/widgets"; -import getServiceWidget from "utils/config/service-helpers"; const logger = createLogger("xteveProxyHandler"); diff --git a/src/widgets/zabbix/component.jsx b/src/widgets/zabbix/component.jsx index a2cc8168..b6a5b20b 100644 --- a/src/widgets/zabbix/component.jsx +++ b/src/widgets/zabbix/component.jsx @@ -1,6 +1,6 @@ -import { useTranslation } from "next-i18next"; -import Container from "components/services/widget/container"; import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; From 1666106dcd5e7e8a4c0a0f66da23a1684dd5385c Mon Sep 17 00:00:00 2001 From: RoboMagus <68224306+RoboMagus@users.noreply.github.com> Date: Mon, 31 Mar 2025 15:44:17 +0200 Subject: [PATCH 83/93] Chore: add more Docker Semver Tags (#5107) Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- .github/workflows/docker-publish.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index afb7fca4..7a133c1d 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -77,6 +77,15 @@ jobs: images: | ${{ env.IMAGE_NAME }} ghcr.io/${{ env.IMAGE_NAME }} + tags: | + # Default tags + type=schedule,pattern=nightly + type=ref,event=branch + type=ref,event=tag + # Versioning tags + type=semver,pattern=v{{version}} + type=semver,pattern=v{{major}}.{{minor}} + type=semver,pattern=v{{major}} flavor: | latest=auto From 6741eb723d1781972465304d9ab5f27d7c3101b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:22:36 -0700 Subject: [PATCH 84/93] Chore(deps): Bump i18next from 21.10.0 to 24.2.3 (#5109) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 51 ++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 07be3d1d..2386454c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "dockerode": "^4.0.4", "follow-redirects": "^1.15.9", "gamedig": "^5.2.0", - "i18next": "^21.10.0", + "i18next": "^24.2.3", "js-yaml": "^4.1.0", "json-rpc-2.0": "^1.7.0", "luxon": "^3.5.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40069cad..2e0b8b3f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ importers: specifier: ^5.2.0 version: 5.2.0 i18next: - specifier: ^21.10.0 - version: 21.10.0 + specifier: ^24.2.3 + version: 24.2.3(typescript@5.7.3) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -73,7 +73,7 @@ importers: version: 18.3.1(react@18.3.1) react-i18next: specifier: ^11.18.6 - version: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-icons: specifier: ^5.4.0 version: 5.4.0(react@18.3.1) @@ -101,6 +101,10 @@ importers: xml-js: specifier: ^1.6.11 version: 1.6.11 + optionalDependencies: + osx-temperature-sensor: + specifier: ^1.0.8 + version: 1.0.8 devDependencies: '@tailwindcss/forms': specifier: ^0.5.10 @@ -150,10 +154,6 @@ importers: typescript: specifier: ^5.7.3 version: 5.7.3 - optionalDependencies: - osx-temperature-sensor: - specifier: ^1.0.8 - version: 1.0.8 packages: @@ -165,6 +165,10 @@ packages: resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} @@ -1554,6 +1558,14 @@ packages: i18next@21.10.0: resolution: {integrity: sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==} + i18next@24.2.3: + resolution: {integrity: sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==} + peerDependencies: + typescript: ^5 + peerDependenciesMeta: + typescript: + optional: true + ical-date-parser@4.0.0: resolution: {integrity: sha512-XRCK/FU1akC2ZaJOdKIeZI6BLLgzWUuE0pegSrrkEva89GOan5mNkLVqCU4EMhCJ9nkG5TLWdMXrVX1fNAkFzw==} @@ -2783,6 +2795,10 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + '@balena/dockerignore@1.0.2': {} '@colors/colors@1.6.0': {} @@ -3741,7 +3757,7 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 csstype: 3.1.3 dom-serializer@2.0.0: @@ -4346,7 +4362,13 @@ snapshots: i18next@21.10.0: dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 + + i18next@24.2.3(typescript@5.7.3): + dependencies: + '@babel/runtime': 7.27.0 + optionalDependencies: + typescript: 5.7.3 ical-date-parser@4.0.0: {} @@ -4967,6 +4989,15 @@ snapshots: optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-i18next@11.18.6(i18next@24.2.3(typescript@5.7.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.26.9 + html-parse-stringify: 3.0.1 + i18next: 24.2.3(typescript@5.7.3) + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react-icons@5.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -4985,7 +5016,7 @@ snapshots: react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.26.9 + '@babel/runtime': 7.27.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 From 5e946ed2c251e098d1cfd48cd0e78866809ee305 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:24:24 -0700 Subject: [PATCH 85/93] Chore(deps-dev): Bump postcss from 8.5.2 to 8.5.3 (#5110) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 21 +++++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 2386454c..25a0e85e 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "^5.2.3", "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.1.0", - "postcss": "^8.5.2", + "postcss": "^8.5.3", "prettier": "^3.5.2", "prettier-plugin-organize-imports": "^4.1.0", "tailwind-scrollbar": "^4.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e0b8b3f..e1255a5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -137,8 +137,8 @@ importers: specifier: ^5.1.0 version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) postcss: - specifier: ^8.5.2 - version: 8.5.2 + specifier: ^8.5.3 + version: 8.5.3 prettier: specifier: ^3.5.2 version: 3.5.2 @@ -1975,11 +1975,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -2147,8 +2142,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -3163,7 +3158,7 @@ snapshots: '@tailwindcss/node': 4.0.9 '@tailwindcss/oxide': 4.0.9 lightningcss: 1.29.1 - postcss: 8.5.2 + postcss: 8.5.3 tailwindcss: 4.0.9 '@tanstack/react-virtual@3.13.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': @@ -4726,8 +4721,6 @@ snapshots: nanoid@3.3.11: {} - nanoid@3.3.8: {} - natural-compare@1.4.0: {} next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -4906,9 +4899,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.2: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 From f46568ec2a1eaae1204230631e92870d33ccf6de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:24:46 -0700 Subject: [PATCH 86/93] Chore(deps-dev): Bump eslint-config-prettier from 10.0.2 to 10.1.1 (#5112) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 25a0e85e..3a0d1d11 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@tailwindcss/postcss": "^4.0.9", "eslint": "^9.21.0", "eslint-config-next": "^15.1.7", - "eslint-config-prettier": "^10.0.2", + "eslint-config-prettier": "^10.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1255a5c..d68783f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,8 +119,8 @@ importers: specifier: ^15.1.7 version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: - specifier: ^10.0.2 - version: 10.0.2(eslint@9.21.0(jiti@2.4.2)) + specifier: ^10.1.1 + version: 10.1.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) @@ -129,7 +129,7 @@ importers: version: 6.10.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-prettier: specifier: ^5.2.3 - version: 5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) + version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2) eslint-plugin-react: specifier: ^7.37.4 version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) @@ -1207,8 +1207,8 @@ packages: typescript: optional: true - eslint-config-prettier@10.0.2: - resolution: {integrity: sha512-1105/17ZIMjmCOJOPNfVdbXafLCLj3hPmkmB7dLgt7XsQ/zkxSuDerE/xgO3RxoHysR1N1whmquY0lSn2O0VLg==} + eslint-config-prettier@10.1.1: + resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -3920,7 +3920,7 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)): + eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) @@ -4006,14 +4006,14 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2): + eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(prettier@3.5.2): dependencies: eslint: 9.21.0(jiti@2.4.2) prettier: 3.5.2 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 10.0.2(eslint@9.21.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): dependencies: From a59ee5a6057e4e42708745489ff2c8d5541d77eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:32:05 -0700 Subject: [PATCH 87/93] Chore(deps-dev): Bump eslint-config-next from 15.1.7 to 15.2.4 (#5113) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 405 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 302 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index 3a0d1d11..53d1e770 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@tailwindcss/forms": "^0.5.10", "@tailwindcss/postcss": "^4.0.9", "eslint": "^9.21.0", - "eslint-config-next": "^15.1.7", + "eslint-config-next": "^15.2.4", "eslint-config-prettier": "^10.1.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d68783f6..d2eabfe9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,14 +116,14 @@ importers: specifier: ^9.21.0 version: 9.21.0(jiti@2.4.2) eslint-config-next: - specifier: ^15.1.7 - version: 15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: ^15.2.4 + version: 15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint-config-prettier: specifier: ^10.1.1 version: 10.1.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + version: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.21.0(jiti@2.4.2)) @@ -179,15 +179,30 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@emnapi/core@1.4.0': + resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + '@emnapi/runtime@1.3.1': resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -383,11 +398,14 @@ packages: '@kubernetes/client-node@1.0.0': resolution: {integrity: sha512-a8NSvFDSHKFZ0sR1hbPSf8IDFNJwctEU5RodSCNiq/moRXWmrdmqhb1RRQzF+l+TSBaDgHw3YsYNxxE92STBzw==} + '@napi-rs/wasm-runtime@0.2.8': + resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} + '@next/env@15.2.3': resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} - '@next/eslint-plugin-next@15.1.7': - resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==} + '@next/eslint-plugin-next@15.2.4': + resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} '@next/swc-darwin-arm64@15.2.3': resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} @@ -494,8 +512,8 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@rushstack/eslint-patch@1.10.5': - resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} + '@rushstack/eslint-patch@1.11.0': + resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} @@ -601,6 +619,9 @@ packages: '@tanstack/virtual-core@3.13.0': resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -670,53 +691,128 @@ packages: '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} - '@typescript-eslint/eslint-plugin@8.24.1': - resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + '@typescript-eslint/eslint-plugin@8.29.0': + resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.24.1': - resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + '@typescript-eslint/parser@8.29.0': + resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + '@typescript-eslint/scope-manager@8.29.0': + resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.1': - resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + '@typescript-eslint/type-utils@8.29.0': + resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + '@typescript-eslint/types@8.29.0': + resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + '@typescript-eslint/typescript-estree@8.29.0': + resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + '@typescript-eslint/utils@8.29.0': + resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + '@typescript-eslint/visitor-keys@8.29.0': + resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unrs/resolver-binding-darwin-arm64@1.3.3': + resolution: {integrity: sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.3.3': + resolution: {integrity: sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + resolution: {integrity: sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + resolution: {integrity: sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + resolution: {integrity: sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + resolution: {integrity: sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + resolution: {integrity: sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + resolution: {integrity: sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + resolution: {integrity: sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + resolution: {integrity: sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + resolution: {integrity: sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + resolution: {integrity: sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + resolution: {integrity: sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + resolution: {integrity: sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + resolution: {integrity: sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==} + cpu: [x64] + os: [win32] + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1198,8 +1294,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@15.1.7: - resolution: {integrity: sha512-zXoMnYUIy3XHaAoOhrcYkT9UQWvXqWju2K7NNsmb5wd/7XESDwof61eUdW4QhERr3eJ9Ko/vnXqIrj8kk/drYw==} + eslint-config-next@15.2.4: + resolution: {integrity: sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 typescript: '>=3.3.1' @@ -1216,8 +1312,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.8.2: - resolution: {integrity: sha512-o0nvXxsatYCDTzI1K5b3aYGQ6PjpDGJEVN86zqJw5SEewhmmggfRTotd2dqWr2t2zbeYpIEWGTCkgtUpIEIcaQ==} + eslint-import-resolver-typescript@3.10.0: + resolution: {integrity: sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1365,8 +1461,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} @@ -1618,8 +1714,8 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-bun-module@1.3.0: - resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} @@ -2309,8 +2405,8 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfc4648@1.5.4: @@ -2434,8 +2530,8 @@ packages: resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} engines: {node: '>=10.16.0'} - stable-hash@0.0.4: - resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -2577,8 +2673,8 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tinyglobby@0.2.11: - resolution: {integrity: sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g==} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} tldts-core@6.1.82: @@ -2614,8 +2710,8 @@ packages: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -2665,6 +2761,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unrs-resolver@1.3.3: + resolution: {integrity: sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==} + urbackup-server-api@0.8.9: resolution: {integrity: sha512-Igu6A0xSZeMsiN6PWT7zG4aD+iJR5fXT/j5+xwAvnD/vCNfvVrettIsXv6MftxOajvTmtlgaYu8KDoH1EJQ6DQ==} @@ -2804,16 +2903,37 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@emnapi/core@1.4.0': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': dependencies: eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.21.0(jiti@2.4.2))': + dependencies: + eslint: 9.21.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.19.2': @@ -3006,9 +3126,16 @@ snapshots: - encoding - utf-8-validate + '@napi-rs/wasm-runtime@0.2.8': + dependencies: + '@emnapi/core': 1.4.0 + '@emnapi/runtime': 1.4.0 + '@tybys/wasm-util': 0.9.0 + optional: true + '@next/env@15.2.3': {} - '@next/eslint-plugin-next@15.1.7': + '@next/eslint-plugin-next@15.2.4': dependencies: fast-glob: 3.3.1 @@ -3046,7 +3173,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.19.1 '@nolyfill/is-core-module@1.0.39': {} @@ -3080,7 +3207,7 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@rushstack/eslint-patch@1.10.5': {} + '@rushstack/eslint-patch@1.11.0': {} '@sindresorhus/is@5.6.0': {} @@ -3169,6 +3296,11 @@ snapshots: '@tanstack/virtual-core@3.13.0': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -3238,83 +3370,130 @@ snapshots: dependencies: '@types/node': 22.13.4 - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/type-utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.29.0 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.1': + '@typescript-eslint/scope-manager@8.29.0': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.1': {} + '@typescript-eslint/types@8.29.0': {} - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.29.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/visitor-keys': 8.29.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.21.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.29.0 + '@typescript-eslint/types': 8.29.0 + '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.1': + '@typescript-eslint/visitor-keys@8.29.0': dependencies: - '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/types': 8.29.0 eslint-visitor-keys: 4.2.0 + '@unrs/resolver-binding-darwin-arm64@1.3.3': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.3.3': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.3.3': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.3.3': + dependencies: + '@napi-rs/wasm-runtime': 0.2.8 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.3.3': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.3.3': + optional: true + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -3900,16 +4079,16 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.1.7(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-config-next@15.2.4(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@next/eslint-plugin-next': 15.1.7 - '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@next/eslint-plugin-next': 15.2.4 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react: 7.37.4(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.21.0(jiti@2.4.2)) @@ -3932,33 +4111,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)): + eslint-import-resolver-typescript@3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 - enhanced-resolve: 5.18.1 eslint: 9.21.0(jiti@2.4.2) get-tsconfig: 4.10.0 - is-bun-module: 1.3.0 - stable-hash: 0.0.4 - tinyglobby: 0.2.11 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + unrs-resolver: 1.3.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.8.2(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) + eslint-import-resolver-typescript: 3.10.0(eslint-plugin-import@2.31.0)(eslint@9.21.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -3969,7 +4148,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.21.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.8.2)(eslint@9.21.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.0)(eslint@9.21.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -3981,7 +4160,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -4139,9 +4318,9 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.19.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fdir@6.4.3(picomatch@4.0.2): optionalDependencies: @@ -4417,7 +4596,7 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 - is-bun-module@1.3.0: + is-bun-module@2.0.0: dependencies: semver: 7.7.1 @@ -5106,7 +5285,7 @@ snapshots: dependencies: lowercase-keys: 3.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rfc4648@1.5.4: {} @@ -5268,7 +5447,7 @@ snapshots: cpu-features: 0.0.10 nan: 2.22.0 - stable-hash@0.0.4: {} + stable-hash@0.0.5: {} stack-trace@0.0.10: {} @@ -5428,7 +5607,7 @@ snapshots: tiny-invariant@1.3.3: {} - tinyglobby@0.2.11: + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 @@ -5459,7 +5638,7 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.1.0(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -5524,6 +5703,24 @@ snapshots: unpipe@1.0.0: {} + unrs-resolver@1.3.3: + optionalDependencies: + '@unrs/resolver-binding-darwin-arm64': 1.3.3 + '@unrs/resolver-binding-darwin-x64': 1.3.3 + '@unrs/resolver-binding-freebsd-x64': 1.3.3 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.3.3 + '@unrs/resolver-binding-linux-arm64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-arm64-musl': 1.3.3 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-s390x-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-gnu': 1.3.3 + '@unrs/resolver-binding-linux-x64-musl': 1.3.3 + '@unrs/resolver-binding-wasm32-wasi': 1.3.3 + '@unrs/resolver-binding-win32-arm64-msvc': 1.3.3 + '@unrs/resolver-binding-win32-ia32-msvc': 1.3.3 + '@unrs/resolver-binding-win32-x64-msvc': 1.3.3 + urbackup-server-api@0.8.9: dependencies: async-mutex: 0.3.2 From dbc26e835c25b519086304999bf94e9db17647c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:36:44 -0700 Subject: [PATCH 88/93] Chore(deps): Bump swr from 1.3.0 to 2.3.3 (#5111) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 29 +++++++++++++++++++++++------ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 53d1e770..96772f7f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "react-icons": "^5.4.0", "recharts": "^2.15.1", "rrule": "^2.8.1", - "swr": "^1.3.0", + "swr": "^2.3.3", "systeminformation": "^5.25.11", "tough-cookie": "^5.1.2", "urbackup-server-api": "^0.8.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2eabfe9..938fd85b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ^2.8.1 version: 2.8.1 swr: - specifier: ^1.3.0 - version: 1.3.0(react@18.3.1) + specifier: ^2.3.3 + version: 2.3.3(react@18.3.1) systeminformation: specifier: ^5.25.11 version: 5.25.11 @@ -1190,6 +1190,10 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -2628,10 +2632,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@1.3.0: - resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} + swr@2.3.3: + resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 + react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 synckit@0.9.2: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} @@ -2770,6 +2774,11 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -3899,6 +3908,8 @@ snapshots: depd@2.0.0: {} + dequal@2.0.3: {} + detect-libc@1.0.3: {} detect-libc@2.0.3: @@ -5557,9 +5568,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@1.3.0(react@18.3.1): + swr@2.3.3(react@18.3.1): dependencies: + dequal: 2.0.3 react: 18.3.1 + use-sync-external-store: 1.5.0(react@18.3.1) synckit@0.9.2: dependencies: @@ -5732,6 +5745,10 @@ snapshots: dependencies: punycode: 2.3.1 + use-sync-external-store@1.5.0(react@18.3.1): + dependencies: + react: 18.3.1 + util-deprecate@1.0.2: {} uuid@10.0.0: {} From 52399e21e137264c944078f1bb54ab0a77dee816 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:48:28 -0700 Subject: [PATCH 89/93] Fix depth issue with t --- src/components/quicklaunch.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index 14f0f4fb..7278647f 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -204,7 +204,8 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea return () => { abortController.abort(); }; - }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url, t]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchString, servicesAndBookmarks, searchDescriptions, hideVisitURL, searchSuggestions, searchProvider, url]); const [hidden, setHidden] = useState(true); useEffect(() => { From 6597ec566bb164b8815b8cfbfbf79af1632b545e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:52:33 -0700 Subject: [PATCH 90/93] Fix translation issue --- src/components/quicklaunch.jsx | 2 +- src/components/services/ping.jsx | 2 +- src/components/services/site-monitor.jsx | 2 +- src/components/services/status.jsx | 2 +- src/components/services/widget/error.jsx | 2 +- src/components/widgets/widget/error.jsx | 2 +- src/widgets/lubelogger/component.jsx | 2 +- src/widgets/prowlarr/component.jsx | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index 7278647f..a9827659 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -1,6 +1,6 @@ import classNames from "classnames"; +import { useTranslation } from "next-i18next"; import { useCallback, useContext, useEffect, useRef, useState } from "react"; -import { useTranslation } from "react-i18next"; import useSWR from "swr"; import { SettingsContext } from "utils/contexts/settings"; diff --git a/src/components/services/ping.jsx b/src/components/services/ping.jsx index 670f9d4b..f8665e33 100644 --- a/src/components/services/ping.jsx +++ b/src/components/services/ping.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function Ping({ groupName, serviceName, style }) { diff --git a/src/components/services/site-monitor.jsx b/src/components/services/site-monitor.jsx index 4dceb44c..79496f65 100644 --- a/src/components/services/site-monitor.jsx +++ b/src/components/services/site-monitor.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function SiteMonitor({ groupName, serviceName, style }) { diff --git a/src/components/services/status.jsx b/src/components/services/status.jsx index 3a6f3b33..2688ca0f 100644 --- a/src/components/services/status.jsx +++ b/src/components/services/status.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useSWR from "swr"; export default function Status({ service, style }) { diff --git a/src/components/services/widget/error.jsx b/src/components/services/widget/error.jsx index 30c41283..0d4757d3 100644 --- a/src/components/services/widget/error.jsx +++ b/src/components/services/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import { IoAlertCircle } from "react-icons/io5"; function displayError(error) { diff --git a/src/components/widgets/widget/error.jsx b/src/components/widgets/widget/error.jsx index e454256f..e0e8b1e1 100644 --- a/src/components/widgets/widget/error.jsx +++ b/src/components/widgets/widget/error.jsx @@ -1,4 +1,4 @@ -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import { BiError } from "react-icons/bi"; import Container from "./container"; diff --git a/src/widgets/lubelogger/component.jsx b/src/widgets/lubelogger/component.jsx index 390b74ea..5ec88983 100644 --- a/src/widgets/lubelogger/component.jsx +++ b/src/widgets/lubelogger/component.jsx @@ -1,6 +1,6 @@ import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; diff --git a/src/widgets/prowlarr/component.jsx b/src/widgets/prowlarr/component.jsx index 13d388f7..e454c1a7 100644 --- a/src/widgets/prowlarr/component.jsx +++ b/src/widgets/prowlarr/component.jsx @@ -1,6 +1,6 @@ import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; -import { useTranslation } from "react-i18next"; +import { useTranslation } from "next-i18next"; import useWidgetAPI from "utils/proxy/use-widget-api"; From ae9fbdcb8bae4c00388aca132faa67d6b33069e1 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 5 Apr 2025 23:54:48 -0700 Subject: [PATCH 91/93] Chore: change hoarder widget to karakeep (#5143) --- docs/widgets/services/hoarder.md | 17 ------- docs/widgets/services/index.md | 2 +- docs/widgets/services/karakeep.md | 17 +++++++ mkdocs.yml | 2 +- public/locales/en/common.json | 2 +- src/components/services/widget/container.jsx | 17 ++++++- src/utils/proxy/handlers/credentialed.js | 1 + src/widgets/components.js | 3 +- src/widgets/hoarder/component.jsx | 49 -------------------- src/widgets/karakeep/component.jsx | 49 ++++++++++++++++++++ src/widgets/{hoarder => karakeep}/widget.js | 0 src/widgets/widgets.js | 5 +- 12 files changed, 91 insertions(+), 73 deletions(-) delete mode 100644 docs/widgets/services/hoarder.md create mode 100644 docs/widgets/services/karakeep.md delete mode 100644 src/widgets/hoarder/component.jsx create mode 100644 src/widgets/karakeep/component.jsx rename src/widgets/{hoarder => karakeep}/widget.js (100%) diff --git a/docs/widgets/services/hoarder.md b/docs/widgets/services/hoarder.md deleted file mode 100644 index 3e8c82ad..00000000 --- a/docs/widgets/services/hoarder.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Hoarder -description: Hoarder Widget Configuration ---- - -Learn more about [Hoarder](https://hoarder.app). - -Generate an API key for your user at `User Settings > API Keys`. - -Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). - -```yaml -widget: - type: hoarder - url: http[s]://hoarder.host.or.ip[:port] - key: hoarderapikey -``` diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md index beb6d491..80ff72ba 100644 --- a/docs/widgets/services/index.md +++ b/docs/widgets/services/index.md @@ -51,7 +51,7 @@ You can also find a list of all available service widgets in the sidebar navigat - [HDHomeRun](hdhomerun.md) - [Headscale](headscale.md) - [Healthchecks](healthchecks.md) -- [Hoarder](hoarder.md) +- [Karakeep](karakeep.md) - [Home Assistant](homeassistant.md) - [HomeBox](homebox.md) - [Homebridge](homebridge.md) diff --git a/docs/widgets/services/karakeep.md b/docs/widgets/services/karakeep.md new file mode 100644 index 00000000..a2902315 --- /dev/null +++ b/docs/widgets/services/karakeep.md @@ -0,0 +1,17 @@ +--- +title: Karakeep +description: Karakeep Widget Configuration +--- + +Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder). + +Generate an API key for your user at `User Settings > API Keys`. + +Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4). + +```yaml +widget: + type: karakeep + url: http[s]://karakeep.host.or.ip[:port] + key: karakeep_api_key +``` diff --git a/mkdocs.yml b/mkdocs.yml index 01a5295b..8bb19e43 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -74,7 +74,7 @@ nav: - widgets/services/hdhomerun.md - widgets/services/headscale.md - widgets/services/healthchecks.md - - widgets/services/hoarder.md + - widgets/services/karakeep.md - widgets/services/homeassistant.md - widgets/services/homebox.md - widgets/services/homebridge.md diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 4a9c33d5..09b9c2d3 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1024,7 +1024,7 @@ "bcharge":"Battery Charge", "timeleft":"Time Left" }, - "hoarder": { + "karakeep": { "bookmarks": "Bookmarks", "favorites": "Favorites", "archived": "Archived", diff --git a/src/components/services/widget/container.jsx b/src/components/services/widget/container.jsx index 9b10233c..f5957382 100644 --- a/src/components/services/widget/container.jsx +++ b/src/components/services/widget/container.jsx @@ -3,6 +3,11 @@ import { SettingsContext } from "utils/contexts/settings"; import Error from "./error"; +const ALIASED_WIDGETS = { + pialert: "netalertx", + hoarder: "karakeep", +}; + export default function Container({ error = false, children, service }) { const { settings } = useContext(SettingsContext); @@ -32,7 +37,17 @@ export default function Container({ error = false, children, service }) { if (!field.includes(".")) { fullField = `${type}.${field}`; } - return fullField === child?.props?.label; + let matches = fullField === child?.props?.label; + // check if the field is an 'alias' + if (matches) { + return true; + } else if (ALIASED_WIDGETS[type]) { + matches = fullField.replace(type, ALIASED_WIDGETS[type]) === child?.props?.label; + + return matches; + } + // no match + return false; }), ); } diff --git a/src/utils/proxy/handlers/credentialed.js b/src/utils/proxy/handlers/credentialed.js index d0dbc2d6..017d44c9 100644 --- a/src/utils/proxy/handlers/credentialed.js +++ b/src/utils/proxy/handlers/credentialed.js @@ -42,6 +42,7 @@ export default async function credentialedProxyHandler(req, res, map) { "ghostfolio", "headscale", "hoarder", + "karakeep", "linkwarden", "mealie", "netalertx", diff --git a/src/widgets/components.js b/src/widgets/components.js index 148a626b..880c8222 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -47,7 +47,8 @@ const components = { grafana: dynamic(() => import("./grafana/component")), hdhomerun: dynamic(() => import("./hdhomerun/component")), headscale: dynamic(() => import("./headscale/component")), - hoarder: dynamic(() => import("./hoarder/component")), + hoarder: dynamic(() => import("./karakeep/component")), + karakeep: dynamic(() => import("./karakeep/component")), peanut: dynamic(() => import("./peanut/component")), homeassistant: dynamic(() => import("./homeassistant/component")), homebox: dynamic(() => import("./homebox/component")), diff --git a/src/widgets/hoarder/component.jsx b/src/widgets/hoarder/component.jsx deleted file mode 100644 index 4be6fbab..00000000 --- a/src/widgets/hoarder/component.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import Block from "components/services/widget/block"; -import Container from "components/services/widget/container"; -import { useTranslation } from "next-i18next"; - -import useWidgetAPI from "utils/proxy/use-widget-api"; - -export const hoarderDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; -const MAX_ALLOWED_FIELDS = 4; - -export default function Component({ service }) { - const { t } = useTranslation(); - const { widget } = service; - - const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); - - if (statsError) { - return <Container service={service} error={statsError} />; - } - - if (!widget.fields || widget.fields.length === 0) { - widget.fields = hoarderDefaultFields; - } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { - widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); - } - - if (!statsData) { - return ( - <Container service={service}> - <Block label="hoarder.bookmarks" /> - <Block label="hoarder.favorites" /> - <Block label="hoarder.archived" /> - <Block label="hoarder.highlights" /> - <Block label="hoarder.lists" /> - <Block label="hoarder.tags" /> - </Container> - ); - } - - return ( - <Container service={service}> - <Block label="hoarder.bookmarks" value={t("common.number", { value: statsData.numBookmarks })} /> - <Block label="hoarder.favorites" value={t("common.number", { value: statsData.numFavorites })} /> - <Block label="hoarder.archived" value={t("common.number", { value: statsData.numArchived })} /> - <Block label="hoarder.highlights" value={t("common.number", { value: statsData.numHighlights })} /> - <Block label="hoarder.lists" value={t("common.number", { value: statsData.numLists })} /> - <Block label="hoarder.tags" value={t("common.number", { value: statsData.numTags })} /> - </Container> - ); -} diff --git a/src/widgets/karakeep/component.jsx b/src/widgets/karakeep/component.jsx new file mode 100644 index 00000000..8a74662d --- /dev/null +++ b/src/widgets/karakeep/component.jsx @@ -0,0 +1,49 @@ +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import { useTranslation } from "next-i18next"; + +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export const karakeepDefaultFields = ["bookmarks", "favorites", "archived", "highlights"]; +const MAX_ALLOWED_FIELDS = 4; + +export default function Component({ service }) { + const { t } = useTranslation(); + const { widget } = service; + + const { data: statsData, error: statsError } = useWidgetAPI(widget, "stats"); + + if (statsError) { + return <Container service={service} error={statsError} />; + } + + if (!widget.fields || widget.fields.length === 0) { + widget.fields = karakeepDefaultFields; + } else if (widget.fields?.length > MAX_ALLOWED_FIELDS) { + widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); + } + + if (!statsData) { + return ( + <Container service={service}> + <Block label="karakeep.bookmarks" /> + <Block label="karakeep.favorites" /> + <Block label="karakeep.archived" /> + <Block label="karakeep.highlights" /> + <Block label="karakeep.lists" /> + <Block label="karakeep.tags" /> + </Container> + ); + } + + return ( + <Container service={service}> + <Block label="karakeep.bookmarks" value={t("common.number", { value: statsData.numBookmarks })} /> + <Block label="karakeep.favorites" value={t("common.number", { value: statsData.numFavorites })} /> + <Block label="karakeep.archived" value={t("common.number", { value: statsData.numArchived })} /> + <Block label="karakeep.highlights" value={t("common.number", { value: statsData.numHighlights })} /> + <Block label="karakeep.lists" value={t("common.number", { value: statsData.numLists })} /> + <Block label="karakeep.tags" value={t("common.number", { value: statsData.numTags })} /> + </Container> + ); +} diff --git a/src/widgets/hoarder/widget.js b/src/widgets/karakeep/widget.js similarity index 100% rename from src/widgets/hoarder/widget.js rename to src/widgets/karakeep/widget.js diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 992855d0..e183a9c6 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -42,7 +42,6 @@ import grafana from "./grafana/widget"; import hdhomerun from "./hdhomerun/widget"; import headscale from "./headscale/widget"; import healthchecks from "./healthchecks/widget"; -import hoarder from "./hoarder/widget"; import homeassistant from "./homeassistant/widget"; import homebox from "./homebox/widget"; import homebridge from "./homebridge/widget"; @@ -50,6 +49,7 @@ import immich from "./immich/widget"; import jackett from "./jackett/widget"; import jdownloader from "./jdownloader/widget"; import jellyseerr from "./jellyseerr/widget"; +import karakeep from "./karakeep/widget"; import kavita from "./kavita/widget"; import komga from "./komga/widget"; import kopia from "./kopia/widget"; @@ -178,7 +178,8 @@ const widgets = { grafana, hdhomerun, headscale, - hoarder, + hoarder: karakeep, + karakeep, homeassistant, homebox, homebridge, From e2c997f29d10cd6dddb60d17e8205b7ab55c8942 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 7 Apr 2025 23:59:22 -0700 Subject: [PATCH 92/93] Change: install iputils-ping inside docker image (#5153) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ec59c6b0..cac7623e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -49,7 +49,7 @@ COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/ COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./ COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static -RUN apk add --no-cache su-exec +RUN apk add --no-cache su-exec iputils-ping ENV NODE_ENV=production ENV HOSTNAME=0.0.0.0 From 0a1bf3b2be10220e5ee5ec8de7578f8f35bedd7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 15:08:54 -0700 Subject: [PATCH 93/93] Chore(deps): Bump next from 15.2.3 to 15.2.4 (#5159) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 106 +++++++++++++++++++++++-------------------------- 2 files changed, 50 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 96772f7f..0c3afd92 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "luxon": "^3.5.0", "memory-cache": "^0.2.0", "minecraftstatuspinger": "^1.2.2", - "next": "^15.2.3", + "next": "^15.2.4", "next-i18next": "^12.1.0", "ping": "^0.4.4", "pretty-bytes": "^6.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 938fd85b..170e380e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,11 +51,11 @@ importers: specifier: ^1.2.2 version: 1.2.2 next: - specifier: ^15.2.3 - version: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^15.2.4 + version: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-i18next: specifier: ^12.1.0 - version: 12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) ping: specifier: ^0.4.4 version: 0.4.4 @@ -182,9 +182,6 @@ packages: '@emnapi/core@1.4.0': resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} - '@emnapi/runtime@1.4.0': resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} @@ -401,56 +398,56 @@ packages: '@napi-rs/wasm-runtime@0.2.8': resolution: {integrity: sha512-OBlgKdX7gin7OIq4fadsjpg+cp2ZphvAIKucHsNfTdJiqdOmOEwQd/bHi0VwNrcw5xpBJyUw6cK/QilCqy1BSg==} - '@next/env@15.2.3': - resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} '@next/eslint-plugin-next@15.2.4': resolution: {integrity: sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==} - '@next/swc-darwin-arm64@15.2.3': - resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.3': - resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.3': - resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.3': - resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.3': - resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.3': - resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.3': - resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.3': - resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -985,8 +982,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001706: - resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==} + caniuse-lite@1.0.30001712: + resolution: {integrity: sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -2085,8 +2082,8 @@ packages: next: '>= 10.0.0' react: '>= 16.8.0' - next@15.2.3: - resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -2918,11 +2915,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.3.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.4.0': dependencies: tslib: 2.8.1 @@ -3078,7 +3070,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -3142,34 +3134,34 @@ snapshots: '@tybys/wasm-util': 0.9.0 optional: true - '@next/env@15.2.3': {} + '@next/env@15.2.4': {} '@next/eslint-plugin-next@15.2.4': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.3': + '@next/swc-darwin-arm64@15.2.4': optional: true - '@next/swc-darwin-x64@15.2.3': + '@next/swc-darwin-x64@15.2.4': optional: true - '@next/swc-linux-arm64-gnu@15.2.3': + '@next/swc-linux-arm64-gnu@15.2.4': optional: true - '@next/swc-linux-arm64-musl@15.2.3': + '@next/swc-linux-arm64-musl@15.2.4': optional: true - '@next/swc-linux-x64-gnu@15.2.3': + '@next/swc-linux-x64-gnu@15.2.4': optional: true - '@next/swc-linux-x64-musl@15.2.3': + '@next/swc-linux-x64-musl@15.2.4': optional: true - '@next/swc-win32-arm64-msvc@15.2.3': + '@next/swc-win32-arm64-msvc@15.2.4': optional: true - '@next/swc-win32-x64-msvc@15.2.3': + '@next/swc-win32-x64-msvc@15.2.4': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3703,7 +3695,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001706: {} + caniuse-lite@1.0.30001712: {} chalk@4.1.2: dependencies: @@ -4913,7 +4905,7 @@ snapshots: natural-compare@1.4.0: {} - next-i18next@12.1.0(next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-i18next@12.1.0(next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.26.9 '@types/hoist-non-react-statics': 3.3.6 @@ -4921,33 +4913,33 @@ snapshots: hoist-non-react-statics: 3.3.2 i18next: 21.10.0 i18next-fs-backend: 1.2.0 - next: 15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - react-dom - react-native - next@15.2.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.2.3 + '@next/env': 15.2.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001706 + caniuse-lite: 1.0.30001712 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.3 - '@next/swc-darwin-x64': 15.2.3 - '@next/swc-linux-arm64-gnu': 15.2.3 - '@next/swc-linux-arm64-musl': 15.2.3 - '@next/swc-linux-x64-gnu': 15.2.3 - '@next/swc-linux-x64-musl': 15.2.3 - '@next/swc-win32-arm64-msvc': 15.2.3 - '@next/swc-win32-x64-msvc': 15.2.3 + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core'