Compare commits

..

47 Commits

Author SHA1 Message Date
shamoon
2245cdda55 Merge branch 'dev'
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-10-15 10:51:03 -07:00
shamoon
cf9109384e Update support.yml
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-10-15 10:50:47 -07:00
shamoon
db1fb4b899 Enhancement: support netalertX token for password-protected instances (#4122)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-10-12 15:30:45 -07:00
vhsdream
20048ff567 Feature: Vikunja service widget (#4118)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-10-12 07:53:02 -07:00
shamoon
e6c7692677 Fix: add noreferrer to bookmark links (#4112)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-10-10 14:50:09 -07:00
shamoon
19bdc0ec34 Enhancement: handle immich v1.118 breaking API change (#4110) 2024-10-10 14:01:42 -07:00
shamoon
cd8c224ffa Fix: wg-easy disabled field not visible (#4096)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-10-06 06:33:47 -07:00
dependabot[bot]
b1ca6b8e1a Chore(deps-dev): Bump eslint-plugin-react from 7.36.1 to 7.37.1 (#4077)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 18:00:00 +00:00
dependabot[bot]
3fd8247a40 Chore(deps-dev): Bump typescript from 5.5.4 to 5.6.2 (#4076)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 17:59:09 +00:00
dependabot[bot]
798ca3dea9 Chore(deps): Bump follow-redirects from 1.15.8 to 1.15.9 (#4075)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 10:58:17 -07:00
dependabot[bot]
5c5b6f17d9 Chore(deps-dev): Bump postcss from 8.4.45 to 8.4.47 (#4073)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 10:57:36 -07:00
dependabot[bot]
8e6c7ec152 Chore(deps-dev): Bump eslint from 8.57.0 to 8.57.1 (#4074)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 10:57:17 -07:00
shamoon
2cc38b9a4f Fix: lubelogger vehicleID not working with labels (#4066)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-09-30 14:00:23 -07:00
SquirmDog
50aa416612 Documentation: clarify account type for Unifi Controller widget (#4065) 2024-09-30 11:01:46 -07:00
shamoon
96bd6eedc2 Fix proxy typo
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-09-27 15:40:50 -07:00
shamoon
d12b0d5a53 Fix: correct caculations for mailcow widget (#4055)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-09-27 01:00:25 -07:00
shamoon
e2d6794d12 Docs: make it a warning admonition 2024-09-27 00:50:29 -07:00
shamoon
50ccb0b14d Docs: make it a warning admonition
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-26 11:51:20 -07:00
dependabot[bot]
132d8f4f6b Chore(deps-dev): Bump tailwindcss from 3.4.10 to 3.4.13 (#4048)
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.10 to 3.4.13.
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/v3.4.13/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.10...v3.4.13)

---
updated-dependencies:
- dependency-name: tailwindcss
  dependency-type: direct:development
  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-09-26 08:07:28 -07:00
dependabot[bot]
c085cf1e72 Chore(deps-dev): Bump eslint-plugin-react from 7.35.2 to 7.36.1 (#4050)
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.35.2 to 7.36.1.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.2...v7.36.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  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-09-26 08:07:20 -07:00
shamoon
ebb1a50e3f Move ci stuff to dev branch 2024-09-26 08:06:27 -07:00
github-actions[bot]
8f82976fe5 New Crowdin translations by GitHub Action (#3980)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-09-26 08:00:50 -07:00
Tarow
6da46dd3b1 Fix: Support Gluetun widget auth (#4034)
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-24 11:15:46 -07:00
shamoon
5fc3bdee08 Create CNAME 2024-09-24 09:16:18 -07:00
shamoon
bcc867323f Try to fix docs-publish 2024-09-24 09:02:45 -07:00
shamoon
a46a234b76 Fix otudated links 2024-09-24 08:46:19 -07:00
shamoon
f0df2122de Fix some docs errors 2024-09-24 08:45:03 -07:00
shamoon
ce695850bd Remove mike 2024-09-24 08:26:53 -07:00
shamoon
8c12afced5 Feature: LubeLogger service widget (#4031)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
2024-09-23 23:25:12 -07:00
shamoon
8c1e50d9e7 Enhancement: support photoprism app passwords (#4028)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
2024-09-23 14:32:36 -07:00
jaygz316
20f5134606 Documentation: update mdi link (#4022)
Some checks are pending
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
2024-09-22 18:01:01 -07:00
Bazooka4207
facc98018b Documentation: add changedetection.io fields (#4018)
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-20 16:44:04 -07:00
shamoon
581828d49a Enhancement: reduce properties retrieved from mikrotik endpoint (#3996)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docs / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-14 23:36:24 -07:00
shamoon
587027df37 Enhancement: support pihole v6 with api auth disabled (#3995) 2024-09-14 23:32:56 -07:00
Simon
85736c55c9 Feature: mailcow widget (#3993)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-09-14 07:59:41 -07:00
shamoon
1f47ee8f11 Fix carbon ads light mode text contrast
Some checks failed
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-12 22:50:51 -07:00
shamoon
1eb6ac6d90 Enhancement: support another ghostfolio breaking API change (#3987)
Some checks failed
Docker / Linting Checks (push) Has been cancelled
Docker / Docker Build & Push (push) Has been cancelled
2024-09-12 13:19:18 -07:00
Bobby Driggs
295c6ea796 Fix: Technitium widget percentage display (#3984)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2024-09-11 18:14:49 -07:00
moritz-john
68c2b04090 Documentation: fix mkdocs admonition in unraid.md (#3983)
Some checks failed
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Docs / Linting Checks (push) Has been cancelled
Docs / Test Build (push) Has been cancelled
Docs / Build & Deploy (push) Has been cancelled
2024-09-11 13:04:32 -07:00
Ben Phelps
1494458ba6 remove nested ternary expression 2024-09-11 16:52:56 +03:00
Ben Phelps
f7086c8aa3 fix type in last docs update
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
Docs / Linting Checks (push) Waiting to run
Docs / Test Build (push) Blocked by required conditions
Docs / Build & Deploy (push) Blocked by required conditions
2024-09-11 15:20:23 +03:00
Ben Phelps
59ccc90b2f add selfh.st icons docs 2024-09-11 15:18:21 +03:00
Ben Phelps
1e9e911877 better handle the full selfh.st icon set 2024-09-11 15:13:36 +03:00
Ben Phelps
dc67024be2 fix light mode ad text contrast 2024-09-11 15:00:20 +03:00
Ben Phelps
b3591c3e69 add selfh.st icon set 2024-09-11 14:45:49 +03:00
shamoon
9243187490 Fix: handle proxmoxbackupserver without datastore (#3979)
Some checks are pending
Docker / Linting Checks (push) Waiting to run
Docker / Docker Build & Push (push) Blocked by required conditions
2024-09-10 13:11:08 -07:00
shamoon
6b1080ad43 Fix: other jsonrpc widgets broken in 0.9.8 (#3976) 2024-09-10 07:12:57 -07:00
102 changed files with 1366 additions and 379 deletions

View File

@@ -4,8 +4,8 @@ body:
value: |
### ⚠️ Before opening a discussion:
- [Check the troubleshooting guide](https://gethomepage.dev/latest/troubleshooting/).
- [Search existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) [and discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/).
- [Search existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) [and discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions) (including closed ones!).
- type: textarea
id: description
attributes:
@@ -51,6 +51,6 @@ body:
id: troubleshooting
attributes:
label: Troubleshooting
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/latest/more/troubleshooting/#service-widget-errors), if relevant.
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
validations:
required: true

View File

@@ -3,7 +3,7 @@
<!--
Please include a summary of the change. Screenshots and/or videos can also be helpful if appropriate.
*** Please see the development guidelines for new widgets: https://gethomepage.dev/latest/more/development/#service-widget-guidelines
*** Please see the development guidelines for new widgets: https://gethomepage.dev/more/development/#service-widget-guidelines
*** If you do not follow these guidelines your PR will likely be closed without review.
New service widgets should include example(s) of relevant API output as well as updates to the docs for the new widget.
@@ -26,6 +26,6 @@ What type of change does your PR introduce to Homepage?
## Checklist:
- [ ] If applicable, I have added corresponding documentation changes.
- [ ] If applicable, I have reviewed the [feature](https://gethomepage.dev/latest/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines).
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/latest/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/latest/more/development/#code-linting).
- [ ] If applicable, I have reviewed the [feature](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.

View File

@@ -8,7 +8,7 @@ on:
paths: [
'/public/locales/en/**',
]
branches: [ main ]
branches: [ dev ]
jobs:
synchronize-with-crowdin:
@@ -23,8 +23,8 @@ jobs:
with:
upload_translations: false
download_translations: true
crowdin_branch_name: main
localization_branch_name: l10n_main
crowdin_branch_name: dev
localization_branch_name: l10n_dev
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}

View File

@@ -12,13 +12,14 @@ on:
branches:
- main
- feature/**
- dev
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
pull_request:
branches: [ "main" ]
branches: [ "dev" ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'

View File

@@ -50,7 +50,6 @@ jobs:
restore-keys: |
mkdocs-material-
- run: sudo apt-get install pngquant
- run: pip install mike
- run: pip install mkdocs-material mkdocs-redirects "mkdocs-material[imaging]"
- name: Test Docs Build
run: MKINSIDERS=false mkdocs build
@@ -62,8 +61,10 @@ jobs:
- pre-commit
steps:
- uses: actions/checkout@v4
with:
ref: main
- name: Configure Git Credentials
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v5
with:
python-version: 3.x
@@ -75,24 +76,9 @@ jobs:
restore-keys: |
mkdocs-material-
- run: sudo apt-get install pngquant
- run: pip install mike==2.0.0
- run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git
- run: pip install mkdocs-redirects "mkdocs-material[imaging]"
- name: Set Git config
run: |
git config --global user.name "GitHub Action"
git config --global user.email "action@github.com"
- name: Sync gh-pages
run: |
git fetch origin gh-pages
git checkout gh-pages
git pull origin gh-pages
git checkout main
- name: Docs Deploy for Main
if: github.ref == 'refs/heads/main'
run: MKINSIDERS=true mike deploy --update --push ${{github.ref_name}}
- name: Docs Deploy for Tags
if: github.ref != 'refs/heads/main'
run: MKINSIDERS=true mike deploy --update --push ${{github.ref_name}} latest
- name: Docs Deploy
run: MKINSIDERS=true mkdocs gh-deploy --force
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}

View File

@@ -38,11 +38,11 @@ People _love_ thorough bug reports. I'm not even kidding.
## Development Guidelines
Please see the [documentation regarding development](https://gethomepage.dev/latest/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/latest/more/development/#service-widget-guidelines) if you are considering making one.
Please see the [documentation regarding development](https://gethomepage.dev/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/more/development/#service-widget-guidelines) if you are considering making one.
## Use a Consistent Coding Style
Please see information in the docs regarding [code formatting with pre-commit hooks](https://gethomepage.dev/latest/more/development/#code-formatting-with-pre-commit-hooks).
Please see information in the docs regarding [code formatting with pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks).
## License

View File

@@ -20,7 +20,7 @@
&nbsp;
<a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a>
&nbsp;
<a href="http://gethomepage.dev/latest/" title="Docs"><img title="Docs" src="https://github.com/gethomepage/homepage/actions/workflows/docs-publish.yml/badge.svg"/></a>
<a href="https://gethomepage.dev/" title="Docs"><img title="Docs" src="https://github.com/gethomepage/homepage/actions/workflows/docs-publish.yml/badge.svg"/></a>
&nbsp;
<a href="https://paypal.me/phelpsben" title="Donate"><img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/benphelps"></a>
</p>
@@ -48,19 +48,19 @@ With features like quick search, bookmarks, weather support, a wide range of int
## Docker Integration
Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker Service Discovery](https://gethomepage.dev/latest/configs/docker/#automatic-service-discovery) page for more information.
Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker Service Discovery](https://gethomepage.dev/configs/docker/#automatic-service-discovery) page for more information.
## Service Widgets
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/widgets/) page for more information.
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/widgets/) page for more information.
## Information Widgets
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/widgets/) page for more information.
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/widgets/) page for more information.
## Customization
Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/latest/configs/settings/) page for more information.
Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/configs/settings/) page for more information.
# Getting Started
@@ -170,7 +170,7 @@ If you have any questions, suggestions, or general issues, please start a discus
## Troubleshooting
In addition to the docs, the [troubleshooting guide](https://gethomepage.dev/latest/troubleshooting/) can help reveal many basic config or network issues. If you're having a problem, it's a good place to start.
In addition to the docs, the [troubleshooting guide](https://gethomepage.dev/troubleshooting/) can help reveal many basic config or network issues. If you're having a problem, it's a good place to start.
## Contributing & Contributors

1
docs/CNAME Normal file
View File

@@ -0,0 +1 @@
gethomepage.dev

View File

@@ -65,9 +65,13 @@ Services may have descriptions,
Services may have an icon attached to them, you can use icons from [Dashboard Icons](https://github.com/walkxcode/dashboard-icons) automatically, by passing the name of the icon, with, or without `.png` or with `.svg` to use the svg version.
You can also specify prefixed icons from [Material Design Icons](https://materialdesignicons.com) with `mdi-XX` or [Simple Icons](https://simpleicons.org/) with `si-XX`.
You can also specify prefixed icons from:
You can specify a custom color by adding a hex color code as suffix e.g. `mdi-XX-#f0d453` or `si-XX-#a712a2`.
- [Material Design Icons](https://pictogrammers.com/library/mdi/) with `mdi-XX`
- [Simple Icons](https://simpleicons.org/) with `si-XX`
- [selfh.st/icons](https://selfh.st/icons/) with `sh-XX` to use the png version or `sh-XX.svg/png/webp` for a specific version
You can specify a custom color for `mdi` and `si` icons by adding a hex color code as a suffix e.g. `mdi-XX-#f0d453` or `si-XX-#a712a2`.
To use a remote icon, use the absolute URL (e.g. `https://...`).
@@ -171,7 +175,7 @@ Services may be connected to a Docker container, either running on the local mac
!!! note
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-stats) for more information
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/gethomepage/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">

View File

@@ -8,7 +8,7 @@ icon: simple/docker
You have a few options for deploying homepage, depending on your needs. We offer docker images for a majority of platforms. You can also install and run homepage from source if Docker is not your thing. It can even be installed on Kubernetes with Helm.
</p>
!!! danger
!!! warning
Please note that when using features such as widgets, Homepage can access personal information (for example from your home automation system) and Homepage currently does not (and is not planned to) include any authentication layer itself. Thus, we recommend homepage be deployed behind a reverse proxy including authentication, SSL etc, and / or behind a VPN.

View File

@@ -31,15 +31,15 @@ You may need to set the permissions of the folders to be able to edit the files.
- To use the [Docker integration](../configs/docker.md), you only need to use the `container:` parameter. There is no need to set the server.
!!! note
!!! note
To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, `container:` will still need to be set. For example:
To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, `container:` will still need to be set. For example:
```
- Plex:
icon: /icons/plex.png
href: https://app.plex.com
container: plex
```
```
- Plex:
icon: /icons/plex.png
href: https://app.plex.com
container: plex
```
- When you upload a new image into the **/images** folder, you will need to restart the container for it to show up in the WebUI. Please see the [service icons](../configs/services.md#icons) for more information.

View File

@@ -57,6 +57,11 @@
--carbon-text-color: var(--md-typeset-color) !important;
}
[data-md-color-scheme="default"] .carbon-text {
color: var(--md-code-fg-color) !important;
--carbon-text-color: #313131 !important;
}
.md-typeset__table {
width: 100%;
}

View File

@@ -17,7 +17,7 @@ hide:
All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to try:
1. Ensure that you follow the rule mentioned on https://gethomepage.dev/latest/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error.
1. Ensure that you follow the rule mentioned on https://gethomepage.dev/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error.
2. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.:

View File

@@ -7,6 +7,8 @@ Learn more about [Changedetection.io](https://github.com/dgtlmoon/changedetectio
Find your API key under `Settings > API`.
Allowed fields: `["diffsDetected", "totalObserved"]`.
```yaml
widget:
type: changedetectionio

View File

@@ -11,8 +11,11 @@ Learn more about [Gluetun](https://github.com/qdm12/gluetun).
Allowed fields: `["public_ip", "region", "country"]`.
To setup authentication, follow [the official Gluetun documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication).
```yaml
widget:
type: gluetun
url: http://gluetun.host.or.ip:port
key: gluetunkey # Not required if /v1/publicip/ip endpoint is configured with `auth = none`
```

View File

@@ -5,6 +5,11 @@ description: Immich Widget Configuration
Learn more about [Immich](https://github.com/immich-app/immich).
| Immich Version | Homepage Widget Version |
| -------------- | ----------------------- |
| < v1.118 | 1 (default) |
| >= v1.118 | 2 |
Find your API key under `Account Settings > API Keys`.
Allowed fields: `["users" ,"photos", "videos", "storage"]`.
@@ -16,4 +21,5 @@ widget:
type: immich
url: http://immich.host.or.ip
key: adminapikeyadminapikeyadminapikey
version: 2 # optional, default is 1
```

View File

@@ -59,7 +59,9 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Kopia](kopia.md)
- [Lidarr](lidarr.md)
- [Linkwarden](linkwarden.md)
- [Lubelogger](lubelogger.md)
- [Mastodon](mastodon.md)
- [Mailcow](mailcow.md)
- [Mealie](mealie.md)
- [Medusa](medusa.md)
- [Mikrotik](mikrotik.md)
@@ -126,6 +128,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Uptime Kuma](uptime-kuma.md)
- [UptimeRobot](uptimerobot.md)
- [UrBackup](urbackup.md)
- [Vikunja](vikunja.md)
- [Watchtower](watchtower.md)
- [WGEasy](wgeasy.md)
- [WhatsUpDocker](whatsupdocker.md)

View File

@@ -0,0 +1,20 @@
---
title: LubeLogger
description: LubeLogger Widget Configuration
---
Learn more about [LubeLogger](https://github.com/hargata/lubelog) (v1.3.7 or higher is required).
The widget comes in two 'flavors', one shows data for all vehicles or for just a specific vehicle with the `vehicleID` parameter.
Allowed fields: `["vehicles", "serviceRecords", "reminders"]`.
For the single-vehicle version: `["vehicle", "serviceRecords", "reminders", "nextReminder"]
```yaml
widget:
type: lubelogger
url: https://lubelogger.host.or.ip
username: lubeloggerusername
password: lubeloggerpassword
vehicleID: 1 # optional, changes to single-vehicle version
```

View File

@@ -0,0 +1,15 @@
---
title: Mailcow
description: Mailcow Widget Configuration
---
Learn more about [Mailcow](https://github.com/mailcow/mailcow-dockerized).
Allowed fields: `["domains", "mailboxes", "mails", "storage"]`.
```yaml
widget:
type: mailcow
url: https://mailcow.host.or.ip
key: mailcowapikey
```

View File

@@ -9,8 +9,11 @@ _Note that the project was renamed from PiAlert to NetAlertX._
Allowed fields: `["total", "connected", "new_devices", "down_alerts"]`.
If you have enabled a password on your NetAlertX instance, you will need to provide the `SYNC_api_token` as the `key` in your config.
```yaml
widget:
type: netalertx
url: http://ip:port
key: netalertxsyncapitoken # optional, only if password is enabled
```

View File

@@ -3,7 +3,9 @@ title: PhotoPrism
description: PhotoPrism Widget Configuration
---
Learn more about [PhotoPrism](https://github.com/photoprism/photoprism)..
Learn more about [PhotoPrism](https://github.com/photoprism/photoprism).
Authentication is possible via [app passwords](https://docs.photoprism.app/user-guide/settings/account/#apps-and-devices) or username/password.
Allowed fields: `["albums", "photos", "videos", "people"]`.
@@ -11,6 +13,7 @@ Allowed fields: `["albums", "photos", "videos", "people"]`.
widget:
type: photoprism
url: http://photoprism.host.or.ip:port
username: admin
password: password
username: admin # required only if using username/password
password: password # required only if using username/password
key: # required only if using app passwords
```

View File

@@ -5,8 +5,6 @@ description: PiHole Widget Configuration
Learn more about [PiHole](https://github.com/pi-hole/pi-hole).
As of v2022.12 [PiHole requires the use of an API key](https://pi-hole.net/blog/2022/11/17/upcoming-changes-authentication-for-more-api-endpoints-required/#page-content) if an admin password is set. Older versions do not require any authentication even if the admin uses a password.
Allowed fields: `["queries", "blocked", "blocked_percent", "gravity"]`.
Note: by default the "blocked" and "blocked_percent" fields are merged e.g. "1,234 (15%)" but explicitly including the "blocked_percent" field will change them to display separately.
@@ -18,5 +16,3 @@ widget:
version: 6 # required if running v6 or higher, defaults to 5
key: yourpiholeapikey # optional
```
_Added in v0.1.0, updated in v0.8.9_

View File

@@ -7,7 +7,7 @@ Learn more about [Unifi Controller](https://ui.com/).
_(Find the Unifi Controller information widget [here](../info/unifi_controller.md))_
You can display general connectivity status from your Unifi (Network) Controller. When authenticating you will want to use an account that has at least read privileges.
You can display general connectivity status from your Unifi (Network) Controller. When authenticating you will want to use a local account that has at least read privileges.
An optional 'site' parameter can be supplied, if it is not the widget will use the default site for the controller.

View File

@@ -0,0 +1,18 @@
---
title: Vikunja
description: Vikunja Widget Configuration
---
Learn more about [Vikunja](https://vikunja.io).
Allowed fields: `["projects", "tasks7d", "tasksOverdue", "tasksInProgress"]`.
A list of the next 5 tasks ordered by due date is disabled by default, but can be enabled with the `enableTaskList` option.
```yaml
widget:
type: vikunja
url: http[s]://vikunja.host.or.ip[:port]
key: vikunjaapikey
enableTaskList: true # optional, defaults to false
```

View File

@@ -47,6 +47,7 @@ nav:
- widgets/services/crowdsec.md
- widgets/services/customapi.md
- widgets/services/deluge.md
- widgets/services/develancacheui.md
- widgets/services/diskstation.md
- widgets/services/downloadstation.md
- widgets/services/emby.md
@@ -81,7 +82,9 @@ nav:
- widgets/services/kopia.md
- widgets/services/lidarr.md
- widgets/services/linkwarden.md
- widgets/services/lubelogger.md
- widgets/services/mastodon.md
- widgets/services/mailcow.md
- widgets/services/mealie.md
- widgets/services/medusa.md
- widgets/services/mikrotik.md
@@ -148,6 +151,7 @@ nav:
- widgets/services/uptime-kuma.md
- widgets/services/uptimerobot.md
- widgets/services/urbackup.md
- widgets/services/vikunja.md
- widgets/services/watchtower.md
- widgets/services/wgeasy.md
- widgets/services/whatsupdocker.md
@@ -231,8 +235,6 @@ extra_css:
- "stylesheets/extra.css"
extra:
version:
provider: mike
social:
- icon: fontawesome/brands/discord
link: https://discord.gg/k4ruYNrudu

88
package-lock.json generated
View File

@@ -14,7 +14,7 @@
"classnames": "^2.5.1",
"compare-versions": "^6.1.0",
"dockerode": "^4.0.2",
"follow-redirects": "^1.15.6",
"follow-redirects": "^1.15.9",
"gamedig": "^5.1.2",
"i18next": "^21.10.0",
"js-yaml": "^4.1.0",
@@ -43,20 +43,20 @@
"devDependencies": {
"@tailwindcss/forms": "^0.5.8",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.0",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.34.2",
"eslint-plugin-react": "^7.37.1",
"eslint-plugin-react-hooks": "^4.6.2",
"postcss": "^8.4.38",
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.3",
"typescript": "^5.4.5"
"tailwindcss": "^3.4.13",
"typescript": "^5.6.2"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"
@@ -164,11 +164,10 @@
}
},
"node_modules/@eslint/js": {
"version": "8.57.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
"integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
@@ -191,14 +190,13 @@
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
"integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
"deprecated": "Use @eslint/config-array instead",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@humanwhocodes/object-schema": "^2.0.2",
"@humanwhocodes/object-schema": "^2.0.3",
"debug": "^4.3.1",
"minimatch": "^3.0.5"
},
@@ -225,8 +223,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"deprecated": "Use @eslint/object-schema instead",
"dev": true,
"license": "BSD-3-Clause"
"dev": true
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
@@ -2942,17 +2939,16 @@
}
},
"node_modules/eslint": {
"version": "8.57.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
"integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.4",
"@eslint/js": "8.57.0",
"@humanwhocodes/config-array": "^0.11.14",
"@eslint/js": "8.57.1",
"@humanwhocodes/config-array": "^0.13.0",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
@@ -3285,11 +3281,10 @@
}
},
"node_modules/eslint-plugin-react": {
"version": "7.35.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz",
"integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==",
"version": "7.37.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz",
"integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-includes": "^3.1.8",
"array.prototype.findlast": "^1.2.5",
@@ -3659,16 +3654,15 @@
"license": "MIT"
},
"node_modules/follow-redirects": {
"version": "1.15.8",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
"integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
"version": "1.15.9",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -6193,9 +6187,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.45",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
"integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
"version": "8.4.47",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
"integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
"dev": true,
"funding": [
{
@@ -6211,11 +6205,10 @@
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
"picocolors": "^1.1.0",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -7189,10 +7182,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"license": "BSD-3-Clause",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"engines": {
"node": ">=0.10.0"
}
@@ -7721,11 +7713,10 @@
}
},
"node_modules/tailwindcss": {
"version": "3.4.10",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz",
"integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==",
"version": "3.4.13",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz",
"integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -8111,11 +8102,10 @@
}
},
"node_modules/typescript": {
"version": "5.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
"integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"

View File

@@ -16,7 +16,7 @@
"classnames": "^2.5.1",
"compare-versions": "^6.1.0",
"dockerode": "^4.0.2",
"follow-redirects": "^1.15.6",
"follow-redirects": "^1.15.9",
"gamedig": "^5.1.2",
"i18next": "^21.10.0",
"js-yaml": "^4.1.0",
@@ -45,20 +45,20 @@
"devDependencies": {
"@tailwindcss/forms": "^0.5.8",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.0",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.34.2",
"eslint-plugin-react": "^7.37.1",
"eslint-plugin-react-hooks": "^4.6.2",
"postcss": "^8.4.38",
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.3",
"typescript": "^5.4.5"
"tailwindcss": "^3.4.13",
"typescript": "^5.6.2"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"

284
pnpm-lock.yaml generated
View File

@@ -27,8 +27,8 @@ importers:
specifier: ^4.0.2
version: 4.0.2
follow-redirects:
specifier: ^1.15.6
version: 1.15.8
specifier: ^1.15.9
version: 1.15.9
gamedig:
specifier: ^5.1.2
version: 5.1.3
@@ -108,52 +108,52 @@ importers:
devDependencies:
'@tailwindcss/forms':
specifier: ^0.5.8
version: 0.5.9(tailwindcss@3.4.10)
version: 0.5.9(tailwindcss@3.4.13)
autoprefixer:
specifier: ^10.4.20
version: 10.4.20(postcss@8.4.45)
version: 10.4.20(postcss@8.4.47)
eslint:
specifier: ^8.57.0
version: 8.57.0
specifier: ^8.57.1
version: 8.57.1
eslint-config-airbnb:
specifier: ^19.0.4
version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.2(eslint@8.57.0))(eslint@8.57.0)
version: 19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1)
eslint-config-next:
specifier: ^14.2.3
version: 14.2.8(eslint@8.57.0)(typescript@5.5.4)
version: 14.2.8(eslint@8.57.1)(typescript@5.6.2)
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@8.57.0)
version: 9.1.0(eslint@8.57.1)
eslint-plugin-import:
specifier: ^2.29.1
version: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
version: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y:
specifier: ^6.8.0
version: 6.10.0(eslint@8.57.0)
version: 6.10.0(eslint@8.57.1)
eslint-plugin-prettier:
specifier: ^5.2.1
version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3)
version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3)
eslint-plugin-react:
specifier: ^7.34.2
version: 7.35.2(eslint@8.57.0)
specifier: ^7.37.1
version: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks:
specifier: ^4.6.2
version: 4.6.2(eslint@8.57.0)
version: 4.6.2(eslint@8.57.1)
postcss:
specifier: ^8.4.38
version: 8.4.45
specifier: ^8.4.47
version: 8.4.47
prettier:
specifier: ^3.2.5
version: 3.3.3
tailwind-scrollbar:
specifier: ^3.0.5
version: 3.1.0(tailwindcss@3.4.10)
version: 3.1.0(tailwindcss@3.4.13)
tailwindcss:
specifier: ^3.4.3
version: 3.4.10
specifier: ^3.4.13
version: 3.4.13
typescript:
specifier: ^5.4.5
version: 5.5.4
specifier: ^5.6.2
version: 5.6.2
packages:
@@ -189,8 +189,8 @@ packages:
resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@eslint/js@8.57.0':
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
'@eslint/js@8.57.1':
resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
'@headlessui/react@1.7.19':
@@ -200,8 +200,8 @@ packages:
react: ^16 || ^17 || ^18
react-dom: ^16 || ^17 || ^18
'@humanwhocodes/config-array@0.11.14':
resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
'@humanwhocodes/config-array@0.13.0':
resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
engines: {node: '>=10.10.0'}
deprecated: Use @eslint/config-array instead
@@ -1134,8 +1134,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
eslint-plugin-react@7.35.2:
resolution: {integrity: sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==}
eslint-plugin-react@7.37.1:
resolution: {integrity: sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
@@ -1148,8 +1148,8 @@ packages:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint@8.57.0:
resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
eslint@8.57.1:
resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
@@ -1239,8 +1239,8 @@ packages:
fn.name@1.1.0:
resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
follow-redirects@1.15.8:
resolution: {integrity: sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==}
follow-redirects@1.15.9:
resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -2095,8 +2095,8 @@ packages:
resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.4.45:
resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
postcss@8.4.47:
resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@@ -2371,6 +2371,10 @@ packages:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
split-ca@1.0.1:
resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==}
@@ -2506,8 +2510,8 @@ packages:
peerDependencies:
tailwindcss: 3.x
tailwindcss@3.4.10:
resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==}
tailwindcss@3.4.13:
resolution: {integrity: sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -2620,8 +2624,8 @@ packages:
resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
typescript@5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
typescript@5.6.2:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==}
engines: {node: '>=14.17'}
hasBin: true
@@ -2784,9 +2788,9 @@ snapshots:
enabled: 2.0.0
kuler: 2.0.0
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)':
dependencies:
eslint: 8.57.0
eslint: 8.57.1
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.11.0': {}
@@ -2805,7 +2809,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@8.57.0': {}
'@eslint/js@8.57.1': {}
'@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@@ -2814,7 +2818,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
'@humanwhocodes/config-array@0.11.14':
'@humanwhocodes/config-array@0.13.0':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
debug: 4.3.6
@@ -2952,10 +2956,10 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
'@tailwindcss/forms@0.5.9(tailwindcss@3.4.10)':
'@tailwindcss/forms@0.5.9(tailwindcss@3.4.13)':
dependencies:
mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.10
tailwindcss: 3.4.13
'@tanstack/react-virtual@3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
@@ -3011,36 +3015,36 @@ snapshots:
'@types/triple-beam@1.3.5': {}
'@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)':
dependencies:
'@eslint-community/regexpp': 4.11.0
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/type-utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.6
eslint: 8.57.0
eslint: 8.57.1
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.5.4
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
'@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.6
eslint: 8.57.0
eslint: 8.57.1
optionalDependencies:
typescript: 5.5.4
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
@@ -3049,21 +3053,21 @@ snapshots:
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0
'@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/type-utils@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
dependencies:
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
debug: 4.3.6
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.5.4)
eslint: 8.57.1
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.5.4
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.2.0': {}
'@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2)':
dependencies:
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0
@@ -3072,21 +3076,21 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.3
ts-api-utils: 1.3.0(typescript@5.5.4)
ts-api-utils: 1.3.0(typescript@5.6.2)
optionalDependencies:
typescript: 5.5.4
typescript: 5.6.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/utils@7.2.0(eslint@8.57.1)(typescript@5.6.2)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.2.0
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4)
eslint: 8.57.0
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2)
eslint: 8.57.1
semver: 7.6.3
transitivePeerDependencies:
- supports-color
@@ -3220,14 +3224,14 @@ snapshots:
asynckit@0.4.0: {}
autoprefixer@10.4.20(postcss@8.4.45):
autoprefixer@10.4.20(postcss@8.4.47):
dependencies:
browserslist: 4.23.3
caniuse-lite: 1.0.30001657
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.0
postcss: 8.4.45
postcss: 8.4.47
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
@@ -3755,49 +3759,49 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint@8.57.0):
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint@8.57.1):
dependencies:
confusing-browser-globals: 1.0.11
eslint: 8.57.0
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint: 8.57.1
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
object.assign: 4.1.5
object.entries: 1.1.8
semver: 6.3.1
eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.35.2(eslint@8.57.0))(eslint@8.57.0):
eslint-config-airbnb@19.0.4(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.1))(eslint-plugin-react@7.37.1(eslint@8.57.1))(eslint@8.57.1):
dependencies:
eslint: 8.57.0
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint@8.57.0)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0)
eslint-plugin-react: 7.35.2(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
eslint: 8.57.1
eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1))(eslint@8.57.1)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
object.assign: 4.1.5
object.entries: 1.1.8
eslint-config-next@14.2.8(eslint@8.57.0)(typescript@5.5.4):
eslint-config-next@14.2.8(eslint@8.57.1)(typescript@5.6.2):
dependencies:
'@next/eslint-plugin-next': 14.2.8
'@rushstack/eslint-patch': 1.10.4
'@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
eslint: 8.57.0
'@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0)
eslint-plugin-react: 7.35.2(eslint@8.57.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0)
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
eslint-plugin-react: 7.37.1(eslint@8.57.1)
eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
optionalDependencies:
typescript: 5.5.4
typescript: 5.6.2
transitivePeerDependencies:
- eslint-import-resolver-webpack
- eslint-plugin-import-x
- supports-color
eslint-config-prettier@9.1.0(eslint@8.57.0):
eslint-config-prettier@9.1.0(eslint@8.57.1):
dependencies:
eslint: 8.57.0
eslint: 8.57.1
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -3807,37 +3811,37 @@ snapshots:
transitivePeerDependencies:
- supports-color
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0):
eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.6
enhanced-resolve: 5.17.1
eslint: 8.57.0
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint: 8.57.1
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
fast-glob: 3.3.2
get-tsconfig: 4.8.0
is-bun-module: 1.1.0
is-glob: 4.0.3
optionalDependencies:
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0)
eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-node
- eslint-import-resolver-webpack
- supports-color
eslint-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0):
eslint-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
eslint: 8.57.0
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0)
eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1)
transitivePeerDependencies:
- supports-color
eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.0):
eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -3846,9 +3850,9 @@ snapshots:
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
eslint: 8.57.0
eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.0))(eslint@8.57.0)
eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -3859,13 +3863,13 @@ snapshots:
semver: 6.3.1
tsconfig-paths: 3.15.0
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.0):
eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1):
dependencies:
aria-query: 5.1.3
array-includes: 3.1.8
@@ -3876,7 +3880,7 @@ snapshots:
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
es-iterator-helpers: 1.0.19
eslint: 8.57.0
eslint: 8.57.1
hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -3885,20 +3889,20 @@ snapshots:
safe-regex-test: 1.0.3
string.prototype.includes: 2.0.0
eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3):
eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3):
dependencies:
eslint: 8.57.0
eslint: 8.57.1
prettier: 3.3.3
prettier-linter-helpers: 1.0.0
synckit: 0.9.1
optionalDependencies:
eslint-config-prettier: 9.1.0(eslint@8.57.0)
eslint-config-prettier: 9.1.0(eslint@8.57.1)
eslint-plugin-react-hooks@4.6.2(eslint@8.57.0):
eslint-plugin-react-hooks@4.6.2(eslint@8.57.1):
dependencies:
eslint: 8.57.0
eslint: 8.57.1
eslint-plugin-react@7.35.2(eslint@8.57.0):
eslint-plugin-react@7.37.1(eslint@8.57.1):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -3906,7 +3910,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.0.19
eslint: 8.57.0
eslint: 8.57.1
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -3927,13 +3931,13 @@ snapshots:
eslint-visitor-keys@3.4.3: {}
eslint@8.57.0:
eslint@8.57.1:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
'@eslint-community/regexpp': 4.11.0
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.57.0
'@humanwhocodes/config-array': 0.11.14
'@eslint/js': 8.57.1
'@humanwhocodes/config-array': 0.13.0
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
'@ungap/structured-clone': 1.2.0
@@ -4055,7 +4059,7 @@ snapshots:
fn.name@1.1.0: {}
follow-redirects@1.15.8: {}
follow-redirects@1.15.9: {}
for-each@0.3.3:
dependencies:
@@ -4854,28 +4858,28 @@ snapshots:
possible-typed-array-names@1.0.0: {}
postcss-import@15.1.0(postcss@8.4.45):
postcss-import@15.1.0(postcss@8.4.47):
dependencies:
postcss: 8.4.45
postcss: 8.4.47
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
postcss-js@4.0.1(postcss@8.4.45):
postcss-js@4.0.1(postcss@8.4.47):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.45
postcss: 8.4.47
postcss-load-config@4.0.2(postcss@8.4.45):
postcss-load-config@4.0.2(postcss@8.4.47):
dependencies:
lilconfig: 3.1.2
yaml: 2.5.1
optionalDependencies:
postcss: 8.4.45
postcss: 8.4.47
postcss-nested@6.2.0(postcss@8.4.45):
postcss-nested@6.2.0(postcss@8.4.47):
dependencies:
postcss: 8.4.45
postcss: 8.4.47
postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2:
@@ -4891,11 +4895,11 @@ snapshots:
picocolors: 1.1.0
source-map-js: 1.2.0
postcss@8.4.45:
postcss@8.4.47:
dependencies:
nanoid: 3.3.7
picocolors: 1.1.0
source-map-js: 1.2.0
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
@@ -5201,6 +5205,8 @@ snapshots:
source-map-js@1.2.0: {}
source-map-js@1.2.1: {}
split-ca@1.0.1: {}
ssh2@1.15.0:
@@ -5349,11 +5355,11 @@ snapshots:
systeminformation@5.23.5: {}
tailwind-scrollbar@3.1.0(tailwindcss@3.4.10):
tailwind-scrollbar@3.1.0(tailwindcss@3.4.13):
dependencies:
tailwindcss: 3.4.10
tailwindcss: 3.4.13
tailwindcss@3.4.10:
tailwindcss@3.4.13:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -5369,11 +5375,11 @@ snapshots:
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.1.0
postcss: 8.4.45
postcss-import: 15.1.0(postcss@8.4.45)
postcss-js: 4.0.1(postcss@8.4.45)
postcss-load-config: 4.0.2(postcss@8.4.45)
postcss-nested: 6.2.0(postcss@8.4.45)
postcss: 8.4.47
postcss-import: 15.1.0(postcss@8.4.47)
postcss-js: 4.0.1(postcss@8.4.47)
postcss-load-config: 4.0.2(postcss@8.4.47)
postcss-nested: 6.2.0(postcss@8.4.47)
postcss-selector-parser: 6.1.2
resolve: 1.22.8
sucrase: 3.35.0
@@ -5448,9 +5454,9 @@ snapshots:
triple-beam@1.4.1: {}
ts-api-utils@1.3.0(typescript@5.5.4):
ts-api-utils@1.3.0(typescript@5.6.2):
dependencies:
typescript: 5.5.4
typescript: 5.6.2
ts-interface-checker@0.1.13: {}
@@ -5509,7 +5515,7 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
typescript@5.5.4: {}
typescript@5.6.2: {}
unbox-primitive@1.0.2:
dependencies:

View File

@@ -325,15 +325,15 @@
},
"technitium": {
"totalQueries": "Navraë",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Sukses",
"totalServerFailure": "Mislukkings",
"totalNxDomain": "NX-domeine",
"totalRefused": "Geweier",
"totalAuthoritative": "Gesaghebbend",
"totalRecursive": "Rekursief",
"totalCached": "Gekas",
"totalBlocked": "Geblok",
"totalDropped": "Dropped",
"totalDropped": "Geval",
"totalClients": "Kliënte"
},
"tdarr": {
@@ -850,6 +850,12 @@
"screenshots": "Skermskote",
"totalfilesize": "Totale Grootte"
},
"mailcow": {
"domains": "Domeine",
"mailboxes": "Posbusse",
"mails": "E-posse",
"storage": "Bergplek"
},
"netdata": {
"warnings": "Waarskuwings",
"criticals": "Kritici"
@@ -933,11 +939,19 @@
"tags": "Merkers"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "Nie geklassifiseer nie",
"information": "Informasie",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Waarskuwing",
"average": "Gemiddeld",
"high": "Hoog",
"disaster": "Ramp"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "لقطات شاشة",
"totalfilesize": "الحجم الكلي"
},
"mailcow": {
"domains": "مجالات",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "التخزين"
},
"netdata": {
"warnings": "تحذيرات",
"criticals": "حرج"
@@ -939,5 +945,13 @@
"average": "متوسط",
"high": "عالي",
"disaster": "كارثة"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Dominis",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Emmagatzematge"
},
"netdata": {
"warnings": "Avisos",
"criticals": "Crítics"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domény",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Úložiště"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domæner",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Lager"
},
"netdata": {
"warnings": "Advarsler",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Bildschirmfotos",
"totalfilesize": "Gesamtgröße"
},
"mailcow": {
"domains": "Domänen",
"mailboxes": "Postfächer",
"mails": "E-Mails",
"storage": "Speicher"
},
"netdata": {
"warnings": "Warnungen",
"criticals": "Kritisch"
@@ -939,5 +945,13 @@
"average": "Durchschnitt",
"high": "Hoch",
"disaster": "Katastrophe"
},
"lubelogger": {
"vehicle": "Fahrzeug",
"vehicles": "Fahrzeuge",
"serviceRecords": "Wartungseinträge",
"reminders": "Erinnerungen",
"nextReminder": "Nächste Erinnerung",
"none": "Keine"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Τομείς",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Αποθηκευτικός χώρος"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,19 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
},
"vikunja": {
"projects": "Active Projects",
"tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -325,15 +325,15 @@
},
"technitium": {
"totalQueries": "Consultas",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalNoError": "Éxitos",
"totalServerFailure": "Fallas",
"totalNxDomain": "Dominios NX",
"totalRefused": "Rechazados",
"totalAuthoritative": "Autoritarios",
"totalRecursive": "Recursivos",
"totalCached": "En caché",
"totalBlocked": "Bloqueado",
"totalDropped": "Dropped",
"totalDropped": "Descartados",
"totalClients": "Clientes"
},
"tdarr": {
@@ -844,11 +844,17 @@
},
"romm": {
"platforms": "Plataformas",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"totalRoms": "Juegos",
"saves": "Guardados",
"states": "Estados",
"screenshots": "Capturas de pantalla",
"totalfilesize": "Tamaño total"
},
"mailcow": {
"domains": "Dominios",
"mailboxes": "Buzones de correo",
"mails": "Correos",
"storage": "Almacenamiento"
},
"netdata": {
"warnings": "Advertencias",
@@ -933,11 +939,19 @@
"tags": "Etiquetas"
},
"zabbix": {
"unclassified": "Not classified",
"unclassified": "No clasificado",
"information": "Información",
"warning": "Warning",
"average": "Average",
"high": "High",
"disaster": "Disaster"
"warning": "Advertencia",
"average": "Promedio",
"high": "Alto",
"disaster": "Desastre"
},
"lubelogger": {
"vehicle": "Vehículo",
"vehicles": "Vehículos",
"serviceRecords": "Registros de servicio",
"reminders": "Recordatorios",
"nextReminder": "Siguiente recordatorio",
"none": "Nada"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Verkkotunnuksia",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domaines",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Stockage"
},
"netdata": {
"warnings": "Avertissements",
"criticals": "Urgent"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domene",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Spremište"
},
"netdata": {
"warnings": "Upozorenja",
"criticals": "Kritično"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domainek",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Tárhely"
},
"netdata": {
"warnings": "Figyelmeztetések",
"criticals": "Kritikusok"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Jármű",
"vehicles": "Járművek",
"serviceRecords": "Szolgáltatások nyílvántartása",
"reminders": "Emlékeztetők",
"nextReminder": "Következő emlékeztető",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Jumlah Domain",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Penyimpanan"
},
"netdata": {
"warnings": "Peringatan",
"criticals": "Kritis"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domini",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Archiviazione"
},
"netdata": {
"warnings": "Avvisi",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "スクリーンショット",
"totalfilesize": "合計サイズ"
},
"mailcow": {
"domains": "ドメイン",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "ストレージ"
},
"netdata": {
"warnings": "警告",
"criticals": "重大"
@@ -939,5 +945,13 @@
"average": "平均",
"high": "高い",
"disaster": "災害"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -130,7 +130,7 @@
},
"freshrss": {
"subscriptions": "구독",
"unread": "읽지 않음"
"unread": "미열람"
},
"fritzbox": {
"connectionStatus": "상태",
@@ -376,7 +376,7 @@
"numberOfFailQueries": "Fail Queries"
},
"jackett": {
"configured": "Configured",
"configured": "구성됨",
"errored": "오류"
},
"strelaysrv": {
@@ -404,12 +404,12 @@
},
"miniflux": {
"read": "읽음",
"unread": "읽지 않음"
"unread": "미열람"
},
"authentik": {
"users": "사용자",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
"loginsLast24H": "로그인 (24h)",
"failedLoginsLast24H": "실패한 로그인 (24h)"
},
"proxmox": {
"mem": "MEM",
@@ -538,9 +538,9 @@
},
"tubearchivist": {
"downloads": "대기열",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
"videos": "동영상",
"channels": "채널",
"playlists": "재생 목록"
},
"truenas": {
"load": "System Load",
@@ -559,7 +559,7 @@
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"channels": "채널",
"hd": "HD",
"tunerCount": "Tuners",
"channelNumber": "채널",
@@ -648,9 +648,9 @@
},
"immich": {
"users": "사용자",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
"photos": "사진",
"videos": "동영상",
"storage": "저장됨"
},
"uptimekuma": {
"up": "Sites Up",
@@ -663,10 +663,10 @@
"series": "시리즈",
"archives": "Archives",
"chapters": "Chapters",
"categories": "Categories"
"categories": "분류"
},
"komga": {
"libraries": "Libraries",
"libraries": "서재",
"series": "시리즈",
"books": "책"
},
@@ -682,8 +682,8 @@
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"photos": "사진",
"videos": "동영상",
"people": "People"
},
"fileflows": {
@@ -699,12 +699,12 @@
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users",
"numfiles": "Files",
"numshares": "Shared Items"
"cpuload": "CPU 부하량",
"memoryusage": "메모리 사용량",
"freespace": "여유 공간",
"activeusers": "활성 유저",
"numfiles": "파일",
"numshares": "공유된 항목"
},
"kopia": {
"status": "상태",
@@ -754,8 +754,8 @@
},
"calibreweb": {
"books": "책",
"authors": "Authors",
"categories": "Categories",
"authors": "저자",
"categories": "분류",
"series": "시리즈"
},
"jdownloader": {
@@ -766,7 +766,7 @@
},
"kavita": {
"seriesCount": "시리즈",
"totalFiles": "Files"
"totalFiles": "파일"
},
"azuredevops": {
"result": "Result",
@@ -802,7 +802,7 @@
"mealie": {
"recipes": "Recipes",
"users": "사용자",
"categories": "Categories",
"categories": "분류",
"tags": "태그"
},
"openmediavault": {
@@ -843,12 +843,18 @@
"noEventsFound": "No events found"
},
"romm": {
"platforms": "Platforms",
"totalRoms": "Games",
"saves": "Saves",
"states": "States",
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
"platforms": "기종",
"totalRoms": "게임",
"saves": "세이브",
"states": "스테이트",
"screenshots": "스크린샷",
"totalfilesize": "전체 용량"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "저장됨"
},
"netdata": {
"warnings": "Warnings",
@@ -857,7 +863,7 @@
"plantit": {
"events": "Events",
"plants": "Plants",
"photos": "Photos",
"photos": "사진",
"species": "Species"
},
"gitea": {
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domain",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Amaran",
"criticals": "Kritikal"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots ",
"totalfilesize": "Totale grootte"
},
"mailcow": {
"domains": "Domeinen",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Opslag"
},
"netdata": {
"warnings": "Waarschuwingen",
"criticals": "Kritiek"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domener",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Lagring"
},
"netdata": {
"warnings": "Advarsler",
"criticals": "Kritiske"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -463,8 +463,8 @@
"51-night": "Lekka mżawka",
"53-day": "Mżawka",
"53-night": "Mżawka",
"55-day": "Ciężka mżawka",
"55-night": "Ciężka mżawka",
"55-day": "Gęsta mżawka",
"55-night": "Gęsta mżawka",
"56-day": "Lekko chłodna mżawka",
"56-night": "Lekko chłodna mżawka",
"57-day": "Chłodna mżawka",
@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domeny",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Pamięć"
},
"netdata": {
"warnings": "Ostrzeżenia",
"criticals": "Krytyczny"
@@ -905,7 +911,7 @@
"total": "Całkowite"
},
"swagdashboard": {
"proxied": "Poprzez proxy",
"proxied": "Proxy",
"auth": "Z uwietrzytelnieniem",
"outdated": "Nieaktualne",
"banned": "Zbanowano"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domínios",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Armazenamento"
},
"netdata": {
"warnings": "Avisos",
"criticals": "Críticos"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domínios",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Armazenamento"
},
"netdata": {
"warnings": "Alertas",
"criticals": "Críticos"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domenii",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Домены",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Хранилище"
},
"netdata": {
"warnings": "Предупреждения",
"criticals": "Критические"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domény",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Úložisko"
},
"netdata": {
"warnings": "Upozornenia",
"criticals": "Kritické"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Posnetki zaslona",
"totalfilesize": "Skupna velikost"
},
"mailcow": {
"domains": "Domene",
"mailboxes": "Nabiralniki",
"mails": "Pošta",
"storage": "Shramba"
},
"netdata": {
"warnings": "Opozorila",
"criticals": "Kritično"
@@ -939,5 +945,13 @@
"average": "Povprečno",
"high": "Visoko",
"disaster": "Katastrofa"
},
"lubelogger": {
"vehicle": "Vozilo",
"vehicles": "Vozila",
"serviceRecords": "Zapisi servisov",
"reminders": "Opomniki",
"nextReminder": "Naslednji opomnik",
"none": "Brez"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "డొమైన్‌లు",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Ekran görüntüleri",
"totalfilesize": "Toplam Kapasite"
},
"mailcow": {
"domains": "Etki Alanları",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Depo"
},
"netdata": {
"warnings": "Uyarılar",
"criticals": "Kritik"
@@ -939,5 +945,13 @@
"average": "Ortalama",
"high": "Yüksek",
"disaster": "Felaket"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Домени",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Сховище"
},
"netdata": {
"warnings": "Попередження",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -87,7 +87,7 @@
"ping": "Ping",
"down": "Down",
"up": "Up",
"not_available": "Not Available"
"not_available": "Không khả dụng"
},
"siteMonitor": {
"http_status": "HTTP status",
@@ -95,7 +95,7 @@
"response": "Response",
"down": "Down",
"up": "Up",
"not_available": "Not Available"
"not_available": "Không khả dụng"
},
"emby": {
"playing": "Đang chơi",
@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"netdata": {
"warnings": "Warnings",
"criticals": "Criticals"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "域",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "儲存空間"
},
"netdata": {
"warnings": "警告",
"criticals": "嚴重"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -54,8 +54,8 @@
"uptime": "运行时间",
"days": "天",
"wan": "WAN",
"lan": "LAN",
"wlan": "WLAN",
"lan": "局域网",
"wlan": "无线局域网",
"devices": "设备",
"lan_devices": "LAN 设备",
"wlan_devices": "无线局域网设备",
@@ -325,15 +325,15 @@
},
"technitium": {
"totalQueries": "查询",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNoError": "成功",
"totalServerFailure": "失败",
"totalNxDomain": "NX Domains",
"totalRefused": "Refused",
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalRefused": "已拒绝",
"totalAuthoritative": "权威",
"totalRecursive": "递归",
"totalCached": "缓存",
"totalBlocked": "阻止",
"totalDropped": "Dropped",
"totalDropped": "丢弃",
"totalClients": "客户端"
},
"tdarr": {
@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "域",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "储存空间"
},
"netdata": {
"warnings": "警告",
"criticals": "严重"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -850,6 +850,12 @@
"screenshots": "Screenshots",
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "網域",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "儲存空間"
},
"netdata": {
"warnings": "警告",
"criticals": "嚴重"
@@ -939,5 +945,13 @@
"average": "Average",
"high": "High",
"disaster": "Disaster"
},
"lubelogger": {
"vehicle": "Vehicle",
"vehicles": "Vehicles",
"serviceRecords": "Service Records",
"reminders": "Reminders",
"nextReminder": "Next Reminder",
"none": "None"
}
}

View File

@@ -13,6 +13,7 @@ export default function Item({ bookmark }) {
<a
href={bookmark.href}
title={bookmark.name}
rel="noreferrer"
target={bookmark.target ?? settings.target ?? "_blank"}
className={classNames(
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,

View File

@@ -35,6 +35,35 @@ export default function ResolvedIcon({ icon, width = 32, height = 32, alt = "log
// check mdi- or si- prefixed icons
const prefix = icon.split("-")[0];
if (prefix === "sh") {
const iconName = icon.replace("sh-", "").replace(".svg", "").replace(".png", "").replace(".webp", "");
let extension;
if (icon.endsWith(".svg")) {
extension = "svg";
} else if (icon.endsWith(".webp")) {
extension = "webp";
} else {
extension = "png";
}
return (
<Image
src={`https://cdn.jsdelivr.net/gh/selfhst/icons@main/${extension}/${iconName}.${extension}`}
width={width}
height={height}
style={{
width,
height,
objectFit: "contain",
maxHeight: "100%",
maxWidth: "100%",
}}
alt={alt}
/>
);
}
if (prefix in iconSetURLs) {
// default to theme setting
let iconName = icon.replace(`${prefix}-`, "").replace(".svg", "");

View File

@@ -21,7 +21,7 @@ export default async function handler(req, res) {
if (!widget) {
logger.debug("Unknown proxy service type: %s", type);
return res.status(403).json({ error: "Unkown proxy service type" });
return res.status(403).json({ error: "Unknown proxy service type" });
}
const serviceProxyHandler = widget.proxyHandler || genericProxyHandler;
@@ -107,7 +107,7 @@ export default async function handler(req, res) {
}
logger.debug("Unknown proxy service type: %s", type);
return res.status(403).json({ error: "Unkown proxy service type" });
return res.status(403).json({ error: "Unknown proxy service type" });
} catch (e) {
if (e) logger.error(e);
return res.status(500).send({ error: "Unexpected error" });

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/bookmarks
# https://gethomepage.dev/configs/bookmarks
- Developer:
- Github:

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/docker/
# https://gethomepage.dev/configs/docker/
# my-docker:
# host: 127.0.0.1

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/services
# https://gethomepage.dev/configs/services
- My First Group:
- My First Service:

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/settings
# https://gethomepage.dev/configs/settings
providers:
openweathermap: openweathermapapikey

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/latest/configs/service-widgets
# https://gethomepage.dev/configs/service-widgets
- resources:
cpu: true

View File

@@ -406,7 +406,7 @@ export function cleanServiceGroups(groups) {
// frigate
enableRecentEvents,
// glances, mealie, pihole, pfsense
// glances, immich, mealie, pihole, pfsense
version,
// glances
@@ -442,6 +442,9 @@ export function cleanServiceGroups(groups) {
namespace,
podSelector,
// lubelogger
vehicleID,
// mjpeg
fit,
stream,
@@ -475,6 +478,9 @@ export function cleanServiceGroups(groups) {
// unifi
site,
// vikunja
enableTaskList,
// wgeasy
threshold,
@@ -565,8 +571,8 @@ export function cleanServiceGroups(groups) {
if (snapshotHost) cleanedService.widget.snapshotHost = snapshotHost;
if (snapshotPath) cleanedService.widget.snapshotPath = snapshotPath;
}
if (["glances", "mealie", "pfsense", "pihole"].includes(type)) {
if (version) cleanedService.widget.version = version;
if (["glances", "immich", "mealie", "pfsense", "pihole"].includes(type)) {
if (version) cleanedService.widget.version = parseInt(version, 10);
}
if (type === "glances") {
if (metric) cleanedService.widget.metric = metric;
@@ -627,6 +633,12 @@ export function cleanServiceGroups(groups) {
if (type === "technitium") {
if (range !== undefined) cleanedService.widget.range = range;
}
if (type === "lubelogger") {
if (vehicleID !== undefined) cleanedService.widget.vehicleID = parseInt(vehicleID, 10);
}
if (type === "vikunja") {
if (enableTaskList !== undefined) cleanedService.widget.enableTaskList = !!enableTaskList;
}
}
return cleanedService;

View File

@@ -41,9 +41,11 @@ export default async function credentialedProxyHandler(req, res, map) {
"ghostfolio",
"linkwarden",
"mealie",
"netalertx",
"tailscale",
"tandoor",
"pterodactyl",
"vikunja",
].includes(widget.type)
) {
headers.Authorization = `Bearer ${widget.key}`;

View File

@@ -14,11 +14,11 @@ export async function sendJsonRpcRequest(url, method, params, widget) {
accept: "application/json",
};
if (widget.username && widget.password) {
if (widget?.username && widget?.password) {
headers.Authorization = `Basic ${Buffer.from(`${widget.username}:${widget.password}`).toString("base64")}`;
}
if (widget.key) {
if (widget?.key) {
headers.Authorization = `Bearer ${widget.key}`;
}

View File

@@ -56,6 +56,8 @@ const components = {
kopia: dynamic(() => import("./kopia/component")),
lidarr: dynamic(() => import("./lidarr/component")),
linkwarden: dynamic(() => import("./linkwarden/component")),
lubelogger: dynamic(() => import("./lubelogger/component")),
mailcow: dynamic(() => import("./mailcow/component")),
mastodon: dynamic(() => import("./mastodon/component")),
mealie: dynamic(() => import("./mealie/component")),
medusa: dynamic(() => import("./medusa/component")),
@@ -123,6 +125,7 @@ const components = {
uptimekuma: dynamic(() => import("./uptimekuma/component")),
uptimerobot: dynamic(() => import("./uptimerobot/component")),
urbackup: dynamic(() => import("./urbackup/component")),
vikunja: dynamic(() => import("./vikunja/component")),
watchtower: dynamic(() => import("./watchtower/component")),
wgeasy: dynamic(() => import("./wgeasy/component")),
whatsupdocker: dynamic(() => import("./whatsupdocker/component")),

View File

@@ -6,7 +6,9 @@ import useWidgetAPI from "utils/proxy/use-widget-api";
function getPerformancePercent(t, performanceRange) {
// ghostfolio v2.79.0 changed to grossPerformancePercentage
// ghostfolio v2.106.0 changed to netPerformancePercentageWithCurrencyEffect
const percent =
performanceRange.performance.netPerformancePercentageWithCurrencyEffect ??
performanceRange.performance.grossPerformancePercentage ??
performanceRange.performance.currentGrossPerformancePercent;
return `${percent > 0 ? "+" : ""}${t("common.percent", {

View File

@@ -1,8 +1,8 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/v1/{endpoint}",
proxyHandler: genericProxyHandler,
proxyHandler: credentialedProxyHandler,
mappings: {
ip: {

View File

@@ -8,11 +8,19 @@ export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: versionData, error: versionError } = useWidgetAPI(widget, "version");
// see https://github.com/gethomepage/homepage/issues/2282
const endpoint =
versionData?.major > 1 || (versionData?.major === 1 && versionData?.minor > 84) ? "statistics" : "stats";
const { data: immichData, error: immichError } = useWidgetAPI(widget, endpoint);
const { version = 1 } = widget;
const versionEndpoint = version === 2 ? "version_v2" : "version";
const { data: versionData, error: versionError } = useWidgetAPI(widget, versionEndpoint);
let statsEndpoint = version === 2 ? "statistics_v2" : "stats";
if (version === 1) {
// see https://github.com/gethomepage/homepage/issues/2282
statsEndpoint =
versionData?.major > 1 || (versionData?.major === 1 && versionData?.minor > 84) ? "statistics" : "stats";
}
const { data: immichData, error: immichError } = useWidgetAPI(widget, statsEndpoint);
if (immichError || versionError || immichData?.statusCode === 401) {
return <Container service={service} error={immichData ?? immichError ?? versionError} />;

View File

@@ -1,18 +1,24 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/server-info/{endpoint}",
api: "{url}/api/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
version: {
endpoint: "version",
endpoint: "server-info/version",
},
statistics: {
endpoint: "statistics",
endpoint: "server-info/statistics",
},
stats: {
endpoint: "stats",
endpoint: "server-info/stats",
},
version_v2: {
endpoint: "server/version",
},
statistics_v2: {
endpoint: "server/statistics",
},
},
};

View File

@@ -0,0 +1,65 @@
import { useTranslation } from "react-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
let { data: vehicleInfo, error } = useWidgetAPI(widget, "vehicleinfo");
if (error) {
return <Container service={service} error={error} />;
}
if (!vehicleInfo) {
return (
<Container service={service}>
<Block label="lubelogger.vehicles" />
<Block label="lubelogger.serviceRecords" />
<Block label="lubelogger.reminders" />
</Container>
);
}
const { vehicleID } = widget;
if (vehicleID) {
vehicleInfo = vehicleInfo.filter((v) => v.vehicleData.id === vehicleID);
}
const totalReminders = vehicleInfo.reduce(
(acc, val) => acc + val.veryUrgentReminderCount + val.urgentReminderCount + val.notUrgentReminderCount,
0,
);
const totalServiceRecords = vehicleInfo.reduce((acc, val) => acc + val.serviceRecordCount, 0);
if (vehicleID) {
if (vehicleInfo.length === 0) {
error = { message: "Vehicle not found" };
return <Container service={service} error={error} />;
}
const nextReminder = vehicleInfo[0].nextReminder
? t("common.date", { value: vehicleInfo[0].nextReminder.dueDate })
: t("lubelogger.none");
return (
<Container service={service}>
<Block
label="lubelogger.vehicle"
value={`${vehicleInfo[0].vehicleData.year} ${vehicleInfo[0].vehicleData.model}`}
/>
<Block label="lubelogger.serviceRecords" value={totalServiceRecords} />
<Block label="lubelogger.reminders" value={totalReminders} />
<Block label="lubelogger.nextReminder" value={nextReminder} />
</Container>
);
}
return (
<Container service={service}>
<Block label="lubelogger.vehicles" value={vehicleInfo.length} />
<Block label="lubelogger.serviceRecords" value={totalServiceRecords} />
<Block label="lubelogger.reminders" value={totalReminders} />
</Container>
);
}

View File

@@ -0,0 +1,14 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
const widget = {
api: "{url}/api/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
vehicleinfo: {
endpoint: "vehicle/info",
},
},
};
export default widget;

View File

@@ -0,0 +1,40 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: resultData, error: resultError } = useWidgetAPI(widget, "domains");
if (resultError || (resultData && Object.keys(resultData).length === 0)) {
return <Container service={service} error={resultError ?? { message: "No domains found" }} />;
}
if (!resultData) {
return (
<Container service={service}>
<Block label="mailcow.mailboxes" />
<Block label="mailcow.aliases" />
<Block label="mailcow.quarantined" />
</Container>
);
}
const domains = resultData.length;
const mailboxes = resultData.reduce((acc, val) => acc + parseInt(val.mboxes_in_domain, 10), 0);
const mails = resultData.reduce((acc, val) => acc + parseInt(val.msgs_total, 10), 0);
const storage = resultData.reduce((acc, val) => acc + parseInt(val.bytes_total, 10), 0);
return (
<Container service={service}>
<Block label="mailcow.domains" value={t("common.number", { value: domains })} />
<Block label="mailcow.mailboxes" value={t("common.number", { value: mailboxes })} />
<Block label="mailcow.mails" value={t("common.number", { value: mails })} />
<Block label="mailcow.storage" value={t("common.bytes", { value: storage })} />
</Container>
);
}

View File

@@ -0,0 +1,14 @@
import credentialedProxyHandler from "../../utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v1/get/{endpoint}",
proxyHandler: credentialedProxyHandler,
mappings: {
domains: {
endpoint: "domain/all",
},
},
};
export default widget;

View File

@@ -10,7 +10,7 @@ const widget = {
validate: ["cpu-load", "free-memory", "total-memory", "uptime"],
},
leases: {
endpoint: "ip/dhcp-server/lease",
endpoint: "ip/dhcp-server/lease?.proplist=address",
},
},
};

View File

@@ -1,8 +1,8 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/php/server/devices.php?action=getDevicesTotals",
proxyHandler: genericProxyHandler,
proxyHandler: credentialedProxyHandler,
mappings: {
data: {

View File

@@ -32,6 +32,11 @@ export default async function photoprismProxyHandler(req, res) {
username: widget.username,
password: widget.password,
});
} else if (widget.key) {
params.headers.Authorization = `Bearer ${widget.key}`;
params.body = JSON.stringify({
authToken: widget.key,
});
}
const [status, contentType, data] = await httpProxy(url, params);

View File

@@ -57,23 +57,27 @@ export default async function piholeProxyHandler(req, res) {
}
// pihole v6
if (!cache.get(`${sessionSIDCacheKey}.${service}`)) {
if (!cache.get(`${sessionSIDCacheKey}.${service}`) && widget.key) {
await login(widget, service);
}
const sid = cache.get(`${sessionSIDCacheKey}.${service}`);
if (!sid) {
if (widget.key && !sid) {
return res.status(500).json({ error: "Failed to authenticate with Pi-hole" });
}
try {
logger.debug("Calling Pi-hole API endpoint: %s", endpoint);
const headers = {
"Content-Type": "application/json",
};
if (sid) {
headers["X-FTL-SID"] = sid;
} else {
logger.debug("Pi-hole request is unauthenticated");
}
[status, , data] = await httpProxy(formatApiCall(widgets[widget.type].api, { ...widget, endpoint }), {
headers: {
"Content-Type": "application/json",
"X-FTL-SID": sid,
},
headers,
});
if (status !== 200) {

View File

@@ -29,7 +29,7 @@ export default function Component({ service }) {
);
}
const datastoreUsage = (datastoreData.data[0].used / datastoreData.data[0].total) * 100;
const datastoreUsage = datastoreData.data ? (datastoreData.data[0].used / datastoreData.data[0].total) * 100 : 0;
const cpuUsage = hostData.data.cpu * 100;
const memoryUsage = (hostData.data.memory.used / hostData.data.memory.total) * 100;
const failedTasks = tasksData.total >= 100 ? "99+" : tasksData.total;

View File

@@ -53,7 +53,7 @@ export default function Component({ service }) {
function toPercent(value, total) {
return t("common.percent", {
value: !Number.isNaN(value / total) ? value / total : 0,
value: !Number.isNaN(value / total) ? 100 * (value / total) : 0,
maximumFractionDigits: 2,
});
}
@@ -64,55 +64,64 @@ export default function Component({ service }) {
<Block
label="technitium.totalNoError"
value={`${t("common.number", { value: statsData.totalNoError })} (${toPercent(
statsData.totalNoError / statsData.totalQueries,
statsData.totalNoError,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalServerFailure"
value={`${t("common.number", { value: statsData.totalServerFailure })} (${toPercent(
statsData.totalServerFailure / statsData.totalQueries,
statsData.totalServerFailure,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalNxDomain"
value={`${t("common.number", { value: statsData.totalNxDomain })} (${toPercent(
statsData.totalNxDomain / statsData.totalQueries,
statsData.totalNxDomain,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalRefused"
value={`${t("common.number", { value: statsData.totalRefused })} (${toPercent(
statsData.totalRefused / statsData.totalQueries,
statsData.totalRefused,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalAuthoritative"
value={`${t("common.number", { value: statsData.totalAuthoritative })} (${toPercent(
statsData.totalAuthoritative / statsData.totalQueries,
statsData.totalAuthoritative,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalRecursive"
value={`${t("common.number", { value: statsData.totalRecursive })} (${toPercent(
statsData.totalRecursive / statsData.totalQueries,
statsData.totalRecursive,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalCached"
value={`${t("common.number", { value: statsData.totalCached })} (${toPercent(
statsData.totalCached / statsData.totalQueries,
statsData.totalCached,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalBlocked"
value={`${t("common.number", { value: statsData.totalBlocked })} (${toPercent(
statsData.totalBlocked / statsData.totalQueries,
statsData.totalBlocked,
statsData.totalQueries,
)})`}
/>
<Block
label="technitium.totalDropped"
value={`${t("common.number", { value: statsData.totalDropped })} (${toPercent(
statsData.totalDropped / statsData.totalQueries,
statsData.totalDropped,
statsData.totalQueries,
)})`}
/>
<Block label="technitium.totalClients" value={`${t("common.number", { value: statsData.totalClients })}`} />

View File

@@ -9,7 +9,7 @@ const widget = {
endpoint: "dashboard/stats/get",
validate: ["response", "status"],
params: ["type"],
map: (data) => asJson(data).response.stats,
map: (data) => asJson(data).response?.stats,
},
},
};

View File

@@ -0,0 +1,68 @@
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
const { widget } = service;
const { data: projectsData, error: projectsError } = useWidgetAPI(widget, "projects");
const { data: tasksData, error: tasksError } = useWidgetAPI(widget, "tasks");
if (projectsError || tasksError) {
return <Container service={service} error={projectsError ?? tasksError} />;
}
if (!projectsData || !tasksData) {
return (
<Container service={service}>
<Block label="vikunja.projects" />
<Block label="vikunja.tasks7d" />
<Block label="vikunja.tasksOverdue" />
<Block label="vikunja.tasksInProgress" />
</Container>
);
}
const projects = projectsData.filter((project) => project.id > 0); // saved filters have id < 0
const oneWeekFromNow = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000);
const tasksWithDueDate = tasksData.filter((task) => !task.dueDateIsDefault);
const tasks7d = tasksWithDueDate.filter((task) => new Date(task.dueDate) <= oneWeekFromNow);
const tasksOverdue = tasksWithDueDate.filter((task) => new Date(task.dueDate) <= new Date(Date.now()));
const tasksInProgress = tasksData.filter((task) => task.inProgress);
return (
<>
<Container service={service}>
<Block label="vikunja.projects" value={t("common.number", { value: projects.length })} />
<Block label="vikunja.tasks7d" value={t("common.number", { value: tasks7d.length })} />
<Block label="vikunja.tasksOverdue" value={t("common.number", { value: tasksOverdue.length })} />
<Block label="vikunja.tasksInProgress" value={t("common.number", { value: tasksInProgress.length })} />
</Container>
{widget.enableTaskList &&
tasksData.slice(0, 5).map((task) => (
<div
key={task.id}
className="text-theme-700 dark:text-theme-200 relative h-5 rounded-md bg-theme-200/50 dark:bg-theme-900/20 m-1 px-1 flex"
>
<div className="text-xs z-10 self-center ml-2 relative h-4 grow mr-2">
<div className="absolute w-full h-4 whitespace-nowrap text-ellipsis overflow-hidden text-left">
{task.title}
</div>
</div>
{!task.dueDateIsDefault && (
<div className="self-center text-xs flex justify-end mr-1.5 pl-1 z-10 text-ellipsis overflow-hidden whitespace-nowrap">
{t("common.relativeDate", {
value: task.dueDate,
formatParams: { value: { style: "narrow", numeric: "auto" } },
})}
</div>
)}
</div>
))}
</>
);
}

View File

@@ -0,0 +1,27 @@
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: `{url}/api/v1/{endpoint}`,
proxyHandler: credentialedProxyHandler,
mappings: {
projects: {
endpoint: "projects",
},
tasks: {
endpoint: "tasks/all?filter=done%3Dfalse&sort_by=due_date",
map: (data) =>
asJson(data).map((task) => ({
id: task.id,
title: task.title,
priority: task.priority,
dueDate: task.due_date,
dueDateIsDefault: task.due_date === "0001-01-01T00:00:00Z",
inProgress: task.percent_done > 0 && task.percent_done < 1,
})),
},
},
};
export default widget;

Some files were not shown because too many files have changed in this diff Show More