mirror of
https://github.com/gethomepage/homepage.git
synced 2026-03-31 07:12:17 -07:00
Compare commits
96 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af75f33e62 | ||
|
|
c32f1f1d59 | ||
|
|
11c6f587ab | ||
|
|
a44e6a8f4b | ||
|
|
9b06761964 | ||
|
|
01e30f2ecb | ||
|
|
d82fbc3026 | ||
|
|
535be37bef | ||
|
|
9326155ab8 | ||
|
|
d87d347aa3 | ||
|
|
99b50b4faf | ||
|
|
1a22065c3a | ||
|
|
e938c3ac1e | ||
|
|
11c3127aad | ||
|
|
94a934ec65 | ||
|
|
ac997ea841 | ||
|
|
60eee26ac4 | ||
|
|
c584d5d020 | ||
|
|
3d462e5958 | ||
|
|
bd1c11a716 | ||
|
|
bbb1ef5a55 | ||
|
|
cb2c7b9147 | ||
|
|
d65cb638be | ||
|
|
9367fd761b | ||
|
|
29993dad3a | ||
|
|
794ec127cd | ||
|
|
a15b5bd692 | ||
|
|
f7810cb67a | ||
|
|
912ae0adfc | ||
|
|
7c3dcf20ef | ||
|
|
c12a5c01f6 | ||
|
|
6fd2b6b6dc | ||
|
|
bf0a766302 | ||
|
|
be4da9d010 | ||
|
|
b7ca6244dd | ||
|
|
e6cf86ed4a | ||
|
|
3736c1fcab | ||
|
|
3af86ffebb | ||
|
|
0aea6a6c3f | ||
|
|
261c907f52 | ||
|
|
2a6debbc79 | ||
|
|
e9a31bafab | ||
|
|
bf2efce74d | ||
|
|
7cbba1ff90 | ||
|
|
02e1104452 | ||
|
|
c347677402 | ||
|
|
fd75f22e16 | ||
|
|
aac573a48d | ||
|
|
2245cdda55 | ||
|
|
cf9109384e | ||
|
|
db1fb4b899 | ||
|
|
20048ff567 | ||
|
|
e6c7692677 | ||
|
|
19bdc0ec34 | ||
|
|
cd8c224ffa | ||
|
|
b1ca6b8e1a | ||
|
|
3fd8247a40 | ||
|
|
798ca3dea9 | ||
|
|
5c5b6f17d9 | ||
|
|
8e6c7ec152 | ||
|
|
2cc38b9a4f | ||
|
|
50aa416612 | ||
|
|
96bd6eedc2 | ||
|
|
d12b0d5a53 | ||
|
|
e2d6794d12 | ||
|
|
50ccb0b14d | ||
|
|
132d8f4f6b | ||
|
|
c085cf1e72 | ||
|
|
ebb1a50e3f | ||
|
|
8f82976fe5 | ||
|
|
6da46dd3b1 | ||
|
|
5fc3bdee08 | ||
|
|
bcc867323f | ||
|
|
a46a234b76 | ||
|
|
f0df2122de | ||
|
|
ce695850bd | ||
|
|
8c12afced5 | ||
|
|
8c1e50d9e7 | ||
|
|
20f5134606 | ||
|
|
facc98018b | ||
|
|
581828d49a | ||
|
|
587027df37 | ||
|
|
85736c55c9 | ||
|
|
1f47ee8f11 | ||
|
|
1eb6ac6d90 | ||
|
|
295c6ea796 | ||
|
|
68c2b04090 | ||
|
|
1494458ba6 | ||
|
|
f7086c8aa3 | ||
|
|
59ccc90b2f | ||
|
|
1e9e911877 | ||
|
|
dc67024be2 | ||
|
|
b3591c3e69 | ||
|
|
9243187490 | ||
|
|
6b1080ad43 | ||
|
|
52a4f1a423 |
6
.github/DISCUSSION_TEMPLATE/support.yml
vendored
6
.github/DISCUSSION_TEMPLATE/support.yml
vendored
@@ -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
|
||||
|
||||
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -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.
|
||||
|
||||
6
.github/workflows/crowdin.yml
vendored
6
.github/workflows/crowdin.yml
vendored
@@ -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 }}
|
||||
|
||||
3
.github/workflows/docker-publish.yml
vendored
3
.github/workflows/docker-publish.yml
vendored
@@ -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'
|
||||
|
||||
26
.github/workflows/docs-publish.yml
vendored
26
.github/workflows/docs-publish.yml
vendored
@@ -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 }}
|
||||
|
||||
20
.github/workflows/reaction-comments.yml
vendored
Normal file
20
.github/workflows/reaction-comments.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: 'Reaction Comments'
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created, edited]
|
||||
pull_request_review_comment:
|
||||
types: [created, edited]
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
permissions:
|
||||
actions: write
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
action:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/reaction-comments@v4
|
||||
@@ -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
|
||||
|
||||
|
||||
12
README.md
12
README.md
@@ -20,7 +20,7 @@
|
||||
|
||||
<a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a>
|
||||
|
||||
<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>
|
||||
|
||||
<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
1
docs/CNAME
Normal file
@@ -0,0 +1 @@
|
||||
gethomepage.dev
|
||||
@@ -8,6 +8,7 @@ The Kubernetes connectivity has the following requirements:
|
||||
- Kubernetes 1.19+
|
||||
- Metrics Service
|
||||
- An Ingress controller
|
||||
- Optionally: Gateway-API
|
||||
|
||||
The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from:
|
||||
|
||||
@@ -19,6 +20,12 @@ The Kubernetes connection is configured in the `kubernetes.yaml` file. There are
|
||||
mode: default
|
||||
```
|
||||
|
||||
To enable Kubernetes gateway-api compatibility, add the following setting:
|
||||
|
||||
```yaml
|
||||
route: gateway
|
||||
```
|
||||
|
||||
## Services
|
||||
|
||||
Once the Kubernetes connection is configured, individual services can be configured to pull statistics. Only CPU and Memory are currently supported.
|
||||
@@ -140,6 +147,10 @@ spec:
|
||||
|
||||
If the `href` attribute is not present, Homepage will ignore the specific IngressRoute.
|
||||
|
||||
### Gateway API HttpRoute support
|
||||
|
||||
Homepage also features automatic service discovery for gateway-api. Service definitions are read by annotating the HttpRoute custom resource definition and are indentical to the Ingress example as defined in [Automatic Service Discovery](#automatic-service-discovery).
|
||||
|
||||
## Caveats
|
||||
|
||||
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.
|
||||
|
||||
@@ -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">
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -215,6 +215,15 @@ rules:
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
# if using gateway api add the following:
|
||||
# - apiGroups:
|
||||
# - gateway.networking.k8s.io
|
||||
# resources:
|
||||
# - httproutes
|
||||
# - gateways
|
||||
# verbs:
|
||||
# - get
|
||||
# - list
|
||||
- apiGroups:
|
||||
- metrics.k8s.io
|
||||
resources:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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%;
|
||||
}
|
||||
|
||||
@@ -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.:
|
||||
|
||||
|
||||
@@ -48,15 +48,14 @@ self-hosted / open-source alternative, we ask that any widgets, etc. are develop
|
||||
|
||||
## New Feature Guidelines
|
||||
|
||||
- New features should be linked to an existing feature request with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
|
||||
- If you have ideas for a larger feature, please open a discussion first.
|
||||
- Please note that though it is a requirement, a discussion with 10 'up-votes' in no way guarantees that a PR will be merged.
|
||||
- New features should usually be linked to an existing feature request. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
|
||||
- If you have ideas for a larger feature you may want to open a discussion first.
|
||||
|
||||
## Service Widget Guidelines
|
||||
|
||||
To ensure cohesiveness of various widgets, the following should be used as a guide for developing new widgets:
|
||||
|
||||
- Please only submit widgets that have been requested and have at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of service widgets that might only benefit a small number of users.
|
||||
- Please only submit widgets that target a feature request discussion with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of service widgets that might only benefit a small number of users.
|
||||
- Note that we reserve the right to decline widgets for projects that are very young (eg < ~1y) or those with a small reach (eg low GitHub stars). Again, this is in an effort to keep overall widget maintenance under control.
|
||||
- Widgets should be only one row of blocks
|
||||
- Widgets should be no more than 4 blocks wide and generally conform to the styling / design choices of other widgets
|
||||
|
||||
@@ -71,7 +71,7 @@ Homepage provides a set of common translations that you can use in your widgets.
|
||||
| `common.ms` | `1,000 ms` | Format a number in milliseconds. |
|
||||
| `common.date` | `2024-01-01` | Format a date. |
|
||||
| `common.relativeDate` | `1 day ago` | Format a relative date. |
|
||||
| `common.uptime` | `1 day, 1 hour` | Format an uptime. |
|
||||
| `common.duration` | `1 day, 1 hour` | Format an duration. |
|
||||
|
||||
### Text
|
||||
|
||||
|
||||
22
docs/widgets/services/beszel.md
Normal file
22
docs/widgets/services/beszel.md
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Beszel
|
||||
description: Beszel Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Beszel](https://github.com/henrygd/beszel)
|
||||
|
||||
The widget has two modes, a single system with detailed info if `systemId` is provided, or an overview of all systems if `systemId` is not provided.
|
||||
|
||||
The `systemID` in the `id` field on the collections page of Beszel.
|
||||
|
||||
Allowed fields for 'overview' mode: `["systems", "up"]`
|
||||
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: beszel
|
||||
url: http://beszel.host.or.ip
|
||||
username: username # email
|
||||
password: password
|
||||
systemId: systemId # optional
|
||||
```
|
||||
@@ -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
|
||||
|
||||
@@ -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`
|
||||
```
|
||||
|
||||
19
docs/widgets/services/headscale.md
Normal file
19
docs/widgets/services/headscale.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: Headscale
|
||||
description: Headscale Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Headscale](https://headscale.net/).
|
||||
|
||||
You will need to generate an API access token from the [command line](https://headscale.net/ref/remote-cli/#create-an-api-key) using `headscale apikeys create` command.
|
||||
|
||||
To find your node ID, you can use `headscale nodes list` command.
|
||||
|
||||
Allowed fields: `["name", "address", "last_seen", "status"]`.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: headscale
|
||||
nodeId: nodeid
|
||||
key: headscaleapiaccesstoken
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -14,6 +14,7 @@ You can also find a list of all available service widgets in the sidebar navigat
|
||||
- [Autobrr](autobrr.md)
|
||||
- [Azure DevOps](azuredevops.md)
|
||||
- [Bazarr](bazarr.md)
|
||||
- [Beszel](beszel.md)
|
||||
- [Caddy](caddy.md)
|
||||
- [Calendar](calendar.md)
|
||||
- [Calibre-Web](calibre-web.md)
|
||||
@@ -44,6 +45,7 @@ You can also find a list of all available service widgets in the sidebar navigat
|
||||
- [Gotify](gotify.md)
|
||||
- [Grafana](grafana.md)
|
||||
- [HDHomeRun](hdhomerun.md)
|
||||
- [Headscale](headscale.md)
|
||||
- [Healthchecks](healthchecks.md)
|
||||
- [Home Assistant](homeassistant.md)
|
||||
- [HomeBox](homebox.md)
|
||||
@@ -59,7 +61,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)
|
||||
@@ -94,6 +98,7 @@ You can also find a list of all available service widgets in the sidebar navigat
|
||||
- [Plex](plex.md)
|
||||
- [Portainer](portainer.md)
|
||||
- [Prometheus](prometheus.md)
|
||||
- [Prometheus Metric](prometheusmetric.md)
|
||||
- [Prowlarr](prowlarr.md)
|
||||
- [Proxmox](proxmox.md)
|
||||
- [Proxmox Backup Server](proxmoxbackupserver.md)
|
||||
@@ -126,6 +131,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)
|
||||
|
||||
20
docs/widgets/services/lubelogger.md
Normal file
20
docs/widgets/services/lubelogger.md
Normal 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
|
||||
```
|
||||
15
docs/widgets/services/mailcow.md
Normal file
15
docs/widgets/services/mailcow.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
@@ -16,7 +14,5 @@ widget:
|
||||
type: pihole
|
||||
url: http://pi.hole.or.ip
|
||||
version: 6 # required if running v6 or higher, defaults to 5
|
||||
key: yourpiholeapikey # optional
|
||||
key: yourpiholeapikey # optional, in v6 can be your password or app password
|
||||
```
|
||||
|
||||
_Added in v0.1.0, updated in v0.8.9_
|
||||
|
||||
67
docs/widgets/services/prometheusmetric.md
Normal file
67
docs/widgets/services/prometheusmetric.md
Normal file
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: Prometheus Metric
|
||||
description: Prometheus Metric Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Querying Prometheus](https://prometheus.io/docs/prometheus/latest/querying/basics/).
|
||||
|
||||
This widget can show metrics for your service defined by PromQL queries which are requested from a running Prometheus instance.
|
||||
|
||||
Quries can be defined in the `metrics` array of the widget along with a label to be used to present the metric value. You can optionally specify a global `refreshInterval` in milliseconds and/or define the `refreshInterval` per metric. Inside the optional `format` object of a metric various formatting styles and transformations can be applied (see below).
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: prometheusmetric
|
||||
url: https://prometheus.host.or.ip
|
||||
refreshInterval: 10000 # optional - in milliseconds, defaults to 10s
|
||||
metrics:
|
||||
- label: Metric 1
|
||||
query: alertmanager_alerts{state="active"}
|
||||
- label: Metric 2
|
||||
query: apiserver_storage_size_bytes{node="mynode"}
|
||||
format:
|
||||
type: bytes
|
||||
- label: Metric 3
|
||||
query: avg(prometheus_notifications_latency_seconds)
|
||||
format:
|
||||
type: number
|
||||
suffix: s
|
||||
options:
|
||||
maximumFractionDigits: 4
|
||||
- label: Metric 4
|
||||
query: time()
|
||||
refreshInterval: 1000 # will override global refreshInterval
|
||||
format:
|
||||
type: date
|
||||
scale: 1000
|
||||
options:
|
||||
timeStyle: medium
|
||||
```
|
||||
|
||||
## Formatting
|
||||
|
||||
Supported values for `format.type` are `text`, `number`, `percent`, `bytes`, `bits`, `bbytes`, `bbits`, `byterate`, `bibyterate`, `bitrate`, `bibitrate`, `date`, `duration`, `relativeDate`, and `text` which is the default.
|
||||
|
||||
The `dateStyle` and `timeStyle` options of the `date` format are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) and the `style` and `numeric` options of `relativeDate` are passed to [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat). For the `number` format, options of [Intl.NumberFormat](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat) can be used, e.g. `maximumFractionDigits` or `minimumFractionDigits`.
|
||||
|
||||
### Data Transformation
|
||||
|
||||
You can manipulate your metric value with the following tools: `scale`, `prefix` and `suffix`, for example:
|
||||
|
||||
```yaml
|
||||
- query: my_custom_metric{}
|
||||
label: Metric 1
|
||||
format:
|
||||
type: number
|
||||
scale: 1000 # multiplies value by a number or fraction string e.g. 1/16
|
||||
- query: my_custom_metric{}
|
||||
label: Metric 2
|
||||
format:
|
||||
type: number
|
||||
prefix: "$" # prefixes value with given string
|
||||
- query: my_custom_metric{}
|
||||
label: Metric 3
|
||||
format:
|
||||
type: number
|
||||
suffix: "€" # suffixes value with given string
|
||||
```
|
||||
20
docs/widgets/services/suwayomi.md
Normal file
20
docs/widgets/services/suwayomi.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: Suwayomi
|
||||
description: Suwayomi Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [Suwayomi](https://github.com/Suwayomi/Suwayomi-Server).
|
||||
|
||||
Allowed fields: ["download", "nondownload", "read", "unread", "downloadedread", "downloadedunread", "nondownloadedread", "nondownloadedunread"]
|
||||
|
||||
The widget defaults to the first four above. If more than four fields are provided, only the first 4 are displayed.
|
||||
Category IDs can be obtained from the url when navigating to it, `?tab={categoryID}`.
|
||||
|
||||
```yaml
|
||||
widget:
|
||||
type: suwayomi
|
||||
url: http://suwayomi.host.or.ip
|
||||
username: username #optional
|
||||
password: password #optional
|
||||
category: 0 #optional, defaults to all categories
|
||||
```
|
||||
@@ -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.
|
||||
|
||||
|
||||
18
docs/widgets/services/vikunja.md
Normal file
18
docs/widgets/services/vikunja.md
Normal 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
|
||||
```
|
||||
@@ -23,6 +23,12 @@ Set the `mode` in the `kubernetes.yaml` to `cluster`.
|
||||
mode: default
|
||||
```
|
||||
|
||||
To enable Kubernetes gateway-api compatibility, set `route` to `gateway`.
|
||||
|
||||
```yaml
|
||||
route: gateway
|
||||
```
|
||||
|
||||
## Widgets
|
||||
|
||||
The Kubernetes widget can show a high-level overview of the cluster,
|
||||
|
||||
@@ -37,6 +37,7 @@ nav:
|
||||
- widgets/services/autobrr.md
|
||||
- widgets/services/azuredevops.md
|
||||
- widgets/services/bazarr.md
|
||||
- widgets/services/beszel.md
|
||||
- widgets/services/caddy.md
|
||||
- widgets/services/calendar.md
|
||||
- widgets/services/calibre-web.md
|
||||
@@ -47,6 +48,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
|
||||
@@ -66,6 +68,7 @@ nav:
|
||||
- widgets/services/gotify.md
|
||||
- widgets/services/grafana.md
|
||||
- widgets/services/hdhomerun.md
|
||||
- widgets/services/headscale.md
|
||||
- widgets/services/healthchecks.md
|
||||
- widgets/services/homeassistant.md
|
||||
- widgets/services/homebox.md
|
||||
@@ -81,7 +84,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
|
||||
@@ -116,6 +121,7 @@ nav:
|
||||
- widgets/services/plex.md
|
||||
- widgets/services/portainer.md
|
||||
- widgets/services/prometheus.md
|
||||
- widgets/services/prometheusmetric.md
|
||||
- widgets/services/prowlarr.md
|
||||
- widgets/services/proxmox.md
|
||||
- widgets/services/proxmoxbackupserver.md
|
||||
@@ -148,6 +154,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 +238,6 @@ extra_css:
|
||||
- "stylesheets/extra.css"
|
||||
|
||||
extra:
|
||||
version:
|
||||
provider: mike
|
||||
social:
|
||||
- icon: fontawesome/brands/discord
|
||||
link: https://discord.gg/k4ruYNrudu
|
||||
|
||||
@@ -84,12 +84,12 @@ function prettyBytes(number, options) {
|
||||
return `${prefix + numberString} ${unit}`;
|
||||
}
|
||||
|
||||
function uptime(uptimeInSeconds, i18next) {
|
||||
const mo = Math.floor(uptimeInSeconds / (3600 * 24 * 31));
|
||||
const d = Math.floor((uptimeInSeconds % (3600 * 24 * 31)) / (3600 * 24));
|
||||
const h = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600);
|
||||
const m = Math.floor((uptimeInSeconds % 3600) / 60);
|
||||
const s = Math.floor(uptimeInSeconds % 60);
|
||||
function duration(durationInSeconds, i18next) {
|
||||
const mo = Math.floor(durationInSeconds / (3600 * 24 * 31));
|
||||
const d = Math.floor((durationInSeconds % (3600 * 24 * 31)) / (3600 * 24));
|
||||
const h = Math.floor((durationInSeconds % (3600 * 24)) / 3600);
|
||||
const m = Math.floor((durationInSeconds % 3600) / 60);
|
||||
const s = Math.floor(durationInSeconds % 60);
|
||||
|
||||
const moDisplay = mo > 0 ? mo + i18next.t("common.months") : "";
|
||||
const dDisplay = d > 0 ? d + i18next.t("common.days") : "";
|
||||
@@ -156,7 +156,7 @@ module.exports = {
|
||||
i18next.services.formatter.add("relativeDate", (value, lng, options) =>
|
||||
relativeDate(new Date(value), new Intl.RelativeTimeFormat(lng, { ...options })),
|
||||
);
|
||||
i18next.services.formatter.add("uptime", (value, lng) => uptime(value, i18next));
|
||||
i18next.services.formatter.add("duration", (value, lng) => duration(value, i18next));
|
||||
},
|
||||
type: "3rdParty",
|
||||
},
|
||||
|
||||
118
package-lock.json
generated
118
package-lock.json
generated
@@ -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",
|
||||
@@ -36,27 +36,27 @@
|
||||
"swr": "^1.3.0",
|
||||
"systeminformation": "^5.23.2",
|
||||
"tough-cookie": "^4.1.3",
|
||||
"urbackup-server-api": "^0.52.0",
|
||||
"urbackup-server-api": "^0.52.1",
|
||||
"winston": "^3.11.0",
|
||||
"xml-js": "^1.6.11"
|
||||
},
|
||||
"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-import": "^2.31.0",
|
||||
"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.14",
|
||||
"typescript": "^5.6.3"
|
||||
},
|
||||
"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",
|
||||
@@ -3139,11 +3135,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-module-utils": {
|
||||
"version": "2.9.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.9.0.tgz",
|
||||
"integrity": "sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==",
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
|
||||
"integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"debug": "^3.2.7"
|
||||
},
|
||||
@@ -3167,11 +3162,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import": {
|
||||
"version": "2.30.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz",
|
||||
"integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==",
|
||||
"version": "2.31.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
|
||||
"integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@rtsao/scc": "^1.1.0",
|
||||
"array-includes": "^3.1.8",
|
||||
@@ -3181,7 +3175,7 @@
|
||||
"debug": "^3.2.7",
|
||||
"doctrine": "^2.1.0",
|
||||
"eslint-import-resolver-node": "^0.3.9",
|
||||
"eslint-module-utils": "^2.9.0",
|
||||
"eslint-module-utils": "^2.12.0",
|
||||
"hasown": "^2.0.2",
|
||||
"is-core-module": "^2.15.1",
|
||||
"is-glob": "^4.0.3",
|
||||
@@ -3190,13 +3184,14 @@
|
||||
"object.groupby": "^1.0.3",
|
||||
"object.values": "^1.2.0",
|
||||
"semver": "^6.3.1",
|
||||
"string.prototype.trimend": "^1.0.8",
|
||||
"tsconfig-paths": "^3.15.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
|
||||
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-import/node_modules/debug": {
|
||||
@@ -3285,11 +3280,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 +3653,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 +6186,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 +6204,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 +7181,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 +7712,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.14",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
|
||||
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
"arg": "^5.0.2",
|
||||
@@ -8111,11 +8101,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.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
|
||||
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@@ -8196,10 +8185,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/urbackup-server-api": {
|
||||
"version": "0.52.0",
|
||||
"resolved": "https://registry.npmjs.org/urbackup-server-api/-/urbackup-server-api-0.52.0.tgz",
|
||||
"integrity": "sha512-KfroCFZEWCuCkWye1F1JwI2fkO1za/Mf1a8TNGTujzxU0ZGzDqhA1zCOcvV97q7nH1TKFNpw5tMZ06fSCKv2UA==",
|
||||
"license": "MIT",
|
||||
"version": "0.52.1",
|
||||
"resolved": "https://registry.npmjs.org/urbackup-server-api/-/urbackup-server-api-0.52.1.tgz",
|
||||
"integrity": "sha512-gAxF9MdXxnceqUr/1Uj2LuGZQb/bvZ3Ply9zH/UTSWGkwKL5C0qMPrBvKRyTHbPMG/NBuHF6BzavkF7GNvOLew==",
|
||||
"dependencies": {
|
||||
"async-mutex": "^0.5.0",
|
||||
"node-fetch": "^2.7.0"
|
||||
|
||||
16
package.json
16
package.json
@@ -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",
|
||||
@@ -38,27 +38,27 @@
|
||||
"swr": "^1.3.0",
|
||||
"systeminformation": "^5.23.2",
|
||||
"tough-cookie": "^4.1.3",
|
||||
"urbackup-server-api": "^0.52.0",
|
||||
"urbackup-server-api": "^0.52.1",
|
||||
"winston": "^3.11.0",
|
||||
"xml-js": "^1.6.11"
|
||||
},
|
||||
"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-import": "^2.31.0",
|
||||
"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.14",
|
||||
"typescript": "^5.6.3"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"osx-temperature-sensor": "^1.0.8"
|
||||
|
||||
336
pnpm-lock.yaml
generated
336
pnpm-lock.yaml
generated
@@ -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
|
||||
@@ -93,8 +93,8 @@ importers:
|
||||
specifier: ^4.1.3
|
||||
version: 4.1.4
|
||||
urbackup-server-api:
|
||||
specifier: ^0.52.0
|
||||
version: 0.52.0
|
||||
specifier: ^0.52.1
|
||||
version: 0.52.1
|
||||
winston:
|
||||
specifier: ^3.11.0
|
||||
version: 3.14.2
|
||||
@@ -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.14)
|
||||
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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3)
|
||||
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)
|
||||
specifier: ^2.31.0
|
||||
version: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.14)
|
||||
tailwindcss:
|
||||
specifier: ^3.4.3
|
||||
version: 3.4.10
|
||||
specifier: ^3.4.14
|
||||
version: 3.4.14
|
||||
typescript:
|
||||
specifier: ^5.4.5
|
||||
version: 5.5.4
|
||||
specifier: ^5.6.3
|
||||
version: 5.6.3
|
||||
|
||||
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
|
||||
|
||||
@@ -1077,6 +1077,27 @@ packages:
|
||||
eslint-plugin-import-x:
|
||||
optional: true
|
||||
|
||||
eslint-module-utils@2.12.0:
|
||||
resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': '*'
|
||||
eslint: '*'
|
||||
eslint-import-resolver-node: '*'
|
||||
eslint-import-resolver-typescript: '*'
|
||||
eslint-import-resolver-webpack: '*'
|
||||
peerDependenciesMeta:
|
||||
'@typescript-eslint/parser':
|
||||
optional: true
|
||||
eslint:
|
||||
optional: true
|
||||
eslint-import-resolver-node:
|
||||
optional: true
|
||||
eslint-import-resolver-typescript:
|
||||
optional: true
|
||||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
|
||||
eslint-module-utils@2.9.0:
|
||||
resolution: {integrity: sha512-McVbYmwA3NEKwRQY5g4aWMdcZE5xZxV8i8l7CqJSrameuGSQJtSWaL/LxTEzSKKaCcOhlpDR8XEfYXWPrdo/ZQ==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -1098,12 +1119,12 @@ packages:
|
||||
eslint-import-resolver-webpack:
|
||||
optional: true
|
||||
|
||||
eslint-plugin-import@2.30.0:
|
||||
resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==}
|
||||
eslint-plugin-import@2.31.0:
|
||||
resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
|
||||
engines: {node: '>=4'}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': '*'
|
||||
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
|
||||
eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
|
||||
peerDependenciesMeta:
|
||||
'@typescript-eslint/parser':
|
||||
optional: true
|
||||
@@ -1134,8 +1155,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,9 +1169,10 @@ 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}
|
||||
deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
|
||||
hasBin: true
|
||||
|
||||
espree@9.6.1:
|
||||
@@ -1239,8 +1261,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 +2117,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 +2393,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 +2532,8 @@ packages:
|
||||
peerDependencies:
|
||||
tailwindcss: 3.x
|
||||
|
||||
tailwindcss@3.4.10:
|
||||
resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==}
|
||||
tailwindcss@3.4.14:
|
||||
resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
|
||||
@@ -2620,8 +2646,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.3:
|
||||
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
@@ -2645,8 +2671,8 @@ packages:
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
|
||||
urbackup-server-api@0.52.0:
|
||||
resolution: {integrity: sha512-KfroCFZEWCuCkWye1F1JwI2fkO1za/Mf1a8TNGTujzxU0ZGzDqhA1zCOcvV97q7nH1TKFNpw5tMZ06fSCKv2UA==}
|
||||
urbackup-server-api@0.52.1:
|
||||
resolution: {integrity: sha512-gAxF9MdXxnceqUr/1Uj2LuGZQb/bvZ3Ply9zH/UTSWGkwKL5C0qMPrBvKRyTHbPMG/NBuHF6BzavkF7GNvOLew==}
|
||||
|
||||
uri-js@4.4.1:
|
||||
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
|
||||
@@ -2784,9 +2810,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 +2831,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 +2840,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 +2978,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.14)':
|
||||
dependencies:
|
||||
mini-svg-data-uri: 1.4.4
|
||||
tailwindcss: 3.4.10
|
||||
tailwindcss: 3.4.14
|
||||
|
||||
'@tanstack/react-virtual@3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
@@ -3011,36 +3037,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.3))(eslint@8.57.1)(typescript@5.6.3)':
|
||||
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.3)
|
||||
'@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.3)
|
||||
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
|
||||
'@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.3)
|
||||
optionalDependencies:
|
||||
typescript: 5.5.4
|
||||
typescript: 5.6.3
|
||||
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.3)':
|
||||
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.3)
|
||||
'@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.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -3049,21 +3075,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.3)':
|
||||
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.3)
|
||||
'@typescript-eslint/utils': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
|
||||
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.3)
|
||||
optionalDependencies:
|
||||
typescript: 5.5.4
|
||||
typescript: 5.6.3
|
||||
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.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 7.2.0
|
||||
'@typescript-eslint/visitor-keys': 7.2.0
|
||||
@@ -3072,21 +3098,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.3)
|
||||
optionalDependencies:
|
||||
typescript: 5.5.4
|
||||
typescript: 5.6.3
|
||||
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.3)':
|
||||
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.3)
|
||||
eslint: 8.57.1
|
||||
semver: 7.6.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
@@ -3220,14 +3246,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 +3781,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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1))(eslint@8.57.1)
|
||||
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3):
|
||||
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.3))(eslint@8.57.1)(typescript@5.6.3)
|
||||
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
|
||||
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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
|
||||
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3
|
||||
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 +3833,48 @@ 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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.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.3))(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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.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.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.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.3)
|
||||
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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.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-module-utils@2.9.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.3)
|
||||
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.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
|
||||
dependencies:
|
||||
'@rtsao/scc': 1.1.0
|
||||
array-includes: 3.1.8
|
||||
@@ -3846,9 +3883,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.12.0(@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.3))(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.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1)
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.15.1
|
||||
is-glob: 4.0.3
|
||||
@@ -3857,15 +3894,16 @@ snapshots:
|
||||
object.groupby: 1.0.3
|
||||
object.values: 1.2.0
|
||||
semver: 6.3.1
|
||||
string.prototype.trimend: 1.0.8
|
||||
tsconfig-paths: 3.15.0
|
||||
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.3)
|
||||
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 +3914,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 +3923,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 +3944,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 +3965,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 +4093,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 +4892,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 +4929,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 +5239,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 +5389,11 @@ snapshots:
|
||||
|
||||
systeminformation@5.23.5: {}
|
||||
|
||||
tailwind-scrollbar@3.1.0(tailwindcss@3.4.10):
|
||||
tailwind-scrollbar@3.1.0(tailwindcss@3.4.14):
|
||||
dependencies:
|
||||
tailwindcss: 3.4.10
|
||||
tailwindcss: 3.4.14
|
||||
|
||||
tailwindcss@3.4.10:
|
||||
tailwindcss@3.4.14:
|
||||
dependencies:
|
||||
'@alloc/quick-lru': 5.2.0
|
||||
arg: 5.0.2
|
||||
@@ -5369,11 +5409,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 +5488,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.3):
|
||||
dependencies:
|
||||
typescript: 5.5.4
|
||||
typescript: 5.6.3
|
||||
|
||||
ts-interface-checker@0.1.13: {}
|
||||
|
||||
@@ -5509,7 +5549,7 @@ snapshots:
|
||||
is-typed-array: 1.1.13
|
||||
possible-typed-array-names: 1.0.0
|
||||
|
||||
typescript@5.5.4: {}
|
||||
typescript@5.6.3: {}
|
||||
|
||||
unbox-primitive@1.0.2:
|
||||
dependencies:
|
||||
@@ -5530,7 +5570,7 @@ snapshots:
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.0
|
||||
|
||||
urbackup-server-api@0.52.0:
|
||||
urbackup-server-api@0.52.1:
|
||||
dependencies:
|
||||
async-mutex: 0.5.0
|
||||
node-fetch: 2.7.0
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"ms": "{{value, number}}",
|
||||
"date": "{{value, date}}",
|
||||
"relativeDate": "{{value, relativeDate}}",
|
||||
"uptime": "{{value, uptime}}",
|
||||
"duration": "{{value, duration}}",
|
||||
"months": "mo",
|
||||
"days": "d",
|
||||
"hours": "h",
|
||||
@@ -309,6 +309,16 @@
|
||||
"stopped": "Stopped",
|
||||
"total": "Total"
|
||||
},
|
||||
"suwayomi": {
|
||||
"download": "Downloaded",
|
||||
"nondownload": "Non-Downloaded",
|
||||
"read": "Read",
|
||||
"unread": "Unread",
|
||||
"downloadedread": "Downloaded & Read",
|
||||
"downloadedunread": "Downloaded & Unread",
|
||||
"nondownloadedread": "Non-Downloaded & Read",
|
||||
"nondownloadedunread": "Non-Downloaded & Unread"
|
||||
},
|
||||
"tailscale": {
|
||||
"address": "Address",
|
||||
"expires": "Expires",
|
||||
@@ -850,6 +860,12 @@
|
||||
"screenshots": "Screenshots",
|
||||
"totalfilesize": "Total Size"
|
||||
},
|
||||
"mailcow": {
|
||||
"domains": "Domains",
|
||||
"mailboxes": "Mailboxes",
|
||||
"mails": "Mails",
|
||||
"storage": "Storage"
|
||||
},
|
||||
"netdata": {
|
||||
"warnings": "Warnings",
|
||||
"criticals": "Criticals"
|
||||
@@ -939,5 +955,38 @@
|
||||
"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"
|
||||
},
|
||||
"headscale": {
|
||||
"name": "Name",
|
||||
"address": "Address",
|
||||
"last_seen": "Last Seen",
|
||||
"status": "Status",
|
||||
"online": "Online",
|
||||
"offline": "Offline"
|
||||
},
|
||||
"beszel": {
|
||||
"name": "Name",
|
||||
"systems": "Systems",
|
||||
"up": "Up",
|
||||
"status": "Status",
|
||||
"updated": "Updated",
|
||||
"cpu": "CPU",
|
||||
"memory": "MEM",
|
||||
"disk": "Disk",
|
||||
"network": "NET"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ export default function BookmarksGroup({ bookmarks, layout, disableCollapse, gro
|
||||
className={classNames(
|
||||
"bookmark-group",
|
||||
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6",
|
||||
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1",
|
||||
layout?.header === false ? "flex-1 px-1 -my-1 overflow-hidden" : "flex-1 p-1 overflow-hidden",
|
||||
)}
|
||||
>
|
||||
<Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}>
|
||||
|
||||
@@ -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}`,
|
||||
@@ -28,9 +29,9 @@ export default function Item({ bookmark }) {
|
||||
)}
|
||||
{!bookmark.icon && bookmark.abbr}
|
||||
</div>
|
||||
<div className="flex-1 flex items-center justify-between rounded-r-md bookmark-text">
|
||||
<div className="flex-1 grow pl-3 py-2 text-xs bookmark-name">{bookmark.name}</div>
|
||||
<div className="px-2 py-2 truncate text-theme-500 dark:text-theme-300 text-xs bookmark-description">
|
||||
<div className="flex-1 overflow-hidden flex items-center justify-between rounded-r-md bookmark-text">
|
||||
<div className="pl-3 py-2 text-xs bookmark-name">{bookmark.name}</div>
|
||||
<div className="shrink truncate px-2 py-2 text-theme-500 dark:text-theme-300 text-xs bookmark-description">
|
||||
{description}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -98,6 +98,12 @@ export default function QuickLaunch({ servicesAndBookmarks, searchString, setSea
|
||||
} else if (event.key === "ArrowUp" && currentItemIndex > 0) {
|
||||
setCurrentItemIndex(currentItemIndex - 1);
|
||||
event.preventDefault();
|
||||
} else if (
|
||||
event.key === "ArrowRight" &&
|
||||
results[currentItemIndex] &&
|
||||
results[currentItemIndex].type === "searchSuggestion"
|
||||
) {
|
||||
setSearchString(results[currentItemIndex].name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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", "");
|
||||
|
||||
@@ -25,7 +25,7 @@ export default function Uptime({ refresh = 1500 }) {
|
||||
return (
|
||||
<Resource
|
||||
icon={FaRegClock}
|
||||
value={t("common.uptime", { value: data.uptime })}
|
||||
value={t("common.duration", { value: data.uptime })}
|
||||
label={t("resources.uptime")}
|
||||
percentage={percent}
|
||||
/>
|
||||
|
||||
@@ -8,7 +8,7 @@ export default function Document() {
|
||||
name="description"
|
||||
content="A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
|
||||
/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<link rel="manifest" href="/site.webmanifest?v=4" crossOrigin="use-credentials" />
|
||||
</Head>
|
||||
<body>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CoreV1Api, Metrics } from "@kubernetes/client-node";
|
||||
|
||||
import getKubeConfig from "../../../../utils/config/kubernetes";
|
||||
import getKubeArguments from "../../../../utils/config/kubernetes";
|
||||
import { parseCpu, parseMemory } from "../../../../utils/kubernetes/kubernetes-utils";
|
||||
import createLogger from "../../../../utils/logger";
|
||||
|
||||
@@ -20,7 +20,7 @@ export default async function handler(req, res) {
|
||||
const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`;
|
||||
|
||||
try {
|
||||
const kc = getKubeConfig();
|
||||
const kc = getKubeArguments().config;
|
||||
if (!kc) {
|
||||
res.status(500).send({
|
||||
error: "No kubernetes configuration",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CoreV1Api } from "@kubernetes/client-node";
|
||||
|
||||
import getKubeConfig from "../../../../utils/config/kubernetes";
|
||||
import getKubeArguments from "../../../../utils/config/kubernetes";
|
||||
import createLogger from "../../../../utils/logger";
|
||||
|
||||
const logger = createLogger("kubernetesStatusService");
|
||||
@@ -18,7 +18,7 @@ export default async function handler(req, res) {
|
||||
}
|
||||
const labelSelector = podSelector !== undefined ? podSelector : `${APP_LABEL}=${appName}`;
|
||||
try {
|
||||
const kc = getKubeConfig();
|
||||
const kc = getKubeArguments().config;
|
||||
if (!kc) {
|
||||
res.status(500).send({
|
||||
error: "No kubernetes configuration",
|
||||
|
||||
@@ -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" });
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CoreV1Api, Metrics } from "@kubernetes/client-node";
|
||||
|
||||
import getKubeConfig from "../../../utils/config/kubernetes";
|
||||
import getKubeArguments from "../../../utils/config/kubernetes";
|
||||
import { parseCpu, parseMemory } from "../../../utils/kubernetes/kubernetes-utils";
|
||||
import createLogger from "../../../utils/logger";
|
||||
|
||||
@@ -8,7 +8,7 @@ const logger = createLogger("kubernetes-widget");
|
||||
|
||||
export default async function handler(req, res) {
|
||||
try {
|
||||
const kc = getKubeConfig();
|
||||
const kc = getKubeArguments().config;
|
||||
if (!kc) {
|
||||
return res.status(500).send({
|
||||
error: "No kubernetes configuration",
|
||||
|
||||
@@ -2,7 +2,7 @@ import cachedFetch from "utils/proxy/cached-fetch";
|
||||
|
||||
export default async function handler(req, res) {
|
||||
const { latitude, longitude, units, cache, timezone } = req.query;
|
||||
const degrees = units === "imperial" ? "fahrenheit" : "celsius";
|
||||
const degrees = units === "metric" ? "celsius" : "fahrenheit";
|
||||
const timezeone = timezone ?? "auto";
|
||||
const apiUrl = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=sunrise,sunset¤t_weather=true&temperature_unit=${degrees}&timezone=${timezeone}`;
|
||||
return res.send(await cachedFetch(apiUrl, cache));
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
# For configuration options and examples, please see:
|
||||
# https://gethomepage.dev/latest/configs/bookmarks
|
||||
# https://gethomepage.dev/configs/bookmarks
|
||||
|
||||
- Developer:
|
||||
- Github:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -6,26 +6,50 @@ import { KubeConfig } from "@kubernetes/client-node";
|
||||
|
||||
import checkAndCopyConfig, { CONF_DIR, substituteEnvironmentVars } from "utils/config/config";
|
||||
|
||||
export default function getKubeConfig() {
|
||||
const extractKubeData = (config) => {
|
||||
// kubeconfig
|
||||
const kc = new KubeConfig();
|
||||
kc.loadFromCluster();
|
||||
|
||||
// route
|
||||
let route = "ingress";
|
||||
if (config?.route === "gateway") {
|
||||
route = "gateway";
|
||||
}
|
||||
|
||||
// traefik
|
||||
let traefik = true;
|
||||
if (config?.traefik === "disable") {
|
||||
traefik = false;
|
||||
}
|
||||
|
||||
return {
|
||||
config: kc,
|
||||
route,
|
||||
traefik,
|
||||
};
|
||||
};
|
||||
|
||||
export default function getKubeArguments() {
|
||||
checkAndCopyConfig("kubernetes.yaml");
|
||||
|
||||
const configFile = path.join(CONF_DIR, "kubernetes.yaml");
|
||||
const rawConfigData = readFileSync(configFile, "utf8");
|
||||
const configData = substituteEnvironmentVars(rawConfigData);
|
||||
const config = yaml.load(configData);
|
||||
const kc = new KubeConfig();
|
||||
let kubeData;
|
||||
|
||||
switch (config?.mode) {
|
||||
case "cluster":
|
||||
kc.loadFromCluster();
|
||||
kubeData = extractKubeData(config);
|
||||
break;
|
||||
case "default":
|
||||
kc.loadFromDefault();
|
||||
kubeData = extractKubeData(config);
|
||||
break;
|
||||
case "disabled":
|
||||
default:
|
||||
return null;
|
||||
kubeData = { config: null };
|
||||
}
|
||||
|
||||
return kc;
|
||||
return kubeData;
|
||||
}
|
||||
|
||||
@@ -3,12 +3,11 @@ import path from "path";
|
||||
|
||||
import yaml from "js-yaml";
|
||||
import Docker from "dockerode";
|
||||
import { CustomObjectsApi, NetworkingV1Api, ApiextensionsV1Api } from "@kubernetes/client-node";
|
||||
|
||||
import createLogger from "utils/logger";
|
||||
import checkAndCopyConfig, { CONF_DIR, getSettings, substituteEnvironmentVars } from "utils/config/config";
|
||||
import getDockerArguments from "utils/config/docker";
|
||||
import getKubeConfig from "utils/config/kubernetes";
|
||||
import { getUrlSchema, getRouteList } from "utils/kubernetes/kubernetes-routes";
|
||||
import * as shvl from "utils/config/shvl";
|
||||
|
||||
const logger = createLogger("service-helpers");
|
||||
@@ -151,33 +150,6 @@ export async function servicesFromDocker() {
|
||||
return mappedServiceGroups;
|
||||
}
|
||||
|
||||
function getUrlFromIngress(ingress) {
|
||||
const urlHost = ingress.spec.rules[0].host;
|
||||
const urlPath = ingress.spec.rules[0].http.paths[0].path;
|
||||
const urlSchema = ingress.spec.tls ? "https" : "http";
|
||||
return `${urlSchema}://${urlHost}${urlPath}`;
|
||||
}
|
||||
|
||||
export async function checkCRD(kc, name) {
|
||||
const apiExtensions = kc.makeApiClient(ApiextensionsV1Api);
|
||||
const exist = await apiExtensions
|
||||
.readCustomResourceDefinitionStatus(name)
|
||||
.then(() => true)
|
||||
.catch(async (error) => {
|
||||
if (error.statusCode === 403) {
|
||||
logger.error(
|
||||
"Error checking if CRD %s exists. Make sure to add the following permission to your RBAC: %d %s %s",
|
||||
name,
|
||||
error.statusCode,
|
||||
error.body.message,
|
||||
);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
return exist;
|
||||
}
|
||||
|
||||
export async function servicesFromKubernetes() {
|
||||
const ANNOTATION_BASE = "gethomepage.dev";
|
||||
const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
|
||||
@@ -186,128 +158,70 @@ export async function servicesFromKubernetes() {
|
||||
checkAndCopyConfig("kubernetes.yaml");
|
||||
|
||||
try {
|
||||
const kc = getKubeConfig();
|
||||
if (!kc) {
|
||||
const routeList = await getRouteList(ANNOTATION_BASE);
|
||||
|
||||
if (!routeList) {
|
||||
return [];
|
||||
}
|
||||
const networking = kc.makeApiClient(NetworkingV1Api);
|
||||
const crd = kc.makeApiClient(CustomObjectsApi);
|
||||
|
||||
const ingressList = await networking
|
||||
.listIngressForAllNamespaces(null, null, null, null)
|
||||
.then((response) => response.body)
|
||||
.catch((error) => {
|
||||
logger.error("Error getting ingresses: %d %s %s", error.statusCode, error.body, error.response);
|
||||
logger.debug(error);
|
||||
return null;
|
||||
});
|
||||
|
||||
const traefikContainoExists = await checkCRD(kc, "ingressroutes.traefik.containo.us");
|
||||
const traefikExists = await checkCRD(kc, "ingressroutes.traefik.io");
|
||||
|
||||
const traefikIngressListContaino = await crd
|
||||
.listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes")
|
||||
.then((response) => response.body)
|
||||
.catch(async (error) => {
|
||||
if (traefikContainoExists) {
|
||||
logger.error(
|
||||
"Error getting traefik ingresses from traefik.containo.us: %d %s %s",
|
||||
error.statusCode,
|
||||
error.body,
|
||||
error.response,
|
||||
);
|
||||
logger.debug(error);
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
const traefikIngressListIo = await crd
|
||||
.listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes")
|
||||
.then((response) => response.body)
|
||||
.catch(async (error) => {
|
||||
if (traefikExists) {
|
||||
logger.error(
|
||||
"Error getting traefik ingresses from traefik.io: %d %s %s",
|
||||
error.statusCode,
|
||||
error.body,
|
||||
error.response,
|
||||
);
|
||||
logger.debug(error);
|
||||
}
|
||||
|
||||
return [];
|
||||
});
|
||||
|
||||
const traefikIngressList = [...(traefikIngressListContaino?.items ?? []), ...(traefikIngressListIo?.items ?? [])];
|
||||
|
||||
if (traefikIngressList.length > 0) {
|
||||
const traefikServices = traefikIngressList.filter(
|
||||
(ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/href`],
|
||||
);
|
||||
ingressList.items.push(...traefikServices);
|
||||
}
|
||||
|
||||
if (!ingressList) {
|
||||
return [];
|
||||
}
|
||||
const services = ingressList.items
|
||||
.filter(
|
||||
(ingress) =>
|
||||
ingress.metadata.annotations &&
|
||||
ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true" &&
|
||||
(!ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] ||
|
||||
ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName ||
|
||||
`${ANNOTATION_BASE}/instance.${instanceName}` in ingress.metadata.annotations),
|
||||
)
|
||||
.map((ingress) => {
|
||||
let constructedService = {
|
||||
app: ingress.metadata.annotations[`${ANNOTATION_BASE}/app`] || ingress.metadata.name,
|
||||
namespace: ingress.metadata.namespace,
|
||||
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
|
||||
name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
|
||||
group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
|
||||
weight: ingress.metadata.annotations[`${ANNOTATION_BASE}/weight`] || "0",
|
||||
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || "",
|
||||
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || "",
|
||||
external: false,
|
||||
type: "service",
|
||||
};
|
||||
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
|
||||
constructedService.external =
|
||||
String(ingress.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true";
|
||||
}
|
||||
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`] !== undefined) {
|
||||
constructedService.podSelector = ingress.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`];
|
||||
}
|
||||
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
|
||||
constructedService.ping = ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`];
|
||||
}
|
||||
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`]) {
|
||||
constructedService.siteMonitor = ingress.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`];
|
||||
}
|
||||
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`]) {
|
||||
constructedService.statusStyle = ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`];
|
||||
}
|
||||
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
|
||||
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
|
||||
shvl.set(
|
||||
constructedService,
|
||||
annotation.replace(`${ANNOTATION_BASE}/`, ""),
|
||||
ingress.metadata.annotations[annotation],
|
||||
);
|
||||
const services = await Promise.all(
|
||||
routeList
|
||||
.filter(
|
||||
(route) =>
|
||||
route.metadata.annotations &&
|
||||
route.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true" &&
|
||||
(!route.metadata.annotations[`${ANNOTATION_BASE}/instance`] ||
|
||||
route.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName ||
|
||||
`${ANNOTATION_BASE}/instance.${instanceName}` in route.metadata.annotations),
|
||||
)
|
||||
.map(async (route) => {
|
||||
let constructedService = {
|
||||
app: route.metadata.annotations[`${ANNOTATION_BASE}/app`] || route.metadata.name,
|
||||
namespace: route.metadata.namespace,
|
||||
href: route.metadata.annotations[`${ANNOTATION_BASE}/href`] || (await getUrlSchema(route)),
|
||||
name: route.metadata.annotations[`${ANNOTATION_BASE}/name`] || route.metadata.name,
|
||||
group: route.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
|
||||
weight: route.metadata.annotations[`${ANNOTATION_BASE}/weight`] || "0",
|
||||
icon: route.metadata.annotations[`${ANNOTATION_BASE}/icon`] || "",
|
||||
description: route.metadata.annotations[`${ANNOTATION_BASE}/description`] || "",
|
||||
external: false,
|
||||
type: "service",
|
||||
};
|
||||
if (route.metadata.annotations[`${ANNOTATION_BASE}/external`]) {
|
||||
constructedService.external =
|
||||
String(route.metadata.annotations[`${ANNOTATION_BASE}/external`]).toLowerCase() === "true";
|
||||
}
|
||||
});
|
||||
if (route.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`] !== undefined) {
|
||||
constructedService.podSelector = route.metadata.annotations[`${ANNOTATION_BASE}/pod-selector`];
|
||||
}
|
||||
if (route.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
|
||||
constructedService.ping = route.metadata.annotations[`${ANNOTATION_BASE}/ping`];
|
||||
}
|
||||
if (route.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`]) {
|
||||
constructedService.siteMonitor = route.metadata.annotations[`${ANNOTATION_BASE}/siteMonitor`];
|
||||
}
|
||||
if (route.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`]) {
|
||||
constructedService.statusStyle = route.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`];
|
||||
}
|
||||
Object.keys(route.metadata.annotations).forEach((annotation) => {
|
||||
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
|
||||
shvl.set(
|
||||
constructedService,
|
||||
annotation.replace(`${ANNOTATION_BASE}/`, ""),
|
||||
route.metadata.annotations[annotation],
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService)));
|
||||
} catch (e) {
|
||||
logger.error("Error attempting k8s environment variable substitution.");
|
||||
logger.debug(e);
|
||||
}
|
||||
|
||||
return constructedService;
|
||||
});
|
||||
try {
|
||||
constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService)));
|
||||
} catch (e) {
|
||||
logger.error("Error attempting k8s environment variable substitution.");
|
||||
logger.debug(e);
|
||||
}
|
||||
return constructedService;
|
||||
}),
|
||||
);
|
||||
|
||||
const mappedServiceGroups = [];
|
||||
|
||||
@@ -368,6 +282,9 @@ export function cleanServiceGroups(groups) {
|
||||
repositoryId,
|
||||
userEmail,
|
||||
|
||||
// beszel
|
||||
systemId,
|
||||
|
||||
// calendar
|
||||
firstDayInWeek,
|
||||
integrations,
|
||||
@@ -406,7 +323,7 @@ export function cleanServiceGroups(groups) {
|
||||
// frigate
|
||||
enableRecentEvents,
|
||||
|
||||
// glances, mealie, pihole, pfsense
|
||||
// glances, immich, mealie, pihole, pfsense
|
||||
version,
|
||||
|
||||
// glances
|
||||
@@ -415,7 +332,7 @@ export function cleanServiceGroups(groups) {
|
||||
pointsLimit,
|
||||
diskUnits,
|
||||
|
||||
// glances, customapi, iframe
|
||||
// glances, customapi, iframe, prometheusmetric
|
||||
refreshInterval,
|
||||
|
||||
// hdhomerun
|
||||
@@ -442,6 +359,9 @@ export function cleanServiceGroups(groups) {
|
||||
namespace,
|
||||
podSelector,
|
||||
|
||||
// lubelogger
|
||||
vehicleID,
|
||||
|
||||
// mjpeg
|
||||
fit,
|
||||
stream,
|
||||
@@ -455,6 +375,9 @@ export function cleanServiceGroups(groups) {
|
||||
// opnsense, pfsense
|
||||
wan,
|
||||
|
||||
// prometheusmetric
|
||||
metrics,
|
||||
|
||||
// proxmox
|
||||
node,
|
||||
|
||||
@@ -475,6 +398,9 @@ export function cleanServiceGroups(groups) {
|
||||
// unifi
|
||||
site,
|
||||
|
||||
// vikunja
|
||||
enableTaskList,
|
||||
|
||||
// wgeasy
|
||||
threshold,
|
||||
|
||||
@@ -505,6 +431,10 @@ export function cleanServiceGroups(groups) {
|
||||
if (repositoryId) cleanedService.widget.repositoryId = repositoryId;
|
||||
}
|
||||
|
||||
if (type === "beszel") {
|
||||
if (systemId) cleanedService.widget.systemId = systemId;
|
||||
}
|
||||
|
||||
if (type === "coinmarketcap") {
|
||||
if (currency) cleanedService.widget.currency = currency;
|
||||
if (symbols) cleanedService.widget.symbols = symbols;
|
||||
@@ -565,8 +495,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 +557,16 @@ 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;
|
||||
}
|
||||
if (type === "prometheusmetric") {
|
||||
if (metrics) cleanedService.widget.metrics = metrics;
|
||||
if (refreshInterval) cleanedService.widget.refreshInterval = refreshInterval;
|
||||
}
|
||||
}
|
||||
|
||||
return cleanedService;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user