Compare commits

...

16 Commits

Author SHA1 Message Date
github-actions[bot]
986a18170c New Crowdin translations by GitHub Action (#3321)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-05-05 20:51:37 -07:00
Ben Phelps
198835a697 allow seperate href for widget container links
addresses #3140
2024-05-04 19:34:38 +03:00
dependabot[bot]
5efed2e740 Chore(deps-dev): Bump eslint-config-next from 12.3.4 to 14.2.3 (#3399)
Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 12.3.4 to 14.2.3.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/commits/v14.2.3/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 12:08:26 -07:00
dependabot[bot]
43e258a58d Chore(deps): Bump react from 18.2.0 to 18.3.1 (#3400)
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 18.2.0 to 18.3.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react)

---
updated-dependencies:
- dependency-name: react
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 09:44:31 -07:00
dependabot[bot]
8ca7f422da Chore(deps): Bump systeminformation from 5.22.0 to 5.22.7 (#3398)
Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.22.0 to 5.22.7.
- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sebhildebrandt/systeminformation/compare/v5.22.0...v5.22.7)

---
updated-dependencies:
- dependency-name: systeminformation
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 09:44:07 -07:00
dependabot[bot]
4fc70eb1ff Chore(deps-dev): Bump typescript from 4.9.5 to 5.4.5 (#3396)
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.9.5 to 5.4.5.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.9.5...v5.4.5)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 09:43:52 -07:00
dependabot[bot]
d90bf8079a Chore(deps): Bump recharts from 2.12.3 to 2.12.6 (#3397)
Bumps [recharts](https://github.com/recharts/recharts) from 2.12.3 to 2.12.6.
- [Release notes](https://github.com/recharts/recharts/releases)
- [Changelog](https://github.com/recharts/recharts/blob/3.x/CHANGELOG.md)
- [Commits](https://github.com/recharts/recharts/compare/v2.12.3...v2.12.6)

---
updated-dependencies:
- dependency-name: recharts
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 09:24:21 -07:00
shamoon
ea63716b61 Fix: some error URLs aren't sanitized (#3385) 2024-04-29 17:18:55 -07:00
Edward Salter
daa51f9740 Fix: format Romm statistics (#3358) 2024-04-23 14:13:53 -07:00
Ameer Abdallah
340424391f Enhancement: add bitrate precision config option for speedtest-tracker (#3354)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-04-22 21:20:08 -07:00
Ameer Abdallah
312e97d18b Enhancement: additional tautulli jellyfin emby configuration options (#3350) 2024-04-22 17:49:19 -07:00
Liam Dyer
f4fc30cd9f Documentation: update Authentik suggested permissions (#3349) 2024-04-22 13:59:23 -07:00
Nuno Alexandre
595049f7fc Documentation: clarify uptime kuma slug (#3345)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-04-22 12:33:35 -07:00
shamoon
79e3eb9c90 Documentation: fix docker stats link 2024-04-21 07:12:49 -07:00
David Hirsch
c95837f54e Enhancement: configurable CPU temp scale (#3332)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-04-19 16:32:14 -07:00
lavavex
068e664f16 Documentation: correct Medusa link (#3320) 2024-04-17 17:00:37 -07:00
29 changed files with 786 additions and 592 deletions

View File

@@ -235,4 +235,4 @@ You can show the docker stats by clicking the status indicator but this can also
showStats: true showStats: true
``` ```
Also see the settings for [show docker stats](docker.md#show-docker-stats). Also see the settings for [show docker stats](settings.md#show-docker-stats).

View File

@@ -19,6 +19,8 @@ _Note: unfortunately, the package used for getting CPU temp ([systeminformation]
memory: true memory: true
disk: /disk/mount/path disk: /disk/mount/path
cputemp: true cputemp: true
tempmin: 0 # optional, minimum cpu temp
tempmax: 100 # optional, maximum cpu temp
uptime: true uptime: true
units: imperial # only used by cpu temp units: imperial # only used by cpu temp
refresh: 3000 # optional, in ms refresh: 3000 # optional, in ms

View File

@@ -12,10 +12,8 @@ Make sure to set Intent to "API Token".
The account you made the API token for also needs the following **Assigned global permissions** in Authentik: The account you made the API token for also needs the following **Assigned global permissions** in Authentik:
- authentik Core - authentik Core -> Can view User (Model: User)
- User - authentik Events -> Can view Event (Model: Event)
- authentik Events
- Event
Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`. Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`.

View File

@@ -17,4 +17,6 @@ widget:
enableBlocks: true # optional, defaults to false enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false enableUser: true # optional, defaults to false
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
``` ```

View File

@@ -16,4 +16,7 @@ widget:
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
enableBlocks: true # optional, defaults to false enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
``` ```

View File

@@ -3,7 +3,7 @@ title: Medusa
description: Medusa Widget Configuration description: Medusa Widget Configuration
--- ---
Learn more about [Medusa](https://github.com/medusajs/medusa). Learn more about [Medusa](https://github.com/pymedusa/Medusa).
Allowed fields: `["wanted", "queued", "series"]`. Allowed fields: `["wanted", "queued", "series"]`.

View File

@@ -15,4 +15,6 @@ widget:
url: http://tautulli.host.or.ip url: http://tautulli.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
enableUser: true # optional, defaults to false enableUser: true # optional, defaults to false
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
``` ```

View File

@@ -16,4 +16,5 @@ Allowed fields: `["download", "upload", "ping"]`.
widget: widget:
type: speedtest type: speedtest
url: http://speedtest.host.or.ip url: http://speedtest.host.or.ip
bitratePrecision: 3 # optional, default is 0
``` ```

View File

@@ -5,7 +5,7 @@ description: Uptime Kuma Widget Configuration
Learn more about [Uptime Kuma](https://github.com/louislam/uptime-kuma). Learn more about [Uptime Kuma](https://github.com/louislam/uptime-kuma).
As Uptime Kuma does not yet have a full API the widget uses data from a single "status page". As such you will need a status page setup with a group of monitored sites, which is where you get the slug (without the `/status/` portion). As Uptime Kuma does not yet have a full API the widget uses data from a single "status page". As such you will need a status page setup with a group of monitored sites, which is where you get the slug (the url without the `/status/` portion). E.g. if your status page is URL http://uptimekuma.host/status/statuspageslug, insert `slug: statuspageslug`.
Allowed fields: `["up", "down", "uptime", "incident"]`. Allowed fields: `["up", "down", "uptime", "incident"]`.

202
package-lock.json generated
View File

@@ -27,14 +27,14 @@
"ping": "^0.4.4", "ping": "^0.4.4",
"pretty-bytes": "^6.1.1", "pretty-bytes": "^6.1.1",
"raw-body": "^2.5.2", "raw-body": "^2.5.2",
"react": "^18.2.0", "react": "^18.3.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^11.18.6", "react-i18next": "^11.18.6",
"react-icons": "^4.12.0", "react-icons": "^4.12.0",
"recharts": "^2.12.3", "recharts": "^2.12.6",
"rrule": "^2.8.1", "rrule": "^2.8.1",
"swr": "^1.3.0", "swr": "^1.3.0",
"systeminformation": "^5.22.0", "systeminformation": "^5.22.7",
"tough-cookie": "^4.1.3", "tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.8.9", "urbackup-server-api": "^0.8.9",
"winston": "^3.11.0", "winston": "^3.11.0",
@@ -45,7 +45,7 @@
"autoprefixer": "^10.4.17", "autoprefixer": "^10.4.17",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^12.3.4", "eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-jsx-a11y": "^6.8.0",
@@ -56,7 +56,7 @@
"prettier": "^3.2.5", "prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5", "tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"typescript": "^4.9.5" "typescript": "^5.4.5"
}, },
"optionalDependencies": { "optionalDependencies": {
"osx-temperature-sensor": "^1.0.8" "osx-temperature-sensor": "^1.0.8"
@@ -344,12 +344,58 @@
"integrity": "sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==" "integrity": "sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A=="
}, },
"node_modules/@next/eslint-plugin-next": { "node_modules/@next/eslint-plugin-next": {
"version": "12.3.4", "version": "14.2.3",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz",
"integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==", "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"glob": "7.1.7" "glob": "10.3.10"
}
},
"node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@next/eslint-plugin-next/node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.5",
"minimatch": "^9.0.1",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
"path-scurry": "^1.10.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@next/eslint-plugin-next/node_modules/minimatch": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
"integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/@next/swc-android-arm-eabi": { "node_modules/@next/swc-android-arm-eabi": {
@@ -2318,6 +2364,19 @@
"once": "^1.4.0" "once": "^1.4.0"
} }
}, },
"node_modules/enhanced-resolve": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/entities": { "node_modules/entities": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -2604,20 +2663,20 @@
} }
}, },
"node_modules/eslint-config-next": { "node_modules/eslint-config-next": {
"version": "12.3.4", "version": "14.2.3",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz", "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz",
"integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==", "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@next/eslint-plugin-next": "12.3.4", "@next/eslint-plugin-next": "14.2.3",
"@rushstack/eslint-patch": "^1.1.3", "@rushstack/eslint-patch": "^1.3.3",
"@typescript-eslint/parser": "^5.21.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0",
"eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-node": "^0.3.6",
"eslint-import-resolver-typescript": "^2.7.1", "eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.28.1",
"eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.31.7", "eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.5.0" "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "^7.23.0 || ^8.0.0", "eslint": "^7.23.0 || ^8.0.0",
@@ -2662,45 +2721,30 @@
} }
}, },
"node_modules/eslint-import-resolver-typescript": { "node_modules/eslint-import-resolver-typescript": {
"version": "2.7.1", "version": "3.6.1",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
"integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"debug": "^4.3.4", "debug": "^4.3.4",
"glob": "^7.2.0", "enhanced-resolve": "^5.12.0",
"is-glob": "^4.0.3", "eslint-module-utils": "^2.7.4",
"resolve": "^1.22.0", "fast-glob": "^3.3.1",
"tsconfig-paths": "^3.14.1" "get-tsconfig": "^4.5.0",
"is-core-module": "^2.11.0",
"is-glob": "^4.0.3"
}, },
"engines": { "engines": {
"node": ">=4" "node": "^14.18.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
}, },
"peerDependencies": { "peerDependencies": {
"eslint": "*", "eslint": "*",
"eslint-plugin-import": "*" "eslint-plugin-import": "*"
} }
}, },
"node_modules/eslint-import-resolver-typescript/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/eslint-module-utils": { "node_modules/eslint-module-utils": {
"version": "2.8.0", "version": "2.8.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
@@ -3436,6 +3480,18 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/get-tsconfig": {
"version": "4.7.3",
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
"integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
"dev": true,
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
"funding": {
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
"node_modules/getpass": { "node_modules/getpass": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@@ -3561,6 +3617,12 @@
"url": "https://github.com/sindresorhus/got?sponsor=1" "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
},
"node_modules/graphemer": { "node_modules/graphemer": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@@ -5652,9 +5714,9 @@
} }
}, },
"node_modules/react": { "node_modules/react": {
"version": "18.2.0", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
}, },
@@ -5772,9 +5834,9 @@
} }
}, },
"node_modules/recharts": { "node_modules/recharts": {
"version": "2.12.3", "version": "2.12.6",
"resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.3.tgz", "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz",
"integrity": "sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==", "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==",
"dependencies": { "dependencies": {
"clsx": "^2.0.0", "clsx": "^2.0.0",
"eventemitter3": "^4.0.1", "eventemitter3": "^4.0.1",
@@ -5933,6 +5995,15 @@
"node": ">=4" "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,
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"node_modules/responselike": { "node_modules/responselike": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
@@ -6663,9 +6734,9 @@
} }
}, },
"node_modules/systeminformation": { "node_modules/systeminformation": {
"version": "5.22.0", "version": "5.22.7",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.0.tgz", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.7.tgz",
"integrity": "sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==", "integrity": "sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==",
"os": [ "os": [
"darwin", "darwin",
"linux", "linux",
@@ -6789,6 +6860,15 @@
"node": ">=14" "node": ">=14"
} }
}, },
"node_modules/tapable": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/tar": { "node_modules/tar": {
"version": "6.2.0", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
@@ -7091,16 +7171,16 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "4.9.5", "version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
}, },
"engines": { "engines": {
"node": ">=4.2.0" "node": ">=14.17"
} }
}, },
"node_modules/unbox-primitive": { "node_modules/unbox-primitive": {

View File

@@ -29,14 +29,14 @@
"ping": "^0.4.4", "ping": "^0.4.4",
"pretty-bytes": "^6.1.1", "pretty-bytes": "^6.1.1",
"raw-body": "^2.5.2", "raw-body": "^2.5.2",
"react": "^18.2.0", "react": "^18.3.1",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^11.18.6", "react-i18next": "^11.18.6",
"react-icons": "^4.12.0", "react-icons": "^4.12.0",
"recharts": "^2.12.3", "recharts": "^2.12.6",
"rrule": "^2.8.1", "rrule": "^2.8.1",
"swr": "^1.3.0", "swr": "^1.3.0",
"systeminformation": "^5.22.0", "systeminformation": "^5.22.7",
"tough-cookie": "^4.1.3", "tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.8.9", "urbackup-server-api": "^0.8.9",
"winston": "^3.11.0", "winston": "^3.11.0",
@@ -47,7 +47,7 @@
"autoprefixer": "^10.4.17", "autoprefixer": "^10.4.17",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^12.3.4", "eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-jsx-a11y": "^6.8.0",
@@ -58,7 +58,7 @@
"prettier": "^3.2.5", "prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5", "tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"typescript": "^4.9.5" "typescript": "^5.4.5"
}, },
"optionalDependencies": { "optionalDependencies": {
"osx-temperature-sensor": "^1.0.8" "osx-temperature-sensor": "^1.0.8"

241
pnpm-lock.yaml generated
View File

@@ -7,7 +7,7 @@ settings:
dependencies: dependencies:
'@headlessui/react': '@headlessui/react':
specifier: ^1.7.18 specifier: ^1.7.18
version: 1.7.18(react-dom@18.2.0)(react@18.2.0) version: 1.7.18(react-dom@18.2.0)(react@18.3.1)
'@kubernetes/client-node': '@kubernetes/client-node':
specifier: ^0.17.1 specifier: ^0.17.1
version: 0.17.1 version: 0.17.1
@@ -49,10 +49,10 @@ dependencies:
version: 1.0.2 version: 1.0.2
next: next:
specifier: ^12.3.4 specifier: ^12.3.4
version: 12.3.4(react-dom@18.2.0)(react@18.2.0) version: 12.3.4(react-dom@18.2.0)(react@18.3.1)
next-i18next: next-i18next:
specifier: ^12.1.0 specifier: ^12.1.0
version: 12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.2.0) version: 12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.3.1)
ping: ping:
specifier: ^0.4.4 specifier: ^0.4.4
version: 0.4.4 version: 0.4.4
@@ -63,29 +63,29 @@ dependencies:
specifier: ^2.5.2 specifier: ^2.5.2
version: 2.5.2 version: 2.5.2
react: react:
specifier: ^18.2.0 specifier: ^18.3.1
version: 18.2.0 version: 18.3.1
react-dom: react-dom:
specifier: ^18.2.0 specifier: ^18.2.0
version: 18.2.0(react@18.2.0) version: 18.2.0(react@18.3.1)
react-i18next: react-i18next:
specifier: ^11.18.6 specifier: ^11.18.6
version: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0) version: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1)
react-icons: react-icons:
specifier: ^4.12.0 specifier: ^4.12.0
version: 4.12.0(react@18.2.0) version: 4.12.0(react@18.3.1)
recharts: recharts:
specifier: ^2.12.3 specifier: ^2.12.6
version: 2.12.3(react-dom@18.2.0)(react@18.2.0) version: 2.12.6(react-dom@18.2.0)(react@18.3.1)
rrule: rrule:
specifier: ^2.8.1 specifier: ^2.8.1
version: 2.8.1 version: 2.8.1
swr: swr:
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0(react@18.2.0) version: 1.3.0(react@18.3.1)
systeminformation: systeminformation:
specifier: ^5.22.0 specifier: ^5.22.7
version: 5.22.0 version: 5.22.7
tough-cookie: tough-cookie:
specifier: ^4.1.3 specifier: ^4.1.3
version: 4.1.3 version: 4.1.3
@@ -118,14 +118,14 @@ devDependencies:
specifier: ^19.0.4 specifier: ^19.0.4
version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0) version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@8.57.0)
eslint-config-next: eslint-config-next:
specifier: ^12.3.4 specifier: ^14.2.3
version: 12.3.4(eslint@8.57.0)(typescript@4.9.5) version: 14.2.3(eslint@8.57.0)(typescript@5.4.5)
eslint-config-prettier: eslint-config-prettier:
specifier: ^9.1.0 specifier: ^9.1.0
version: 9.1.0(eslint@8.57.0) version: 9.1.0(eslint@8.57.0)
eslint-plugin-import: eslint-plugin-import:
specifier: ^2.29.1 specifier: ^2.29.1
version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-jsx-a11y: eslint-plugin-jsx-a11y:
specifier: ^6.8.0 specifier: ^6.8.0
version: 6.8.0(eslint@8.57.0) version: 6.8.0(eslint@8.57.0)
@@ -151,8 +151,8 @@ devDependencies:
specifier: ^3.4.3 specifier: ^3.4.3
version: 3.4.3 version: 3.4.3
typescript: typescript:
specifier: ^4.9.5 specifier: ^5.4.5
version: 4.9.5 version: 5.4.5
packages: packages:
@@ -226,17 +226,17 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.2.0): /@headlessui/react@1.7.18(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==} resolution: {integrity: sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
peerDependencies: peerDependencies:
react: ^16 || ^17 || ^18 react: ^16 || ^17 || ^18
react-dom: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18
dependencies: dependencies:
'@tanstack/react-virtual': 3.0.2(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-virtual': 3.0.2(react-dom@18.2.0)(react@18.3.1)
client-only: 0.0.1 client-only: 0.0.1
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
dev: false dev: false
/@humanwhocodes/config-array@0.11.14: /@humanwhocodes/config-array@0.11.14:
@@ -329,10 +329,10 @@ packages:
resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==}
dev: false dev: false
/@next/eslint-plugin-next@12.3.4: /@next/eslint-plugin-next@14.2.3:
resolution: {integrity: sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==} resolution: {integrity: sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==}
dependencies: dependencies:
glob: 7.1.7 glob: 10.3.10
dev: true dev: true
/@next/swc-android-arm-eabi@12.3.4: /@next/swc-android-arm-eabi@12.3.4:
@@ -511,15 +511,15 @@ packages:
tailwindcss: 3.4.3 tailwindcss: 3.4.3
dev: true dev: true
/@tanstack/react-virtual@3.0.2(react-dom@18.2.0)(react@18.2.0): /@tanstack/react-virtual@3.0.2(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-9XbRLPKgnhMwwmuQMnJMv+5a9sitGNCSEtf/AZXzmJdesYk7XsjYHaEDny+IrJzvPNwZliIIDwCRiaUqR3zzCA==} resolution: {integrity: sha512-9XbRLPKgnhMwwmuQMnJMv+5a9sitGNCSEtf/AZXzmJdesYk7XsjYHaEDny+IrJzvPNwZliIIDwCRiaUqR3zzCA==}
peerDependencies: peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies: dependencies:
'@tanstack/virtual-core': 3.0.0 '@tanstack/virtual-core': 3.0.0
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
dev: false dev: false
/@tanstack/virtual-core@3.0.0: /@tanstack/virtual-core@3.0.0:
@@ -603,7 +603,7 @@ packages:
resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==}
dev: false dev: false
/@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5): /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -615,10 +615,10 @@ packages:
dependencies: dependencies:
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
typescript: 4.9.5 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@@ -636,7 +636,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5):
resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -651,8 +651,8 @@ packages:
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.4 semver: 7.5.4
tsutils: 3.21.0(typescript@4.9.5) tsutils: 3.21.0(typescript@5.4.5)
typescript: 4.9.5 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@@ -1596,6 +1596,14 @@ packages:
once: 1.4.0 once: 1.4.0
dev: false dev: false
/enhanced-resolve@5.16.0:
resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
engines: {node: '>=10.13.0'}
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.1
dev: true
/entities@4.5.0: /entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
@@ -1808,7 +1816,7 @@ packages:
dependencies: dependencies:
confusing-browser-globals: 1.0.11 confusing-browser-globals: 1.0.11
eslint: 8.57.0 eslint: 8.57.0
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
object.assign: 4.1.5 object.assign: 4.1.5
object.entries: 1.1.7 object.entries: 1.1.7
semver: 6.3.1 semver: 6.3.1
@@ -1826,7 +1834,7 @@ packages:
dependencies: dependencies:
eslint: 8.57.0 eslint: 8.57.0
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0)
@@ -1834,8 +1842,8 @@ packages:
object.entries: 1.1.7 object.entries: 1.1.7
dev: true dev: true
/eslint-config-next@12.3.4(eslint@8.57.0)(typescript@4.9.5): /eslint-config-next@14.2.3(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==} resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
@@ -1843,17 +1851,17 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@next/eslint-plugin-next': 12.3.4 '@next/eslint-plugin-next': 14.2.3
'@rushstack/eslint-patch': 1.7.2 '@rushstack/eslint-patch': 1.7.2
'@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0)
typescript: 4.9.5 typescript: 5.4.5
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
@@ -1878,25 +1886,30 @@ packages:
- supports-color - supports-color
dev: true dev: true
/eslint-import-resolver-typescript@2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0): /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: '>=4'} engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: '*' eslint: '*'
eslint-plugin-import: '*' eslint-plugin-import: '*'
dependencies: dependencies:
debug: 4.3.4 debug: 4.3.4
enhanced-resolve: 5.16.0
eslint: 8.57.0 eslint: 8.57.0
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
glob: 7.2.3 eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.3
is-core-module: 2.13.1
is-glob: 4.0.3 is-glob: 4.0.3
resolve: 1.22.8
tsconfig-paths: 3.15.0
transitivePeerDependencies: transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color - supports-color
dev: true dev: true
/eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@@ -1917,16 +1930,16 @@ packages:
eslint-import-resolver-webpack: eslint-import-resolver-webpack:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
debug: 3.2.7 debug: 3.2.7
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 2.7.1(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0): /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@@ -1936,7 +1949,7 @@ packages:
'@typescript-eslint/parser': '@typescript-eslint/parser':
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5)
array-includes: 3.1.7 array-includes: 3.1.7
array.prototype.findlastindex: 1.2.3 array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2 array.prototype.flat: 1.3.2
@@ -1945,7 +1958,7 @@ packages:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.57.0 eslint: 8.57.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@2.7.1)(eslint@8.57.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
hasown: 2.0.0 hasown: 2.0.0
is-core-module: 2.13.1 is-core-module: 2.13.1
is-glob: 4.0.3 is-glob: 4.0.3
@@ -2398,6 +2411,12 @@ packages:
get-intrinsic: 1.2.4 get-intrinsic: 1.2.4
dev: true dev: true
/get-tsconfig@4.7.3:
resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==}
dependencies:
resolve-pkg-maps: 1.0.0
dev: true
/getpass@0.1.7: /getpass@0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
dependencies: dependencies:
@@ -2430,17 +2449,6 @@ packages:
path-scurry: 1.10.1 path-scurry: 1.10.1
dev: true dev: true
/glob@7.1.7:
resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
/glob@7.2.3: /glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies: dependencies:
@@ -2500,6 +2508,10 @@ packages:
responselike: 3.0.0 responselike: 3.0.0
dev: false dev: false
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
/graphemer@1.4.0: /graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
dev: true dev: true
@@ -3302,7 +3314,7 @@ packages:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
dev: true dev: true
/next-i18next@12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.2.0): /next-i18next@12.1.0(next@12.3.4)(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==} resolution: {integrity: sha512-rhos/PVULmZPdC0jpec2MDBQMXdGZ3+Mbh/tZfrDtjgnVN3ucdq7k8BlwsJNww6FnqC8AC31n6dSYuqVzYsGsw==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
@@ -3315,15 +3327,15 @@ packages:
hoist-non-react-statics: 3.3.2 hoist-non-react-statics: 3.3.2
i18next: 21.10.0 i18next: 21.10.0
i18next-fs-backend: 1.2.0 i18next-fs-backend: 1.2.0
next: 12.3.4(react-dom@18.2.0)(react@18.2.0) next: 12.3.4(react-dom@18.2.0)(react@18.3.1)
react: 18.2.0 react: 18.3.1
react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0) react-i18next: 11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1)
transitivePeerDependencies: transitivePeerDependencies:
- react-dom - react-dom
- react-native - react-native
dev: false dev: false
/next@12.3.4(react-dom@18.2.0)(react@18.2.0): /next@12.3.4(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==} resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==}
engines: {node: '>=12.22.0'} engines: {node: '>=12.22.0'}
hasBin: true hasBin: true
@@ -3345,10 +3357,10 @@ packages:
'@swc/helpers': 0.4.11 '@swc/helpers': 0.4.11
caniuse-lite: 1.0.30001581 caniuse-lite: 1.0.30001581
postcss: 8.4.14 postcss: 8.4.14
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
styled-jsx: 5.0.7(react@18.2.0) styled-jsx: 5.0.7(react@18.3.1)
use-sync-external-store: 1.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.3.1)
optionalDependencies: optionalDependencies:
'@next/swc-android-arm-eabi': 12.3.4 '@next/swc-android-arm-eabi': 12.3.4
'@next/swc-android-arm64': 12.3.4 '@next/swc-android-arm64': 12.3.4
@@ -3810,17 +3822,17 @@ packages:
unpipe: 1.0.0 unpipe: 1.0.0
dev: false dev: false
/react-dom@18.2.0(react@18.2.0): /react-dom@18.2.0(react@18.3.1):
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies: peerDependencies:
react: ^18.2.0 react: ^18.2.0
dependencies: dependencies:
loose-envify: 1.4.0 loose-envify: 1.4.0
react: 18.2.0 react: 18.3.1
scheduler: 0.23.0 scheduler: 0.23.0
dev: false dev: false
/react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.2.0): /react-i18next@11.18.6(i18next@21.10.0)(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==} resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==}
peerDependencies: peerDependencies:
i18next: '>= 19.0.0' i18next: '>= 19.0.0'
@@ -3836,22 +3848,22 @@ packages:
'@babel/runtime': 7.23.9 '@babel/runtime': 7.23.9
html-parse-stringify: 3.0.1 html-parse-stringify: 3.0.1
i18next: 21.10.0 i18next: 21.10.0
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
dev: false dev: false
/react-icons@4.12.0(react@18.2.0): /react-icons@4.12.0(react@18.3.1):
resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==}
peerDependencies: peerDependencies:
react: '*' react: '*'
dependencies: dependencies:
react: 18.2.0 react: 18.3.1
dev: false dev: false
/react-is@16.13.1: /react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
/react-smooth@4.0.0(react-dom@18.2.0)(react@18.2.0): /react-smooth@4.0.0(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg==} resolution: {integrity: sha512-2NMXOBY1uVUQx1jBeENGA497HK20y6CPGYL1ZnJLeoQ8rrc3UfmOM82sRxtzpcoCkUMy4CS0RGylfuVhuFjBgg==}
peerDependencies: peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -3859,12 +3871,12 @@ packages:
dependencies: dependencies:
fast-equals: 5.0.1 fast-equals: 5.0.1
prop-types: 15.8.1 prop-types: 15.8.1
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.3.1)
dev: false dev: false
/react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
peerDependencies: peerDependencies:
react: '>=16.6.0' react: '>=16.6.0'
@@ -3874,12 +3886,12 @@ packages:
dom-helpers: 5.2.1 dom-helpers: 5.2.1
loose-envify: 1.4.0 loose-envify: 1.4.0
prop-types: 15.8.1 prop-types: 15.8.1
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
dev: false dev: false
/react@18.2.0: /react@18.3.1:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dependencies: dependencies:
loose-envify: 1.4.0 loose-envify: 1.4.0
@@ -3934,8 +3946,8 @@ packages:
decimal.js-light: 2.5.1 decimal.js-light: 2.5.1
dev: false dev: false
/recharts@2.12.3(react-dom@18.2.0)(react@18.2.0): /recharts@2.12.6(react-dom@18.2.0)(react@18.3.1):
resolution: {integrity: sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==} resolution: {integrity: sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==}
engines: {node: '>=14'} engines: {node: '>=14'}
peerDependencies: peerDependencies:
react: ^16.0.0 || ^17.0.0 || ^18.0.0 react: ^16.0.0 || ^17.0.0 || ^18.0.0
@@ -3944,10 +3956,10 @@ packages:
clsx: 2.1.0 clsx: 2.1.0
eventemitter3: 4.0.7 eventemitter3: 4.0.7
lodash: 4.17.21 lodash: 4.17.21
react: 18.2.0 react: 18.3.1
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.3.1)
react-is: 16.13.1 react-is: 16.13.1
react-smooth: 4.0.0(react-dom@18.2.0)(react@18.2.0) react-smooth: 4.0.0(react-dom@18.2.0)(react@18.3.1)
recharts-scale: 0.4.5 recharts-scale: 0.4.5
tiny-invariant: 1.3.1 tiny-invariant: 1.3.1
victory-vendor: 36.8.4 victory-vendor: 36.8.4
@@ -4034,6 +4046,10 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true dev: true
/resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
dev: true
/resolve@1.22.8: /resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true hasBin: true
@@ -4450,7 +4466,7 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/styled-jsx@5.0.7(react@18.2.0): /styled-jsx@5.0.7(react@18.3.1):
resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
peerDependencies: peerDependencies:
@@ -4463,7 +4479,7 @@ packages:
babel-plugin-macros: babel-plugin-macros:
optional: true optional: true
dependencies: dependencies:
react: 18.2.0 react: 18.3.1
dev: false dev: false
/sucrase@3.35.0: /sucrase@3.35.0:
@@ -4491,16 +4507,16 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
/swr@1.3.0(react@18.2.0): /swr@1.3.0(react@18.3.1):
resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==}
peerDependencies: peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0 react: ^16.11.0 || ^17.0.0 || ^18.0.0
dependencies: dependencies:
react: 18.2.0 react: 18.3.1
dev: false dev: false
/systeminformation@5.22.0: /systeminformation@5.22.7:
resolution: {integrity: sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==} resolution: {integrity: sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==}
engines: {node: '>=8.0.0'} engines: {node: '>=8.0.0'}
os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android]
hasBin: true hasBin: true
@@ -4546,6 +4562,11 @@ packages:
- ts-node - ts-node
dev: true dev: true
/tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
dev: true
/tar-fs@2.0.1: /tar-fs@2.0.1:
resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==}
dependencies: dependencies:
@@ -4675,14 +4696,14 @@ packages:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: false dev: false
/tsutils@3.21.0(typescript@4.9.5): /tsutils@3.21.0(typescript@5.4.5):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
peerDependencies: peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies: dependencies:
tslib: 1.14.1 tslib: 1.14.1
typescript: 4.9.5 typescript: 5.4.5
dev: true dev: true
/tunnel-agent@0.6.0: /tunnel-agent@0.6.0:
@@ -4789,9 +4810,9 @@ packages:
possible-typed-array-names: 1.0.0 possible-typed-array-names: 1.0.0
dev: true dev: true
/typescript@4.9.5: /typescript@5.4.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==}
engines: {node: '>=4.2.0'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
dev: true dev: true
@@ -4850,12 +4871,12 @@ packages:
requires-port: 1.0.0 requires-port: 1.0.0
dev: false dev: false
/use-sync-external-store@1.2.0(react@18.2.0): /use-sync-external-store@1.2.0(react@18.3.1):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
peerDependencies: peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies: dependencies:
react: 18.2.0 react: 18.3.1
dev: false dev: false
/util-deprecate@1.0.2: /util-deprecate@1.0.2:

View File

@@ -142,8 +142,8 @@
"connectionStatusDisconnected": "Getrennt", "connectionStatusDisconnected": "Getrennt",
"connectionStatusConnected": "Verbunden", "connectionStatusConnected": "Verbunden",
"uptime": "Betriebszeit", "uptime": "Betriebszeit",
"maxDown": "Max. Empfang", "maxDown": "Max. Down",
"maxUp": "Max. Senden", "maxUp": "Max. Up",
"down": "Empfangen", "down": "Empfangen",
"up": "Senden", "up": "Senden",
"received": "Empfangen", "received": "Empfangen",
@@ -392,7 +392,7 @@
"authentik": { "authentik": {
"users": "Benutzer", "users": "Benutzer",
"loginsLast24H": "Anmeldungen (24 h)", "loginsLast24H": "Anmeldungen (24 h)",
"failedLoginsLast24H": "Fehlgeschlagene Anmeldungen (24 h)" "failedLoginsLast24H": "Fehlversuche (24 h)"
}, },
"proxmox": { "proxmox": {
"mem": "RAM", "mem": "RAM",

View File

@@ -146,9 +146,9 @@
"maxUp": "Max. Up", "maxUp": "Max. Up",
"down": "Down", "down": "Down",
"up": "Up", "up": "Up",
"received": "Received", "received": "Ληφθέντα",
"sent": "Sent", "sent": "Απεσταλμένα",
"externalIPAddress": "Ext. IP" "externalIPAddress": "Εξωτερική IP"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Upstreams",
@@ -327,7 +327,7 @@
}, },
"traefik": { "traefik": {
"routers": "Routers", "routers": "Routers",
"services": "Services", "services": "Υπηρεσίες",
"middleware": "Middleware" "middleware": "Middleware"
}, },
"navidrome": { "navidrome": {
@@ -522,7 +522,7 @@
"tubearchivist": { "tubearchivist": {
"downloads": "Ουρά", "downloads": "Ουρά",
"videos": "Videos", "videos": "Videos",
"channels": "Channels", "channels": "Κανάλια",
"playlists": "Playlists" "playlists": "Playlists"
}, },
"truenas": { "truenas": {
@@ -542,14 +542,14 @@
"country": "Χώρα" "country": "Χώρα"
}, },
"hdhomerun": { "hdhomerun": {
"channels": "Channels", "channels": "Κανάλια",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "Tuners",
"channelNumber": "Channel", "channelNumber": "Κανάλι",
"channelNetwork": "Network", "channelNetwork": "Δίκτυο",
"signalStrength": "Strength", "signalStrength": "Strength",
"signalQuality": "Quality", "signalQuality": "Ποιότητα",
"symbolQuality": "Quality", "symbolQuality": "Ποιότητα",
"networkRate": "Ρυθμός bit", "networkRate": "Ρυθμός bit",
"clientIP": "Client" "clientIP": "Client"
}, },
@@ -559,7 +559,7 @@
"unknown": "Άγνωστο" "unknown": "Άγνωστο"
}, },
"paperlessngx": { "paperlessngx": {
"inbox": "Inbox", "inbox": "Εισερχόμενα",
"total": "Σύνολο" "total": "Σύνολο"
}, },
"peanut": { "peanut": {
@@ -567,8 +567,8 @@
"ups_load": "UPS Load", "ups_load": "UPS Load",
"ups_status": "UPS Status", "ups_status": "UPS Status",
"online": "Συνδεδεμένοι", "online": "Συνδεδεμένοι",
"on_battery": "On Battery", "on_battery": "Σε μπαταρία",
"low_battery": "Low Battery" "low_battery": "Χαμηλή μπαταρία"
}, },
"nextdns": { "nextdns": {
"wait": "Παρακαλώ περιμένετε", "wait": "Παρακαλώ περιμένετε",
@@ -620,7 +620,7 @@
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"temp": "Temp", "temp": "Temp",
"disk": "Disk Usage", "disk": "Χρήση δίσκου",
"wanIP": "WAN IP" "wanIP": "WAN IP"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
@@ -631,7 +631,7 @@
}, },
"immich": { "immich": {
"users": "Χρήστες", "users": "Χρήστες",
"photos": "Photos", "photos": "Φωτογραφίες",
"videos": "Videos", "videos": "Videos",
"storage": "Storage" "storage": "Storage"
}, },
@@ -646,7 +646,7 @@
"series": "Σειρές", "series": "Σειρές",
"archives": "Archives", "archives": "Archives",
"chapters": "Chapters", "chapters": "Chapters",
"categories": "Categories" "categories": "Κατηγορίες"
}, },
"komga": { "komga": {
"libraries": "Libraries", "libraries": "Libraries",
@@ -665,7 +665,7 @@
}, },
"photoprism": { "photoprism": {
"albums": "Άλμπουμ", "albums": "Άλμπουμ",
"photos": "Photos", "photos": "Φωτογραφίες",
"videos": "Videos", "videos": "Videos",
"people": "People" "people": "People"
}, },
@@ -738,7 +738,7 @@
"calibreweb": { "calibreweb": {
"books": "Βιβλία", "books": "Βιβλία",
"authors": "Authors", "authors": "Authors",
"categories": "Categories", "categories": "Κατηγορίες",
"series": "Σειρές" "series": "Σειρές"
}, },
"jdownloader": { "jdownloader": {
@@ -785,7 +785,7 @@
"mealie": { "mealie": {
"recipes": "Recipes", "recipes": "Recipes",
"users": "Χρήστες", "users": "Χρήστες",
"categories": "Categories", "categories": "Κατηγορίες",
"tags": "Tags" "tags": "Tags"
}, },
"openmediavault": { "openmediavault": {
@@ -802,7 +802,7 @@
"up": "Up", "up": "Up",
"down": "Down", "down": "Down",
"bytesTx": "Transmitted", "bytesTx": "Transmitted",
"bytesRx": "Received" "bytesRx": "Ληφθέντα"
}, },
"uptimerobot": { "uptimerobot": {
"status": "Κατάσταση", "status": "Κατάσταση",
@@ -836,7 +836,7 @@
"plantit": { "plantit": {
"events": "Events", "events": "Events",
"plants": "Plants", "plants": "Plants",
"photos": "Photos", "photos": "Φωτογραφίες",
"species": "Species" "species": "Species"
}, },
"gitea": { "gitea": {

View File

@@ -15,13 +15,13 @@
"relativeDate": "{{value, relativeDate}}", "relativeDate": "{{value, relativeDate}}",
"uptime": "{{value, uptime}}", "uptime": "{{value, uptime}}",
"months": "mo", "months": "mo",
"days": "d", "days": "j",
"hours": "h", "hours": "h",
"minutes": "m", "minutes": "m",
"seconds": "s" "seconds": "s"
}, },
"widget": { "widget": {
"missing_type": "Widget manquant: {{type}}", "missing_type": "Type de widget manquant: {{type}}",
"api_error": "Erreur API", "api_error": "Erreur API",
"information": "Informations", "information": "Informations",
"status": "Statut", "status": "Statut",
@@ -40,7 +40,7 @@
}, },
"resources": { "resources": {
"cpu": "CPU", "cpu": "CPU",
"mem": "Mém", "mem": "MÉM",
"total": "Total", "total": "Total",
"free": "Libre", "free": "Libre",
"used": "Utilisé", "used": "Utilisé",
@@ -69,7 +69,7 @@
"docker": { "docker": {
"rx": "Rx", "rx": "Rx",
"tx": "Tx", "tx": "Tx",
"mem": "Mém", "mem": "MÉM",
"cpu": "CPU", "cpu": "CPU",
"running": "Démarré", "running": "Démarré",
"offline": "Hors ligne", "offline": "Hors ligne",
@@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "Déconnexion en attente", "connectionStatusPendingDisconnect": "Déconnexion en attente",
"connectionStatusDisconnecting": "Déconnexion en cours", "connectionStatusDisconnecting": "Déconnexion en cours",
"connectionStatusDisconnected": "Déconnecté", "connectionStatusDisconnected": "Déconnecté",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "Connecté",
"uptime": "Démarré depuis", "uptime": "Démarré depuis",
"maxDown": "Max. Bas", "maxDown": "Max. Bas",
"maxUp": "Max. Haut", "maxUp": "Max. Haut",
@@ -279,9 +279,9 @@
}, },
"netalertx": { "netalertx": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Connecté",
"new_devices": "New Devices", "new_devices": "Nouveaux appareils",
"down_alerts": "Down Alerts" "down_alerts": "Alertes d'arrêt"
}, },
"pihole": { "pihole": {
"queries": "Requêtes", "queries": "Requêtes",
@@ -395,7 +395,7 @@
"failedLoginsLast24H": "Cnx. échouées (24h)" "failedLoginsLast24H": "Cnx. échouées (24h)"
}, },
"proxmox": { "proxmox": {
"mem": "Mém", "mem": "MÉM",
"cpu": "CPU", "cpu": "CPU",
"lxc": "LxC", "lxc": "LxC",
"vms": "VMs" "vms": "VMs"
@@ -411,7 +411,7 @@
"total": "Total", "total": "Total",
"free": "Libre", "free": "Libre",
"used": "Utilisé", "used": "Utilisé",
"days": "d", "days": "j",
"hours": "h", "hours": "h",
"crit": "Crit.", "crit": "Crit.",
"read": "Lu", "read": "Lu",
@@ -847,18 +847,18 @@
"stash": { "stash": {
"scenes": "Scènes", "scenes": "Scènes",
"scenesPlayed": "Scènes jouées", "scenesPlayed": "Scènes jouées",
"playCount": "Total Plays", "playCount": "Lectures Totales",
"playDuration": "Time Watched", "playDuration": "Temps regardé",
"sceneSize": "Scenes Size", "sceneSize": "Taille des scènes",
"sceneDuration": "Scenes Duration", "sceneDuration": "Durée des scènes",
"images": "Images", "images": "Images",
"imageSize": "Taille des images", "imageSize": "Taille des images",
"galleries": "Galeries", "galleries": "Galeries",
"performers": "Performers", "performers": "Acteurs",
"studios": "Studios", "studios": "Studios",
"movies": "Films", "movies": "Films",
"tags": "Étiquettes", "tags": "Étiquettes",
"oCount": "O Count" "oCount": "0 Compte"
}, },
"tandoor": { "tandoor": {
"users": "Utilisateurs", "users": "Utilisateurs",
@@ -871,10 +871,10 @@
"locations": "Emplacements", "locations": "Emplacements",
"labels": "Étiquettes", "labels": "Étiquettes",
"users": "Utilisateurs", "users": "Utilisateurs",
"totalValue": "Total Value" "totalValue": "Valeur Totale"
}, },
"crowdsec": { "crowdsec": {
"alerts": "Alertes", "alerts": "Alertes",
"bans": "Bans" "bans": "Exclusions"
} }
} }

View File

@@ -80,22 +80,22 @@
"unhealthy": "Usunn", "unhealthy": "Usunn",
"not_found": "Not Found", "not_found": "Not Found",
"exited": "Exited", "exited": "Exited",
"partial": "Partial" "partial": "Delvis"
}, },
"ping": { "ping": {
"error": "Feil", "error": "Feil",
"ping": "Ping", "ping": "Responstid",
"down": "Down", "down": "Nede",
"up": "Up", "up": "Oppe",
"not_available": "Not Available" "not_available": "Ikke tilgjengelig"
}, },
"siteMonitor": { "siteMonitor": {
"http_status": "HTTP status", "http_status": "HTTP status",
"error": "Feil", "error": "Feil",
"response": "Svar", "response": "Svar",
"down": "Down", "down": "Nede",
"up": "Up", "up": "Oppe",
"not_available": "Not Available" "not_available": "Ikke tilgjengelig"
}, },
"emby": { "emby": {
"playing": "Spiller", "playing": "Spiller",
@@ -110,7 +110,7 @@
"esphome": { "esphome": {
"offline": "Frakoblet", "offline": "Frakoblet",
"offline_alt": "Frakoblet", "offline_alt": "Frakoblet",
"online": "Online", "online": "På nett",
"total": "Totalt", "total": "Totalt",
"unknown": "Ukjent" "unknown": "Ukjent"
}, },
@@ -140,12 +140,12 @@
"connectionStatusPendingDisconnect": "Venter på frakobling", "connectionStatusPendingDisconnect": "Venter på frakobling",
"connectionStatusDisconnecting": "Kobler fra", "connectionStatusDisconnecting": "Kobler fra",
"connectionStatusDisconnected": "Frakoblet", "connectionStatusDisconnected": "Frakoblet",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "Tilkoblet",
"uptime": "Oppetid", "uptime": "Oppetid",
"maxDown": "Maks. Ned", "maxDown": "Maks. Ned",
"maxUp": "Max. Opp", "maxUp": "Max. Opp",
"down": "Down", "down": "Nede",
"up": "Up", "up": "Oppe",
"received": "Mottatt", "received": "Mottatt",
"sent": "Sendt", "sent": "Sendt",
"externalIPAddress": "Ekstern IP" "externalIPAddress": "Ekstern IP"
@@ -279,8 +279,8 @@
}, },
"netalertx": { "netalertx": {
"total": "Totalt", "total": "Totalt",
"connected": "Connected", "connected": "Tilkoblet",
"new_devices": "New Devices", "new_devices": "Nye enheter",
"down_alerts": "Down Alerts" "down_alerts": "Down Alerts"
}, },
"pihole": { "pihole": {
@@ -298,7 +298,7 @@
"speedtest": { "speedtest": {
"upload": "Opplastning", "upload": "Opplastning",
"download": "Last ned", "download": "Last ned",
"ping": "Ping" "ping": "Responstid"
}, },
"portainer": { "portainer": {
"running": "Kjører", "running": "Kjører",
@@ -321,57 +321,57 @@
}, },
"tdarr": { "tdarr": {
"queue": "Kø", "queue": "Kø",
"processed": "Processed", "processed": "Behandlet",
"errored": "Errored", "errored": "Feilet",
"saved": "Saved" "saved": "Lagret"
}, },
"traefik": { "traefik": {
"routers": "Routers", "routers": "Rutere",
"services": "Services", "services": "Tjenester",
"middleware": "Middleware" "middleware": "Mellomvare"
}, },
"navidrome": { "navidrome": {
"nothing_streaming": "Ingen aktive strømminger", "nothing_streaming": "Ingen aktive strømminger",
"please_wait": "Please Wait" "please_wait": "Vennligst vent"
}, },
"npm": { "npm": {
"enabled": "Enabled", "enabled": "Aktivert",
"disabled": "Disabled", "disabled": "Deaktivert",
"total": "Totalt" "total": "Totalt"
}, },
"coinmarketcap": { "coinmarketcap": {
"configure": "Configure one or more crypto currencies to track", "configure": "Konfigurer én eller flere krypteringsvalutaer som skal spores",
"1hour": "1 Hour", "1hour": "Én time",
"1day": "1 Day", "1day": "Én dag",
"7days": "7 Days", "7days": "7 dager",
"30days": "30 Days" "30days": "30 dager"
}, },
"gotify": { "gotify": {
"apps": "Applications", "apps": "Applikasjoner",
"clients": "Clients", "clients": "Klienter",
"messages": "Messages" "messages": "Meldinger"
}, },
"prowlarr": { "prowlarr": {
"enableIndexers": "Indexers", "enableIndexers": "Indeksere",
"numberOfGrabs": "Grabs", "numberOfGrabs": "Tatt",
"numberOfQueries": "Spørringer", "numberOfQueries": "Spørringer",
"numberOfFailGrabs": "Fail Grabs", "numberOfFailGrabs": "Feil ved henting",
"numberOfFailQueries": "Fail Queries" "numberOfFailQueries": "Spørring mislyktes"
}, },
"jackett": { "jackett": {
"configured": "Configured", "configured": "Konfigurert",
"errored": "Errored" "errored": "Feilet"
}, },
"strelaysrv": { "strelaysrv": {
"numActiveSessions": "Sessions", "numActiveSessions": "Sesjoner",
"numConnections": "Connections", "numConnections": "Tilkoblinger",
"dataRelayed": "Relayed", "dataRelayed": "Videresendt",
"transferRate": "Ranger" "transferRate": "Ranger"
}, },
"mastodon": { "mastodon": {
"user_count": "Brukere", "user_count": "Brukere",
"status_count": "Posts", "status_count": "Innlegg",
"domain_count": "Domains" "domain_count": "Domener"
}, },
"medusa": { "medusa": {
"wanted": "Ønsket", "wanted": "Ønsket",
@@ -379,10 +379,10 @@
"series": "Serie" "series": "Serie"
}, },
"minecraft": { "minecraft": {
"players": "Players", "players": "Spillere",
"version": "Versjon", "version": "Versjon",
"status": "Status", "status": "Status",
"up": "Online", "up": "På nett",
"down": "Frakoblet" "down": "Frakoblet"
}, },
"miniflux": { "miniflux": {
@@ -494,15 +494,15 @@
"up_to_date": "Oppdatert", "up_to_date": "Oppdatert",
"child_bridges": "Child Bridges", "child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Up", "up": "Oppe",
"pending": "Ventende", "pending": "Ventende",
"down": "Down" "down": "Nede"
}, },
"healthchecks": { "healthchecks": {
"new": "Ny", "new": "Ny",
"up": "Up", "up": "Oppe",
"grace": "I rammeperiode", "grace": "I rammeperiode",
"down": "Down", "down": "Nede",
"paused": "Pauset", "paused": "Pauset",
"status": "Status", "status": "Status",
"last_ping": "Siste Ping", "last_ping": "Siste Ping",
@@ -517,7 +517,7 @@
"approvedPushes": "Godkjent", "approvedPushes": "Godkjent",
"rejectedPushes": "Avvist", "rejectedPushes": "Avvist",
"filters": "Filtre", "filters": "Filtre",
"indexers": "Indexers" "indexers": "Indeksere"
}, },
"tubearchivist": { "tubearchivist": {
"downloads": "Kø", "downloads": "Kø",
@@ -566,12 +566,12 @@
"battery_charge": "Batteriladning", "battery_charge": "Batteriladning",
"ups_load": "UPS last", "ups_load": "UPS last",
"ups_status": "UPS status", "ups_status": "UPS status",
"online": "Online", "online": "På nett",
"on_battery": "På batteri", "on_battery": "På batteri",
"low_battery": "Lavt batterinivå" "low_battery": "Lavt batterinivå"
}, },
"nextdns": { "nextdns": {
"wait": "Please Wait", "wait": "Vennligst vent",
"no_devices": "Ingen enhetsdata mottatt" "no_devices": "Ingen enhetsdata mottatt"
}, },
"mikrotik": { "mikrotik": {
@@ -617,8 +617,8 @@
"load": "Load Avg", "load": "Load Avg",
"memory": "Mem Usage", "memory": "Mem Usage",
"wanStatus": "WAN Status", "wanStatus": "WAN Status",
"up": "Up", "up": "Oppe",
"down": "Down", "down": "Nede",
"temp": "Temp", "temp": "Temp",
"disk": "Disk Usage", "disk": "Disk Usage",
"wanIP": "WAN IP" "wanIP": "WAN IP"
@@ -672,7 +672,7 @@
"fileflows": { "fileflows": {
"queue": "Kø", "queue": "Kø",
"processing": "Behandler", "processing": "Behandler",
"processed": "Processed", "processed": "Behandlet",
"time": "Time" "time": "Time"
}, },
"grafana": { "grafana": {
@@ -698,17 +698,17 @@
}, },
"unmanic": { "unmanic": {
"active_workers": "Active Workers", "active_workers": "Active Workers",
"total_workers": "Total Workers", "total_workers": "Totalt antall Arbeidere",
"records_total": "Queue Length" "records_total": "Kø lengde"
}, },
"pterodactyl": { "pterodactyl": {
"servers": "Servers", "servers": "Servere",
"nodes": "Nodes" "nodes": "Noder"
}, },
"prometheus": { "prometheus": {
"targets_up": "Targets Up", "targets_up": "Mål oppe",
"targets_down": "Targets Down", "targets_down": "Mål nede",
"targets_total": "Total Targets" "targets_total": "Totalt antall mål"
}, },
"gatus": { "gatus": {
"up": "Nettsteder opp", "up": "Nettsteder opp",
@@ -717,27 +717,27 @@
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Idag", "gross_percent_today": "Idag",
"gross_percent_1y": "One year", "gross_percent_1y": "Ett år",
"gross_percent_max": "All time" "gross_percent_max": "Gjennom tidene"
}, },
"audiobookshelf": { "audiobookshelf": {
"podcasts": "Podcasts", "podcasts": "Podkaster",
"books": "Bøker", "books": "Bøker",
"podcastsDuration": "Duration", "podcastsDuration": "Varighet",
"booksDuration": "Duration" "booksDuration": "Varighet"
}, },
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "Personer hjemme",
"lights_on": "Lights On", "lights_on": "Lys på",
"switches_on": "Switches On" "switches_on": "Slår På"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Overvåker",
"updates": "Oppdateringer" "updates": "Oppdateringer"
}, },
"calibreweb": { "calibreweb": {
"books": "Bøker", "books": "Bøker",
"authors": "Authors", "authors": "Forfattere",
"categories": "Categories", "categories": "Categories",
"series": "Serie" "series": "Serie"
}, },
@@ -766,15 +766,15 @@
}, },
"gamedig": { "gamedig": {
"status": "Status", "status": "Status",
"online": "Online", "online": "På nett",
"offline": "Frakoblet", "offline": "Frakoblet",
"name": "Navn", "name": "Navn",
"map": "Kart", "map": "Kart",
"currentPlayers": "Aktuelle spillere", "currentPlayers": "Aktuelle spillere",
"players": "Players", "players": "Spillere",
"maxPlayers": "Maks spillere", "maxPlayers": "Maks spillere",
"bots": "Bots", "bots": "Bots",
"ping": "Ping" "ping": "Responstid"
}, },
"urbackup": { "urbackup": {
"ok": "Ok", "ok": "Ok",
@@ -799,8 +799,8 @@
"openwrt": { "openwrt": {
"uptime": "Oppetid", "uptime": "Oppetid",
"cpuLoad": "CPU-belastning snitt (5m)", "cpuLoad": "CPU-belastning snitt (5m)",
"up": "Up", "up": "Oppe",
"down": "Down", "down": "Nede",
"bytesTx": "Sendt", "bytesTx": "Sendt",
"bytesRx": "Mottatt" "bytesRx": "Mottatt"
}, },
@@ -813,9 +813,9 @@
"sitesDown": "Sites Down", "sitesDown": "Sites Down",
"paused": "Pauset", "paused": "Pauset",
"notyetchecked": "Ikke sjekket enda", "notyetchecked": "Ikke sjekket enda",
"up": "Up", "up": "Oppe",
"seemsdown": "Virker nede", "seemsdown": "Virker nede",
"down": "Down", "down": "Nede",
"unknown": "Ukjent" "unknown": "Ukjent"
}, },
"calendar": { "calendar": {
@@ -842,7 +842,7 @@
"gitea": { "gitea": {
"notifications": "Varslinger", "notifications": "Varslinger",
"issues": "Issues", "issues": "Issues",
"pulls": "Pull Requests" "pulls": "Forespørsel"
}, },
"stash": { "stash": {
"scenes": "Scener", "scenes": "Scener",

View File

@@ -22,11 +22,11 @@
}, },
"widget": { "widget": {
"missing_type": "Tipo de Widget ausente: {{type}}", "missing_type": "Tipo de Widget ausente: {{type}}",
"api_error": "Erro da API", "api_error": "Erros de API",
"information": "Informação", "information": "Informação",
"status": "Estado", "status": "Estado",
"url": "Endereço URL", "url": "Endereço URL",
"raw_error": "Erro", "raw_error": "Erro Raw",
"response_data": "Dados da Resposta" "response_data": "Dados da Resposta"
}, },
"weather": { "weather": {
@@ -101,7 +101,7 @@
"playing": "A reproduzir", "playing": "A reproduzir",
"transcoding": "Transcodificação", "transcoding": "Transcodificação",
"bitrate": "Taxa de bits", "bitrate": "Taxa de bits",
"no_active": "Sem streams ativas", "no_active": "Sem Streams Ativos",
"movies": "Filmes", "movies": "Filmes",
"series": "Séries", "series": "Séries",
"episodes": "Episódios", "episodes": "Episódios",
@@ -110,7 +110,7 @@
"esphome": { "esphome": {
"offline": "Desligado", "offline": "Desligado",
"offline_alt": "Desligado", "offline_alt": "Desligado",
"online": "Online", "online": "Disponível",
"total": "Total", "total": "Total",
"unknown": "Desconhecido" "unknown": "Desconhecido"
}, },
@@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "Desconexão Pendente", "connectionStatusPendingDisconnect": "Desconexão Pendente",
"connectionStatusDisconnecting": "Desconectando", "connectionStatusDisconnecting": "Desconectando",
"connectionStatusDisconnected": "Desconectado", "connectionStatusDisconnected": "Desconectado",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "Conectado",
"uptime": "Ligado", "uptime": "Ligado",
"maxDown": "Max. Down", "maxDown": "Max. Down",
"maxUp": "Max. Up", "maxUp": "Max. Up",
@@ -151,7 +151,7 @@
"externalIPAddress": "IP Externo" "externalIPAddress": "IP Externo"
}, },
"caddy": { "caddy": {
"upstreams": "Upstreams", "upstreams": "Streams de Envio",
"requests": "Solicitações atuais", "requests": "Solicitações atuais",
"requests_failed": "Solicitações com falha" "requests_failed": "Solicitações com falha"
}, },
@@ -169,15 +169,15 @@
"playing": "A reproduzir", "playing": "A reproduzir",
"transcoding": "Transcodificação", "transcoding": "Transcodificação",
"bitrate": "Taxa de bits", "bitrate": "Taxa de bits",
"no_active": "Sem streams ativas", "no_active": "Sem Streams Ativos",
"plex_connection_error": "Verifique a conexão do Plex" "plex_connection_error": "Verifique a conexão do Plex"
}, },
"omada": { "omada": {
"connectedAp": "APs Ligados", "connectedAp": "APs Ligados",
"activeUser": "Dispositivos activos", "activeUser": "Dispositivos ativos",
"alerts": "Alertas", "alerts": "Alertas",
"connectedGateway": "Gateways ligados", "connectedGateway": "Gateways conectados",
"connectedSwitches": "Switches ligados" "connectedSwitches": "Switches conectados"
}, },
"nzbget": { "nzbget": {
"rate": "Taxa", "rate": "Taxa",
@@ -217,8 +217,8 @@
"memUsage": "Uso de Memória", "memUsage": "Uso de Memória",
"systemTempC": "Temp. do Sistema", "systemTempC": "Temp. do Sistema",
"poolUsage": "Pool Usage", "poolUsage": "Pool Usage",
"volumeUsage": "Volume Usage", "volumeUsage": "Uso do volume",
"invalid": "Invalid" "invalid": "Inválido"
}, },
"deluge": { "deluge": {
"download": "Descarregar", "download": "Descarregar",
@@ -250,7 +250,7 @@
"lidarr": { "lidarr": {
"wanted": "Desejada", "wanted": "Desejada",
"queued": "Em fila", "queued": "Em fila",
"artists": "Artists" "artists": "Artistas"
}, },
"readarr": { "readarr": {
"wanted": "Desejada", "wanted": "Desejada",
@@ -279,14 +279,14 @@
}, },
"netalertx": { "netalertx": {
"total": "Total", "total": "Total",
"connected": "Connected", "connected": "Conectado",
"new_devices": "New Devices", "new_devices": "Novos dispositivos",
"down_alerts": "Down Alerts" "down_alerts": "Alertas de Inatividade"
}, },
"pihole": { "pihole": {
"queries": "Consultas", "queries": "Consultas",
"blocked": "Bloqueado", "blocked": "Bloqueado",
"blocked_percent": "Blocked %", "blocked_percent": "Bloqueado %",
"gravity": "Gravidade" "gravity": "Gravidade"
}, },
"adguard": { "adguard": {
@@ -306,11 +306,11 @@
"total": "Total" "total": "Total"
}, },
"tailscale": { "tailscale": {
"address": "Address", "address": "Endereço",
"expires": "Expires", "expires": "Expira em",
"never": "Never", "never": "Nunca",
"last_seen": "Last Seen", "last_seen": "Visto por último",
"now": "Now", "now": "Agora",
"years": "{{number}}y", "years": "{{number}}y",
"weeks": "{{number}}w", "weeks": "{{number}}w",
"days": "{{number}}d", "days": "{{number}}d",
@@ -331,8 +331,8 @@
"middleware": "Middleware" "middleware": "Middleware"
}, },
"navidrome": { "navidrome": {
"nothing_streaming": "Sem streams ativas", "nothing_streaming": "Sem Streams Ativos",
"please_wait": "Por favor aguarde" "please_wait": "Por favor, aguarde"
}, },
"npm": { "npm": {
"enabled": "Ativo", "enabled": "Ativo",
@@ -382,7 +382,7 @@
"players": "Reprodutores", "players": "Reprodutores",
"version": "Versão", "version": "Versão",
"status": "Estado", "status": "Estado",
"up": "Online", "up": "Disponível",
"down": "Desligado" "down": "Desligado"
}, },
"miniflux": { "miniflux": {
@@ -405,20 +405,20 @@
"load": "Carga", "load": "Carga",
"wait": "Por favor aguarde", "wait": "Por favor aguarde",
"temp": "TEMP", "temp": "TEMP",
"_temp": "Temp", "_temp": "Temperatura",
"warn": "Warn", "warn": "Aviso",
"uptime": "CIMA", "uptime": "CIMA",
"total": "Total", "total": "Total",
"free": "Livre", "free": "Livre",
"used": "Utilizado", "used": "Utilizado",
"days": "d", "days": "d",
"hours": "h", "hours": "h",
"crit": "Crit", "crit": "Crítico",
"read": "Lido", "read": "Lido",
"write": "Write", "write": "Escrita",
"gpu": "GPU", "gpu": "GPU",
"mem": "Mem", "mem": "Memória",
"swap": "Swap" "swap": "Temporário"
}, },
"quicklaunch": { "quicklaunch": {
"bookmark": "Marcador", "bookmark": "Marcador",
@@ -427,7 +427,7 @@
"custom": "Personalizado", "custom": "Personalizado",
"visit": "Visitar", "visit": "Visitar",
"url": "Endereço URL", "url": "Endereço URL",
"searchsuggestion": "Suggestion" "searchsuggestion": "Sugestão"
}, },
"wmo": { "wmo": {
"0-day": "Solarengo", "0-day": "Solarengo",
@@ -544,14 +544,14 @@
"hdhomerun": { "hdhomerun": {
"channels": "Canais", "channels": "Canais",
"hd": "HD", "hd": "HD",
"tunerCount": "Tuners", "tunerCount": "Sintonizadores",
"channelNumber": "Channel", "channelNumber": "Canal",
"channelNetwork": "Network", "channelNetwork": "Rede",
"signalStrength": "Strength", "signalStrength": "Potência",
"signalQuality": "Quality", "signalQuality": "Qualidade",
"symbolQuality": "Quality", "symbolQuality": "Qualidade",
"networkRate": "Taxa de bits", "networkRate": "Taxa de bits",
"clientIP": "Client" "clientIP": "Cliente"
}, },
"scrutiny": { "scrutiny": {
"passed": "Aprovado", "passed": "Aprovado",
@@ -563,15 +563,15 @@
"total": "Total" "total": "Total"
}, },
"peanut": { "peanut": {
"battery_charge": "Battery Charge", "battery_charge": "Carga da bateria",
"ups_load": "UPS Load", "ups_load": "Carga do UPS",
"ups_status": "UPS Status", "ups_status": "Estado UPS",
"online": "Online", "online": "Disponível",
"on_battery": "On Battery", "on_battery": "Na bateria",
"low_battery": "Low Battery" "low_battery": "Bateria Fraca"
}, },
"nextdns": { "nextdns": {
"wait": "Por favor aguarde", "wait": "Por favor, aguarde",
"no_devices": "Nenhum dado do dispositivo recebido" "no_devices": "Nenhum dado do dispositivo recebido"
}, },
"mikrotik": { "mikrotik": {
@@ -586,10 +586,10 @@
"streams_xepg": "Canais XEPG" "streams_xepg": "Canais XEPG"
}, },
"opendtu": { "opendtu": {
"yieldDay": "Today", "yieldDay": "Hoje",
"absolutePower": "Power", "absolutePower": "Energia",
"relativePower": "Power %", "relativePower": "Energia %",
"limit": "Limit" "limit": "Limite"
}, },
"opnsense": { "opnsense": {
"cpu": "Carga do CPU", "cpu": "Carga do CPU",
@@ -614,14 +614,14 @@
"status": "Estado" "status": "Estado"
}, },
"pfsense": { "pfsense": {
"load": "Load Avg", "load": "Carga Média",
"memory": "Mem Usage", "memory": "Uso de memória",
"wanStatus": "WAN Status", "wanStatus": "Estado WAN",
"up": "Ativo", "up": "Ativo",
"down": "Inativo", "down": "Inativo",
"temp": "Temp", "temp": "Temperatura",
"disk": "Disk Usage", "disk": "Uso do disco",
"wanIP": "WAN IP" "wanIP": "IP WAN"
}, },
"proxmoxbackupserver": { "proxmoxbackupserver": {
"datastore_usage": "Armaz. de Dados", "datastore_usage": "Armaz. de Dados",
@@ -644,9 +644,9 @@
}, },
"atsumeru": { "atsumeru": {
"series": "Séries", "series": "Séries",
"archives": "Archives", "archives": "Arquivos",
"chapters": "Chapters", "chapters": "Capítulos",
"categories": "Categories" "categories": "Categorias"
}, },
"komga": { "komga": {
"libraries": "Bibliotecas", "libraries": "Bibliotecas",
@@ -686,8 +686,8 @@
"memoryusage": "Memória Utilizada", "memoryusage": "Memória Utilizada",
"freespace": "Espaço Livre", "freespace": "Espaço Livre",
"activeusers": "Utilizadores Ativos", "activeusers": "Utilizadores Ativos",
"numfiles": "Files", "numfiles": "Arquivos",
"numshares": "Shared Items" "numshares": "Itens compartilhados"
}, },
"kopia": { "kopia": {
"status": "Estado", "status": "Estado",
@@ -698,7 +698,7 @@
}, },
"unmanic": { "unmanic": {
"active_workers": "Workers Ativos", "active_workers": "Workers Ativos",
"total_workers": "Total Workers", "total_workers": "Total de trabalhadores",
"records_total": "Comprimento da Fila" "records_total": "Comprimento da Fila"
}, },
"pterodactyl": { "pterodactyl": {
@@ -716,7 +716,7 @@
"uptime": "Ligado" "uptime": "Ligado"
}, },
"ghostfolio": { "ghostfolio": {
"gross_percent_today": "Today", "gross_percent_today": "Hoje",
"gross_percent_1y": "Um ano", "gross_percent_1y": "Um ano",
"gross_percent_max": "Todo o tempo" "gross_percent_max": "Todo o tempo"
}, },
@@ -732,13 +732,13 @@
"switches_on": "Interruptores Ligados" "switches_on": "Interruptores Ligados"
}, },
"whatsupdocker": { "whatsupdocker": {
"monitoring": "Monitoring", "monitoring": "Monitorando",
"updates": "Atualizações" "updates": "Atualizações"
}, },
"calibreweb": { "calibreweb": {
"books": "Livros", "books": "Livros",
"authors": "Authors", "authors": "Autores",
"categories": "Categories", "categories": "Categorias",
"series": "Séries" "series": "Séries"
}, },
"jdownloader": { "jdownloader": {
@@ -749,47 +749,47 @@
}, },
"kavita": { "kavita": {
"seriesCount": "Séries", "seriesCount": "Séries",
"totalFiles": "Files" "totalFiles": "Arquivos"
}, },
"azuredevops": { "azuredevops": {
"result": "Result", "result": "Resultado",
"status": "Estado", "status": "Estado",
"buildId": "Build ID", "buildId": "ID Compilação",
"succeeded": "Succeeded", "succeeded": "Bem-sucedido",
"notStarted": "Not Started", "notStarted": "Não iniciado",
"failed": "Falhou", "failed": "Falhou",
"canceled": "Canceled", "canceled": "Cancelado",
"inProgress": "In Progress", "inProgress": "Em Progresso",
"totalPrs": "Total PRs", "totalPrs": "Total de PRs",
"myPrs": "My PRs", "myPrs": "Minhas PRs",
"approved": "Aprovada" "approved": "Aprovada"
}, },
"gamedig": { "gamedig": {
"status": "Estado", "status": "Estado",
"online": "Online", "online": "Disponível",
"offline": "Desligado", "offline": "Desligado",
"name": "Name", "name": "Nome",
"map": "Map", "map": "Mapa",
"currentPlayers": "Current players", "currentPlayers": "Jogadores atuais",
"players": "Reprodutores", "players": "Reprodutores",
"maxPlayers": "Max players", "maxPlayers": "Número Máximo de Jogadores",
"bots": "Bots", "bots": "Robôs",
"ping": "Tempo de resposta" "ping": "Tempo de resposta"
}, },
"urbackup": { "urbackup": {
"ok": "Ok", "ok": "Ok",
"errored": "Errors", "errored": "Erros",
"noRecent": "Out of Date", "noRecent": "Desatualizado",
"totalUsed": "Used Storage" "totalUsed": "Armazanamento Utilizado"
}, },
"mealie": { "mealie": {
"recipes": "Recipes", "recipes": "Receitas",
"users": "Utilizadores", "users": "Utilizadores",
"categories": "Categories", "categories": "Categorias",
"tags": "Tags" "tags": "Marcadores"
}, },
"openmediavault": { "openmediavault": {
"downloading": "Downloading", "downloading": "Baixando",
"total": "Total", "total": "Total",
"running": "A correr", "running": "A correr",
"stopped": "Parado", "stopped": "Parado",
@@ -798,83 +798,83 @@
}, },
"openwrt": { "openwrt": {
"uptime": "Ligado", "uptime": "Ligado",
"cpuLoad": "CPU Load Avg (5m)", "cpuLoad": "Carga da CPU média (5m)",
"up": "Ativo", "up": "Ativo",
"down": "Inativo", "down": "Inativo",
"bytesTx": "Transmitted", "bytesTx": "Transmitido",
"bytesRx": "Recebido" "bytesRx": "Recebido"
}, },
"uptimerobot": { "uptimerobot": {
"status": "Estado", "status": "Estado",
"uptime": "Ligado", "uptime": "Ligado",
"lastDown": "Last Downtime", "lastDown": "Última inatividade",
"downDuration": "Downtime Duration", "downDuration": "Duração de inatividade",
"sitesUp": "Sites no Ar", "sitesUp": "Sites no Ar",
"sitesDown": "Sites Fora do Ar", "sitesDown": "Sites Fora do Ar",
"paused": "Pausado", "paused": "Pausado",
"notyetchecked": "Not Yet Checked", "notyetchecked": "Não conferidos ainda",
"up": "Ativo", "up": "Ativo",
"seemsdown": "Seems Down", "seemsdown": "Parece Desconectado",
"down": "Inativo", "down": "Inativo",
"unknown": "Desconhecido" "unknown": "Desconhecido"
}, },
"calendar": { "calendar": {
"inCinemas": "In cinemas", "inCinemas": "Nos cinemas",
"physicalRelease": "Physical release", "physicalRelease": "Versão física",
"digitalRelease": "Digital release", "digitalRelease": "Versão digital",
"noEventsToday": "No events for today!", "noEventsToday": "Nenhum evento para hoje!",
"noEventsFound": "No events found" "noEventsFound": "Nenhum evento encontrado"
}, },
"romm": { "romm": {
"platforms": "Platforms", "platforms": "Plataformas",
"totalRoms": "Total ROMs" "totalRoms": "Total de ROMs"
}, },
"netdata": { "netdata": {
"warnings": "Warnings", "warnings": "Alertas",
"criticals": "Criticals" "criticals": "Críticos"
}, },
"plantit": { "plantit": {
"events": "Events", "events": "Eventos",
"plants": "Plants", "plants": "Plantas",
"photos": "Fotos", "photos": "Fotos",
"species": "Species" "species": "Espécies"
}, },
"gitea": { "gitea": {
"notifications": "Notifications", "notifications": "Notificações",
"issues": "Problemas", "issues": "Problemas",
"pulls": "Pull Requests" "pulls": "Solicitações de Envio"
}, },
"stash": { "stash": {
"scenes": "Scenes", "scenes": "Cenas",
"scenesPlayed": "Scenes Played", "scenesPlayed": "Cenas Reproduzidas",
"playCount": "Total Plays", "playCount": "Total de Reproduções",
"playDuration": "Time Watched", "playDuration": "Tempo Assistido",
"sceneSize": "Scenes Size", "sceneSize": "Tamanho das cenas",
"sceneDuration": "Scenes Duration", "sceneDuration": "Duração das cenas",
"images": "Images", "images": "Imagens",
"imageSize": "Images Size", "imageSize": "Tamanho da Imagem",
"galleries": "Galleries", "galleries": "Galerias",
"performers": "Performers", "performers": "Atores",
"studios": "Studios", "studios": "Estúdios",
"movies": "Filmes", "movies": "Filmes",
"tags": "Tags", "tags": "Marcadores",
"oCount": "O Count" "oCount": "Contagem 0"
}, },
"tandoor": { "tandoor": {
"users": "Utilizadores", "users": "Utilizadores",
"recipes": "Recipes", "recipes": "Receitas",
"keywords": "Keywords" "keywords": "Palavras-chave"
}, },
"homebox": { "homebox": {
"items": "Items", "items": "Itens",
"totalWithWarranty": "With Warranty", "totalWithWarranty": "Com Garantia",
"locations": "Locations", "locations": "Localização",
"labels": "Labels", "labels": "Rótulos",
"users": "Utilizadores", "users": "Utilizadores",
"totalValue": "Total Value" "totalValue": "Valor Total"
}, },
"crowdsec": { "crowdsec": {
"alerts": "Alertas", "alerts": "Alertas",
"bans": "Bans" "bans": "Banimentos"
} }
} }

View File

@@ -21,7 +21,7 @@
"seconds": "s" "seconds": "s"
}, },
"widget": { "widget": {
"missing_type": "Kayıp Araç Türü: {{type}}", "missing_type": "Eksik Araç Türü: {{type}}",
"api_error": "API Hatası", "api_error": "API Hatası",
"information": "Bilgi", "information": "Bilgi",
"status": "Durum", "status": "Durum",
@@ -42,12 +42,12 @@
"cpu": "CPU", "cpu": "CPU",
"mem": "MEM", "mem": "MEM",
"total": "Toplam", "total": "Toplam",
"free": "Boşta", "free": "Boş",
"used": "Kullanımda", "used": "Kullanımda",
"load": "Yük", "load": "Yük",
"temp": "Geçici", "temp": "Sıcaklık",
"max": "En Yüksek", "max": "En Yüksek",
"uptime": "Çalışma Süresi" "uptime": "Çalışıyor"
}, },
"unifi": { "unifi": {
"users": "Kullanıcılar", "users": "Kullanıcılar",
@@ -61,7 +61,7 @@
"wlan_devices": "WLAN Aygıtları", "wlan_devices": "WLAN Aygıtları",
"lan_users": "LAN Kullanıcıları", "lan_users": "LAN Kullanıcıları",
"wlan_users": "WLAN Kullanıcıları", "wlan_users": "WLAN Kullanıcıları",
"up": "Çalışma Süresi", "up": "Çalışıyor",
"down": "Aşağı", "down": "Aşağı",
"wait": "Lütfen bekleyin", "wait": "Lütfen bekleyin",
"empty_data": "Alt sistem durumu bilinmiyor" "empty_data": "Alt sistem durumu bilinmiyor"
@@ -71,15 +71,15 @@
"tx": "Giden Veri", "tx": "Giden Veri",
"mem": "MEM", "mem": "MEM",
"cpu": "CPU", "cpu": "CPU",
"running": "Çalışan", "running": "Çalışıyor",
"offline": "Çevrimdışı", "offline": "Çevrimdışı",
"error": "Hata", "error": "Hata",
"unknown": "Bilinmiyor", "unknown": "Bilinmiyor",
"healthy": "Sağlık", "healthy": "Sağlıklı",
"starting": "Başlatılıyor", "starting": "Başlatılıyor",
"unhealthy": "Sağlıksız", "unhealthy": "Sağlıksız",
"not_found": "Bulunamadı", "not_found": "Bulunamadı",
"exited": "Durduruldu", "exited": "Kapandı",
"partial": "Parçalı" "partial": "Parçalı"
}, },
"ping": { "ping": {
@@ -123,8 +123,8 @@
"watt_hour": "Watt/Saat" "watt_hour": "Watt/Saat"
}, },
"flood": { "flood": {
"download": "İndir", "download": "İndirme",
"upload": "Yükle", "upload": "Yükleme",
"leech": "Tüketici", "leech": "Tüketici",
"seed": "Sağlayıcı" "seed": "Sağlayıcı"
}, },
@@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor", "connectionStatusPendingDisconnect": "Bağlantının Kesilmesi Bekleniyor",
"connectionStatusDisconnecting": "Bağlantı kesiliyor...", "connectionStatusDisconnecting": "Bağlantı kesiliyor...",
"connectionStatusDisconnected": "Bağlantı kesildi", "connectionStatusDisconnected": "Bağlantı kesildi",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "Bağlandı",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"maxDown": "Max. Indirme", "maxDown": "Max. Indirme",
"maxUp": "Max. Gönderme", "maxUp": "Max. Gönderme",
@@ -197,18 +197,18 @@
}, },
"rutorrent": { "rutorrent": {
"active": "Aktif", "active": "Aktif",
"upload": "Yükle", "upload": "Yükleme",
"download": "İndir" "download": "İndirme"
}, },
"transmission": { "transmission": {
"download": "İndir", "download": "İndirme",
"upload": "Yükle", "upload": "Yükleme",
"leech": "Tüketici", "leech": "Tüketici",
"seed": "Sağlayıcı" "seed": "Sağlayıcı"
}, },
"qbittorrent": { "qbittorrent": {
"download": "İndir", "download": "İndirme",
"upload": "Yükle", "upload": "Yükleme",
"leech": "Tüketici", "leech": "Tüketici",
"seed": "Sağlayıcı" "seed": "Sağlayıcı"
}, },
@@ -221,87 +221,87 @@
"invalid": "Geçersiz" "invalid": "Geçersiz"
}, },
"deluge": { "deluge": {
"download": "İndir", "download": "İndirme",
"upload": "Yükle", "upload": "Yükleme",
"leech": "Tüketici", "leech": "Tüketici",
"seed": "Sağlayıcı" "seed": "Sağlayıcı"
}, },
"downloadstation": { "downloadstation": {
"download": "İndir", "download": "İndirme",
"upload": "Yükle", "upload": "Yükleme",
"leech": "Tüketici", "leech": "Tüketici",
"seed": "Sağlayıcı" "seed": "Sağlayıcı"
}, },
"sonarr": { "sonarr": {
"wanted": "Aranan", "wanted": "İstendi",
"queued": "Kuyrukta", "queued": "Sırada",
"series": "Diziler", "series": "Diziler",
"queue": "Kuyruk", "queue": "Kuyruk",
"unknown": "Bilinmiyor" "unknown": "Bilinmiyor"
}, },
"radarr": { "radarr": {
"wanted": "Aranan", "wanted": "İstendi",
"missing": "Kayıp", "missing": "Eksik",
"queued": "Kuyrukta", "queued": "Sırada",
"movies": "Filmler", "movies": "Filmler",
"queue": "Kuyruk", "queue": "Kuyruk",
"unknown": "Bilinmiyor" "unknown": "Bilinmiyor"
}, },
"lidarr": { "lidarr": {
"wanted": "Aranan", "wanted": "İstendi",
"queued": "Kuyrukta", "queued": "Sırada",
"artists": "Sanatçılar" "artists": "Sanatçılar"
}, },
"readarr": { "readarr": {
"wanted": "Aranan", "wanted": "İstendi",
"queued": "Kuyrukta", "queued": "Sırada",
"books": "Kitaplar" "books": "Kitaplar"
}, },
"bazarr": { "bazarr": {
"missingEpisodes": "Kayıp Bölümler", "missingEpisodes": "Eksik Bölümler",
"missingMovies": "Kayıp Filmler" "missingMovies": "Eksik Filmler"
}, },
"ombi": { "ombi": {
"pending": "Bekliyor", "pending": "Bekleyen",
"approved": "Onaylı", "approved": "Onaylı",
"available": "Kullanılabilir" "available": "Kullanılabilir"
}, },
"jellyseerr": { "jellyseerr": {
"pending": "Bekliyor", "pending": "Bekleyen",
"approved": "Onaylı", "approved": "Onaylı",
"available": "Kullanılabilir" "available": "Kullanılabilir"
}, },
"overseerr": { "overseerr": {
"pending": "Bekliyor", "pending": "Bekleyen",
"processing": "İşleniyor", "processing": "İşleniyor",
"approved": "Onaylı", "approved": "Onaylı",
"available": "Kullanılabilir" "available": "Kullanılabilir"
}, },
"netalertx": { "netalertx": {
"total": "Toplam", "total": "Toplam",
"connected": "Connected", "connected": "Bağlandı",
"new_devices": "New Devices", "new_devices": "Yeni Cihazlar",
"down_alerts": "Down Alerts" "down_alerts": "Hata Uyarıları"
}, },
"pihole": { "pihole": {
"queries": "Sorgular", "queries": "Sorgular",
"blocked": "Engellenen", "blocked": "Engellenen",
"blocked_percent": "Engellenen %", "blocked_percent": "Engellenen %",
"gravity": "Yer Çekimi" "gravity": "Gravity"
}, },
"adguard": { "adguard": {
"queries": "Sorgular", "queries": "Sorgular",
"blocked": "Engellenen", "blocked": "Engellenen",
"filtered": "Filtrelenen", "filtered": "Filtrelendi",
"latency": "Gecikme" "latency": "Gecikme"
}, },
"speedtest": { "speedtest": {
"upload": "Yükle", "upload": "Yükleme",
"download": "İndir", "download": "İndirme",
"ping": "Gecikme" "ping": "Gecikme"
}, },
"portainer": { "portainer": {
"running": "Çalışan", "running": "Çalışıyor",
"stopped": "Durduruldu", "stopped": "Durduruldu",
"total": "Toplam" "total": "Toplam"
}, },
@@ -353,10 +353,10 @@
}, },
"prowlarr": { "prowlarr": {
"enableIndexers": "Dizin Oluşturucular", "enableIndexers": "Dizin Oluşturucular",
"numberOfGrabs": "Yakalama Sayısı", "numberOfGrabs": "Yakalamalar",
"numberOfQueries": "Sorgular", "numberOfQueries": "Sorgular",
"numberOfFailGrabs": "Başarısız Yakalama Sayısı", "numberOfFailGrabs": "Başarısız Yakalamalar",
"numberOfFailQueries": "Başarısız Sorgu Sayısı" "numberOfFailQueries": "Başarısız Sorgular"
}, },
"jackett": { "jackett": {
"configured": "Yapılandırılmış", "configured": "Yapılandırılmış",
@@ -374,8 +374,8 @@
"domain_count": "Etki Alanları" "domain_count": "Etki Alanları"
}, },
"medusa": { "medusa": {
"wanted": "Aranan", "wanted": "İstendi",
"queued": "Kuyrukta", "queued": "Sırada",
"series": "Diziler" "series": "Diziler"
}, },
"minecraft": { "minecraft": {
@@ -386,7 +386,7 @@
"down": "Çevrimdışı" "down": "Çevrimdışı"
}, },
"miniflux": { "miniflux": {
"read": "Oku", "read": "Okunan",
"unread": "Okunmamış" "unread": "Okunmamış"
}, },
"authentik": { "authentik": {
@@ -404,17 +404,17 @@
"cpu": "CPU", "cpu": "CPU",
"load": "Yük", "load": "Yük",
"wait": "Lütfen bekleyin", "wait": "Lütfen bekleyin",
"temp": "Geçici", "temp": "Sıcaklık",
"_temp": "Sıcaklık", "_temp": "Sıcaklık",
"warn": "Uyarı", "warn": "Uyarı",
"uptime": "Çalışma Süresi", "uptime": "Çalışıyor",
"total": "Toplam", "total": "Toplam",
"free": "Boşta", "free": "Boş",
"used": "Kullanımda", "used": "Kullanımda",
"days": "g", "days": "g",
"hours": "sa", "hours": "sa",
"crit": "Kritik", "crit": "Kritik",
"read": "Oku", "read": "Okunan",
"write": "Yazma", "write": "Yazma",
"gpu": "GPU", "gpu": "GPU",
"mem": "Hafıza", "mem": "Hafıza",
@@ -495,7 +495,7 @@
"child_bridges": "Alt Köprüler", "child_bridges": "Alt Köprüler",
"child_bridges_status": "{{ok}}/{{total}}", "child_bridges_status": "{{ok}}/{{total}}",
"up": "Yükleme", "up": "Yükleme",
"pending": "Bekliyor", "pending": "Bekleyen",
"down": "İndirme" "down": "İndirme"
}, },
"healthchecks": { "healthchecks": {
@@ -503,7 +503,7 @@
"up": "Yükleme", "up": "Yükleme",
"grace": "Tolerans Döneminde", "grace": "Tolerans Döneminde",
"down": "İndirme", "down": "İndirme",
"paused": "Durduruldu", "paused": "Duraklatıldı",
"status": "Durum", "status": "Durum",
"last_ping": "Son Ping", "last_ping": "Son Ping",
"never": "Henüz ping yok" "never": "Henüz ping yok"
@@ -636,8 +636,8 @@
"storage": "Depo" "storage": "Depo"
}, },
"uptimekuma": { "uptimekuma": {
"up": "Sites Up", "up": "Siteler Çalışıyor",
"down": "Sites Down", "down": "Siteler Çalışmıyor",
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"incident": "Olay", "incident": "Olay",
"m": "dk" "m": "dk"
@@ -661,7 +661,7 @@
"mylar": { "mylar": {
"series": "Diziler", "series": "Diziler",
"issues": "Sorunlar", "issues": "Sorunlar",
"wanted": "Aranan" "wanted": "İstendi"
}, },
"photoprism": { "photoprism": {
"albums": "Albümler", "albums": "Albümler",
@@ -706,13 +706,13 @@
"nodes": "Düğümler" "nodes": "Düğümler"
}, },
"prometheus": { "prometheus": {
"targets_up": "Targets Up", "targets_up": "Hedef Çalışıyor",
"targets_down": "Targets Down", "targets_down": "Hedef Çalışmıyor",
"targets_total": "Toplam Hedef" "targets_total": "Toplam Hedef"
}, },
"gatus": { "gatus": {
"up": "Sites Up", "up": "Siteler Çalışıyor",
"down": "Sites Down", "down": "Siteler Çalışmıyor",
"uptime": "Çalışma Süresi" "uptime": "Çalışma Süresi"
}, },
"ghostfolio": { "ghostfolio": {
@@ -727,7 +727,7 @@
"booksDuration": "Süre" "booksDuration": "Süre"
}, },
"homeassistant": { "homeassistant": {
"people_home": "People Home", "people_home": "Evdeki İnsanlar",
"lights_on": "Işıklar Açık", "lights_on": "Işıklar Açık",
"switches_on": "Aç" "switches_on": "Aç"
}, },
@@ -754,14 +754,14 @@
"azuredevops": { "azuredevops": {
"result": "Sonuç", "result": "Sonuç",
"status": "Durum", "status": "Durum",
"buildId": "Build ID", "buildId": "Yapı Kimliği",
"succeeded": "Başarılı", "succeeded": "Başarılı",
"notStarted": "Henüz Başlamadı", "notStarted": "Henüz Başlamadı",
"failed": "Başarısız", "failed": "Başarısız",
"canceled": "İptal edildi", "canceled": "İptal edildi",
"inProgress": "Sürüyor", "inProgress": "Sürüyor",
"totalPrs": "Total PRs", "totalPrs": "Toplam Çekme İstekleri",
"myPrs": "My PRs", "myPrs": "Benim Çekme İsteklerim",
"approved": "Onaylı" "approved": "Onaylı"
}, },
"gamedig": { "gamedig": {
@@ -791,7 +791,7 @@
"openmediavault": { "openmediavault": {
"downloading": "İndiriliyor", "downloading": "İndiriliyor",
"total": "Toplam", "total": "Toplam",
"running": "Çalışan", "running": "Çalışıyor",
"stopped": "Durduruldu", "stopped": "Durduruldu",
"passed": "Geçti", "passed": "Geçti",
"failed": "Başarısız" "failed": "Başarısız"
@@ -809,9 +809,9 @@
"uptime": "Çalışma Süresi", "uptime": "Çalışma Süresi",
"lastDown": "Son Kesinti", "lastDown": "Son Kesinti",
"downDuration": "Kesinti Süresi", "downDuration": "Kesinti Süresi",
"sitesUp": "Sites Up", "sitesUp": "Siteler Çalışıyor",
"sitesDown": "Sites Down", "sitesDown": "Siteler Çalışmıyor",
"paused": "Durduruldu", "paused": "Duraklatıldı",
"notyetchecked": "Henüz Kontrol Edilmedi", "notyetchecked": "Henüz Kontrol Edilmedi",
"up": "Yükleme", "up": "Yükleme",
"seemsdown": "Kapalı görünüyor", "seemsdown": "Kapalı görünüyor",
@@ -821,7 +821,7 @@
"calendar": { "calendar": {
"inCinemas": "Sinemalarda", "inCinemas": "Sinemalarda",
"physicalRelease": "Fiziksel Yayınlanan", "physicalRelease": "Fiziksel Yayınlanan",
"digitalRelease": "Dijital Yayınlanan", "digitalRelease": "Dijitalde Yayınlandı",
"noEventsToday": "Bugün için etkinlik yok!", "noEventsToday": "Bugün için etkinlik yok!",
"noEventsFound": "Etkinlik bulunamadı" "noEventsFound": "Etkinlik bulunamadı"
}, },
@@ -835,7 +835,7 @@
}, },
"plantit": { "plantit": {
"events": "Etkinlikler", "events": "Etkinlikler",
"plants": "Plants", "plants": "Bitkiler",
"photos": "Fotoğraflar", "photos": "Fotoğraflar",
"species": "Türler" "species": "Türler"
}, },
@@ -854,11 +854,11 @@
"images": "Görseller", "images": "Görseller",
"imageSize": "Görsel Boyutu", "imageSize": "Görsel Boyutu",
"galleries": "Galeriler", "galleries": "Galeriler",
"performers": "Performers", "performers": "Oyuncu",
"studios": "Stüdyolar", "studios": "Stüdyolar",
"movies": "Filmler", "movies": "Filmler",
"tags": "Etiketler", "tags": "Etiketler",
"oCount": "O Count" "oCount": "O Sayısı"
}, },
"tandoor": { "tandoor": {
"users": "Kullanıcılar", "users": "Kullanıcılar",
@@ -875,6 +875,6 @@
}, },
"crowdsec": { "crowdsec": {
"alerts": "Alarmlar", "alerts": "Alarmlar",
"bans": "Bans" "bans": "Yasaklar"
} }
} }

View File

@@ -140,7 +140,7 @@
"connectionStatusPendingDisconnect": "等待断开连接", "connectionStatusPendingDisconnect": "等待断开连接",
"connectionStatusDisconnecting": "正在断开连接", "connectionStatusDisconnecting": "正在断开连接",
"connectionStatusDisconnected": "未连接", "connectionStatusDisconnected": "未连接",
"connectionStatusConnected": "Connected", "connectionStatusConnected": "已连接",
"uptime": "运行时间", "uptime": "运行时间",
"maxDown": "最大下载速度", "maxDown": "最大下载速度",
"maxUp": "", "maxUp": "",
@@ -279,9 +279,9 @@
}, },
"netalertx": { "netalertx": {
"total": "总计", "total": "总计",
"connected": "Connected", "connected": "已连接",
"new_devices": "New Devices", "new_devices": "新设备",
"down_alerts": "Down Alerts" "down_alerts": "离线警报"
}, },
"pihole": { "pihole": {
"queries": "查询", "queries": "查询",

View File

@@ -9,7 +9,7 @@ function convertToFahrenheit(t) {
return (t * 9) / 5 + 32; return (t * 9) / 5 + 32;
} }
export default function CpuTemp({ expanded, units, refresh = 1500 }) { export default function CpuTemp({ expanded, units, refresh = 1500, tempmin = 0, tempmax = -1 }) {
const { t } = useTranslation(); const { t } = useTranslation();
const { data, error } = useSWR(`/api/widgets/resources?type=cputemp`, { const { data, error } = useSWR(`/api/widgets/resources?type=cputemp`, {
@@ -39,7 +39,12 @@ export default function CpuTemp({ expanded, units, refresh = 1500 }) {
} }
const unit = units === "imperial" ? "fahrenheit" : "celsius"; const unit = units === "imperial" ? "fahrenheit" : "celsius";
mainTemp = unit === "celsius" ? mainTemp : convertToFahrenheit(mainTemp); mainTemp = unit === "celsius" ? mainTemp : convertToFahrenheit(mainTemp);
const maxTemp = unit === "celsius" ? data.cputemp.max : convertToFahrenheit(data.cputemp.max);
const minTemp = tempmin < mainTemp ? tempmin : mainTemp;
let maxTemp = tempmax;
if (maxTemp < minTemp) {
maxTemp = unit === "celsius" ? data.cputemp.max : convertToFahrenheit(data.cputemp.max);
}
return ( return (
<Resource <Resource
@@ -58,7 +63,7 @@ export default function CpuTemp({ expanded, units, refresh = 1500 }) {
unit, unit,
})} })}
expandedLabel={t("resources.max")} expandedLabel={t("resources.max")}
percentage={Math.round((mainTemp / maxTemp) * 100)} percentage={Math.round(((mainTemp - minTemp) / (maxTemp - minTemp)) * 100)}
expanded={expanded} expanded={expanded}
/> />
); );

View File

@@ -8,7 +8,7 @@ import CpuTemp from "./cputemp";
import Uptime from "./uptime"; import Uptime from "./uptime";
export default function Resources({ options }) { export default function Resources({ options }) {
const { expanded, units, diskUnits } = options; const { expanded, units, diskUnits, tempmin, tempmax } = options;
let { refresh } = options; let { refresh } = options;
if (!refresh) refresh = 1500; if (!refresh) refresh = 1500;
refresh = Math.max(refresh, 1000); refresh = Math.max(refresh, 1000);
@@ -23,7 +23,9 @@ export default function Resources({ options }) {
<Disk key={disk} options={{ disk }} expanded={expanded} diskUnits={diskUnits} refresh={refresh} /> <Disk key={disk} options={{ disk }} expanded={expanded} diskUnits={diskUnits} refresh={refresh} />
)) ))
: options.disk && <Disk options={options} expanded={expanded} diskUnits={diskUnits} refresh={refresh} />} : options.disk && <Disk options={options} expanded={expanded} diskUnits={diskUnits} refresh={refresh} />}
{options.cputemp && <CpuTemp expanded={expanded} units={units} refresh={refresh} />} {options.cputemp && (
<CpuTemp expanded={expanded} units={units} refresh={refresh} tempmin={tempmin} tempmax={tempmax} />
)}
{options.uptime && <Uptime refresh={refresh} />} {options.uptime && <Uptime refresh={refresh} />}
</div> </div>
{options.label && ( {options.label && (

View File

@@ -3,7 +3,7 @@ import { getAllClasses, getInnerBlock, getBottomBlock } from "./container";
export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) { export default function ContainerLink({ children = [], options, additionalClassNames = "", target }) {
return ( return (
<a <a
href={options.url} href={options.href || options.url}
target={target} target={target}
className={`${getAllClasses(options, additionalClassNames)} information-widget-link`} className={`${getAllClasses(options, additionalClassNames)} information-widget-link`}
> >

View File

@@ -395,6 +395,8 @@ export function cleanServiceGroups(groups) {
// emby, jellyfin, tautulli // emby, jellyfin, tautulli
enableUser, enableUser,
expandOneStreamToTwoRows,
showEpisodeNumber,
// glances, pihole // glances, pihole
version, version,
@@ -448,6 +450,9 @@ export function cleanServiceGroups(groups) {
// proxmox // proxmox
node, node,
// speedtest
bitratePrecision,
// sonarr, radarr // sonarr, radarr
enableQueue, enableQueue,
@@ -520,14 +525,13 @@ export function cleanServiceGroups(groups) {
if (["emby", "jellyfin"].includes(type)) { if (["emby", "jellyfin"].includes(type)) {
if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks); if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks);
if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying); if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying);
if (enableUser !== undefined) {
cleanedService.widget.enableUser = !!JSON.parse(enableUser);
}
}
if (["tautulli"].includes(type)) {
if (enableUser !== undefined) {
cleanedService.widget.enableUser = !!JSON.parse(enableUser);
} }
if (["emby", "jellyfin", "tautulli"].includes(type)) {
if (expandOneStreamToTwoRows !== undefined)
cleanedService.widget.expandOneStreamToTwoRows = !!JSON.parse(expandOneStreamToTwoRows);
if (showEpisodeNumber !== undefined)
cleanedService.widget.showEpisodeNumber = !!JSON.parse(showEpisodeNumber);
if (enableUser !== undefined) cleanedService.widget.enableUser = !!JSON.parse(enableUser);
} }
if (["sonarr", "radarr"].includes(type)) { if (["sonarr", "radarr"].includes(type)) {
if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue); if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue);
@@ -587,6 +591,11 @@ export function cleanServiceGroups(groups) {
if (type === "healthchecks") { if (type === "healthchecks") {
if (uuid !== undefined) cleanedService.widget.uuid = uuid; if (uuid !== undefined) cleanedService.widget.uuid = uuid;
} }
if (type === "speedtest") {
if (bitratePrecision !== undefined) {
cleanedService.widget.bitratePrecision = parseInt(bitratePrecision, 10);
}
}
} }
return cleanedService; return cleanedService;

View File

@@ -57,7 +57,7 @@ export function jsonArrayFilter(data, filter) {
export function sanitizeErrorURL(errorURL) { export function sanitizeErrorURL(errorURL) {
// Dont display sensitive params on frontend // Dont display sensitive params on frontend
const url = new URL(errorURL); const url = new URL(errorURL);
["apikey", "api_key", "token", "t", "access_token"].forEach((key) => { ["apikey", "api_key", "token", "t", "access_token", "auth"].forEach((key) => {
if (url.searchParams.has(key)) url.searchParams.set(key, "***"); if (url.searchParams.has(key)) url.searchParams.set(key, "***");
}); });
return url.toString(); return url.toString();

View File

@@ -5,6 +5,7 @@ import { createUnzip, constants as zlibConstants } from "node:zlib";
import { http, https } from "follow-redirects"; import { http, https } from "follow-redirects";
import { addCookieToJar, setCookieHeader } from "./cookie-jar"; import { addCookieToJar, setCookieHeader } from "./cookie-jar";
import { sanitizeErrorURL } from "./api-helpers";
import createLogger from "utils/logger"; import createLogger from "utils/logger";
@@ -113,6 +114,11 @@ export async function httpProxy(url, params = {}) {
constructedUrl.pathname, constructedUrl.pathname,
); );
if (err) logger.error(err); if (err) logger.error(err);
return [500, "application/json", { error: { message: err?.message ?? "Unknown error", url, rawError: err } }, null]; return [
500,
"application/json",
{ error: { message: err?.message ?? "Unknown error", url: sanitizeErrorURL(url), rawError: err } },
null,
];
} }
} }

View File

@@ -27,12 +27,28 @@ function ticksToString(ticks) {
return parts.map((part) => part.toString().padStart(2, "0")).join(":"); return parts.map((part) => part.toString().padStart(2, "0")).join(":");
} }
function SingleSessionEntry({ playCommand, session, enableUser }) { function generateStreamTitle(session, enableUser, showEpisodeNumber) {
const { const {
NowPlayingItem: { Name, SeriesName }, NowPlayingItem: { Name, SeriesName, Type, ParentIndexNumber, IndexNumber },
PlayState: { PositionTicks, IsPaused, IsMuted },
UserName, UserName,
} = session; } = session;
let streamTitle = "";
if (Type === "Episode" && showEpisodeNumber) {
const seasonStr = `S${ParentIndexNumber.toString().padStart(2, "0")}`;
const episodeStr = `E${IndexNumber.toString().padStart(2, "0")}`;
streamTitle = `${SeriesName}: ${seasonStr} · ${episodeStr} - ${Name}`;
} else {
streamTitle = `${Name}${SeriesName ? ` - ${SeriesName}` : ""}`;
}
return enableUser ? `${streamTitle} (${UserName})` : streamTitle;
}
function SingleSessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) {
const {
PlayState: { PositionTicks, IsPaused, IsMuted },
} = session;
const RunTimeTicks = const RunTimeTicks =
session.NowPlayingItem?.RunTimeTicks ?? session.NowPlayingItem?.CurrentProgram?.RunTimeTicks ?? 0; session.NowPlayingItem?.RunTimeTicks ?? session.NowPlayingItem?.CurrentProgram?.RunTimeTicks ?? 0;
@@ -43,14 +59,13 @@ function SingleSessionEntry({ playCommand, session, enableUser }) {
const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100; const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100;
const streamTitle = generateStreamTitle(session, enableUser, showEpisodeNumber);
return ( return (
<> <>
<div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex"> <div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex">
<div className="grow text-xs z-10 self-center ml-2 relative w-full h-4 mr-2"> <div className="grow text-xs z-10 self-center ml-2 relative w-full h-4 mr-2">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden"> <div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden" title={streamTitle}>
{Name} {streamTitle}
{SeriesName && ` - ${SeriesName}`}
{enableUser && ` (${UserName})`}
</div> </div>
</div> </div>
<div className="self-center text-xs flex justify-end mr-1.5 pl-1"> <div className="self-center text-xs flex justify-end mr-1.5 pl-1">
@@ -99,11 +114,9 @@ function SingleSessionEntry({ playCommand, session, enableUser }) {
); );
} }
function SessionEntry({ playCommand, session, enableUser }) { function SessionEntry({ playCommand, session, enableUser, showEpisodeNumber }) {
const { const {
NowPlayingItem: { Name, SeriesName },
PlayState: { PositionTicks, IsPaused, IsMuted }, PlayState: { PositionTicks, IsPaused, IsMuted },
UserName,
} = session; } = session;
const RunTimeTicks = const RunTimeTicks =
@@ -113,6 +126,8 @@ function SessionEntry({ playCommand, session, enableUser }) {
IsVideoDirect: true, IsVideoDirect: true,
}; // if no transcodinginfo its videodirect }; // if no transcodinginfo its videodirect
const streamTitle = generateStreamTitle(session, enableUser, showEpisodeNumber);
const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100; const percent = Math.min(1, PositionTicks / RunTimeTicks) * 100;
return ( return (
@@ -142,10 +157,8 @@ function SessionEntry({ playCommand, session, enableUser }) {
)} )}
</div> </div>
<div className="grow text-xs z-10 self-center relative w-full h-4"> <div className="grow text-xs z-10 self-center relative w-full h-4">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden"> <div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden" title={streamTitle}>
{Name} {streamTitle}
{SeriesName && ` - ${SeriesName}`}
{enableUser && ` (${UserName})`}
</div> </div>
</div> </div>
<div className="self-center text-xs flex justify-end mr-1 z-10">{IsMuted && <BsVolumeMuteFill />}</div> <div className="self-center text-xs flex justify-end mr-1 z-10">{IsMuted && <BsVolumeMuteFill />}</div>
@@ -219,7 +232,9 @@ export default function Component({ service }) {
const enableBlocks = service.widget?.enableBlocks; const enableBlocks = service.widget?.enableBlocks;
const enableNowPlaying = service.widget?.enableNowPlaying ?? true; const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
const enableUser = !!service.widget?.enableUser; const enableUser = !!service.widget?.enableUser; // default is false
const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true
const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false
if (!sessionsData || !countData) { if (!sessionsData || !countData) {
return ( return (
@@ -230,9 +245,11 @@ export default function Component({ service }) {
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
{expandOneStreamToTwoRows && (
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
)}
</div> </div>
)} )}
</> </>
@@ -260,15 +277,17 @@ export default function Component({ service }) {
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">{t("emby.no_active")}</span> <span className="absolute left-2 text-xs mt-[2px]">{t("emby.no_active")}</span>
</div> </div>
{expandOneStreamToTwoRows && (
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
)}
</div> </div>
</> </>
); );
} }
if (playing.length === 1) { if (expandOneStreamToTwoRows && playing.length === 1) {
const session = playing[0]; const session = playing[0];
return ( return (
<> <>
@@ -278,13 +297,13 @@ export default function Component({ service }) {
playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)} playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)}
session={session} session={session}
enableUser={enableUser} enableUser={enableUser}
showEpisodeNumber={showEpisodeNumber}
/> />
</div> </div>
</> </>
); );
} }
if (playing.length > 0)
return ( return (
<> <>
{enableBlocks && <CountBlocks service={service} countData={countData} />} {enableBlocks && <CountBlocks service={service} countData={countData} />}
@@ -295,6 +314,7 @@ export default function Component({ service }) {
playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)} playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)}
session={session} session={session}
enableUser={enableUser} enableUser={enableUser}
showEpisodeNumber={showEpisodeNumber}
/> />
))} ))}
</div> </div>

View File

@@ -1,9 +1,12 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container"; import Container from "components/services/widget/container";
import Block from "components/services/widget/block"; import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api"; import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) { export default function Component({ service }) {
const { widget } = service; const { widget } = service;
const { t } = useTranslation();
const { data: response, error: responseError } = useWidgetAPI(widget, "statistics"); const { data: response, error: responseError } = useWidgetAPI(widget, "statistics");
@@ -24,8 +27,8 @@ export default function Component({ service }) {
const totalRoms = response.reduce((total, stat) => total + stat.rom_count, 0); const totalRoms = response.reduce((total, stat) => total + stat.rom_count, 0);
return ( return (
<Container service={service}> <Container service={service}>
<Block label="romm.platforms" value={platforms} /> <Block label="romm.platforms" value={t("common.number", { value: platforms })} />
<Block label="romm.totalRoms" value={totalRoms} /> <Block label="romm.totalRoms" value={t("common.number", { value: totalRoms })} />
</Container> </Container>
); );
} }

View File

@@ -11,6 +11,11 @@ export default function Component({ service }) {
const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest"); const { data: speedtestData, error: speedtestError } = useWidgetAPI(widget, "speedtest/latest");
const bitratePrecision =
!widget?.bitratePrecision || Number.isNaN(widget?.bitratePrecision) || widget?.bitratePrecision < 0
? 0
: widget.bitratePrecision;
if (speedtestError) { if (speedtestError) {
return <Container service={service} error={speedtestError} />; return <Container service={service} error={speedtestError} />;
} }
@@ -29,9 +34,18 @@ export default function Component({ service }) {
<Container service={service}> <Container service={service}>
<Block <Block
label="speedtest.download" label="speedtest.download"
value={t("common.bitrate", { value: speedtestData.data.download * 1000 * 1000 })} value={t("common.bitrate", {
value: speedtestData.data.download * 1000 * 1000,
decimals: bitratePrecision,
})}
/>
<Block
label="speedtest.upload"
value={t("common.bitrate", {
value: speedtestData.data.upload * 1000 * 1000,
decimals: bitratePrecision,
})}
/> />
<Block label="speedtest.upload" value={t("common.bitrate", { value: speedtestData.data.upload * 1000 * 1000 })} />
<Block <Block
label="speedtest.ping" label="speedtest.ping"
value={t("common.ms", { value={t("common.ms", {

View File

@@ -25,17 +25,31 @@ function millisecondsToString(milliseconds) {
return parts.map((part) => part.toString().padStart(2, "0")).join(":"); return parts.map((part) => part.toString().padStart(2, "0")).join(":");
} }
function SingleSessionEntry({ session, enableUser }) { function generateStreamTitle(session, enableUser, showEpisodeNumber) {
const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision, username } = let stream_title = "";
session; const { media_type, parent_media_index, media_index, title, grandparent_title, full_title, friendly_name } = session;
if (media_type === "episode" && showEpisodeNumber) {
const season_str = `S${parent_media_index.toString().padStart(2, "0")}`;
const episode_str = `E${media_index.toString().padStart(2, "0")}`;
stream_title = `${grandparent_title}: ${season_str} · ${episode_str} - ${title}`;
} else {
stream_title = full_title;
}
return enableUser ? `${stream_title} (${friendly_name})` : stream_title;
}
function SingleSessionEntry({ session, enableUser, showEpisodeNumber }) {
const { duration, view_offset, progress_percent, state, video_decision, audio_decision } = session;
const stream_title = generateStreamTitle(session, enableUser, showEpisodeNumber);
return ( return (
<> <>
<div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex"> <div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex">
<div className="text-xs z-10 self-center ml-2 relative w-full h-4 grow mr-2"> <div className="text-xs z-10 self-center ml-2 relative w-full h-4 grow mr-2">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden"> <div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden" title={stream_title}>
{full_title} {stream_title}
{enableUser && ` (${username})`}
</div> </div>
</div> </div>
<div className="self-center text-xs flex justify-end mr-1.5 pl-1"> <div className="self-center text-xs flex justify-end mr-1.5 pl-1">
@@ -78,8 +92,10 @@ function SingleSessionEntry({ session, enableUser }) {
); );
} }
function SessionEntry({ session, enableUser }) { function SessionEntry({ session, enableUser, showEpisodeNumber }) {
const { full_title, view_offset, progress_percent, state, video_decision, audio_decision, username } = session; const { view_offset, progress_percent, state, video_decision, audio_decision } = session;
const stream_title = generateStreamTitle(session, enableUser, showEpisodeNumber);
return ( return (
<div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex"> <div className="text-theme-700 dark:text-theme-200 relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1 flex">
@@ -98,9 +114,8 @@ function SessionEntry({ session, enableUser }) {
)} )}
</div> </div>
<div className="text-xs z-10 self-center ml-2 relative w-full h-4 grow mr-2"> <div className="text-xs z-10 self-center ml-2 relative w-full h-4 grow mr-2">
<div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden"> <div className="absolute w-full whitespace-nowrap text-ellipsis overflow-hidden" title={stream_title}>
{full_title} {stream_title}
{enableUser && ` (${username})`}
</div> </div>
</div> </div>
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10"> <div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10">
@@ -129,6 +144,10 @@ export default function Component({ service }) {
refreshInterval: 5000, refreshInterval: 5000,
}); });
const enableUser = !!service.widget?.enableUser; // default is false
const expandOneStreamToTwoRows = service.widget?.expandOneStreamToTwoRows !== false; // default is true
const showEpisodeNumber = !!service.widget?.showEpisodeNumber; // default is false
if (activityError || (activityData && Object.keys(activityData.response.data).length === 0)) { if (activityError || (activityData && Object.keys(activityData.response.data).length === 0)) {
return <Container service={service} error={activityError ?? { message: t("tautulli.plex_connection_error") }} />; return <Container service={service} error={activityError ?? { message: t("tautulli.plex_connection_error") }} />;
} }
@@ -139,9 +158,11 @@ export default function Component({ service }) {
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
{expandOneStreamToTwoRows && (
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
)}
</div> </div>
); );
} }
@@ -162,20 +183,20 @@ export default function Component({ service }) {
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">{t("tautulli.no_active")}</span> <span className="absolute left-2 text-xs mt-[2px]">{t("tautulli.no_active")}</span>
</div> </div>
{expandOneStreamToTwoRows && (
<div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1"> <div className="text-theme-700 dark:text-theme-200 text-xs relative h-5 w-full rounded-md bg-theme-200/50 dark:bg-theme-900/20 mt-1">
<span className="absolute left-2 text-xs mt-[2px]">-</span> <span className="absolute left-2 text-xs mt-[2px]">-</span>
</div> </div>
)}
</div> </div>
); );
} }
const enableUser = !!service.widget?.enableUser; if (expandOneStreamToTwoRows && playing.length === 1) {
if (playing.length === 1) {
const session = playing[0]; const session = playing[0];
return ( return (
<div className="flex flex-col pb-1 mx-1"> <div className="flex flex-col pb-1 mx-1">
<SingleSessionEntry session={session} enableUser={enableUser} /> <SingleSessionEntry session={session} enableUser={enableUser} showEpisodeNumber={showEpisodeNumber} />
</div> </div>
); );
} }
@@ -183,7 +204,12 @@ export default function Component({ service }) {
return ( return (
<div className="flex flex-col pb-1 mx-1"> <div className="flex flex-col pb-1 mx-1">
{playing.map((session) => ( {playing.map((session) => (
<SessionEntry key={session.Id} session={session} enableUser={enableUser} /> <SessionEntry
key={session.Id}
session={session}
enableUser={enableUser}
showEpisodeNumber={showEpisodeNumber}
/>
))} ))}
</div> </div>
); );