Compare commits

..

24 Commits

Author SHA1 Message Date
shamoon
0717607a97 Merge branch dev into main 2024-12-31 21:48:49 -08:00
github-actions[bot]
ee5442c15c New Crowdin translations by GitHub Action (#4506) 2024-12-31 21:48:12 -08:00
shamoon
b2158b0921 Fix: incorrect weekyear for events (#4519) 2024-12-30 11:26:04 -08:00
shamoon
a158866ca1 Feature: meta description setting (#4513) 2024-12-28 21:12:20 -08:00
shamoon
4f27ffbe2d Change: make region optional for gluetun api response (#4512) 2024-12-28 20:53:43 -08:00
shamoon
10bc8a15a9 Update support.yml 2024-12-28 16:50:23 -08:00
Per Mortensen
5d63b3d212 Fix: include all Beszel status localization strings (#4504) 2024-12-28 07:35:22 -08:00
shamoon
43decb0ed9 Fix: correct iconsOnly bookmark group spacing (#4502) 2024-12-27 16:11:47 -08:00
shamoon
e4d42b5393 FIx: glances containers header position (#4496) 2024-12-26 14:51:11 -08:00
shamoon
f717e59085 Enhancement: support 'nice name' for beszel system ID (#4495) 2024-12-26 11:07:33 -08:00
shamoon
fd05ae377c Enhancement: Better handle some beszel errors (#4493) 2024-12-25 12:17:10 -08:00
shamoon
cc9b4782f2 Merge branch 'dev' 2024-12-24 22:20:20 -08:00
github-actions[bot]
14cda38dbb New Crowdin translations by GitHub Action (#4481)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-12-24 22:19:23 -08:00
shamoon
27e3c9f1ed Merge branch 'dev' 2024-12-24 22:18:55 -08:00
shamoon
607c4b7750 Fix: fun with padding and margins (#4489) 2024-12-24 12:22:06 -08:00
shamoon
1c6480586c Fix: fix search overlay behind status indicators in 0.10.x (#4484) 2024-12-23 18:28:04 -08:00
shamoon
31c04006da Merge branch 'dev' 2024-12-23 14:02:38 -08:00
github-actions[bot]
499ab4d701 New Crowdin translations by GitHub Action (#4470)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-12-23 14:02:20 -08:00
shamoon
fbb35d3dc8 Merge branch 'dev' 2024-12-23 14:01:48 -08:00
shamoon
94936ed09d Tweak: again trying to restore chart sizing in 0.10.x (#4479) 2024-12-23 13:37:48 -08:00
shamoon
31a511de02 Update getting-started.md 2024-12-23 09:27:25 -08:00
shamoon
2d91b2b748 Tweak: remove extra padding for nested groups (#4474) 2024-12-22 17:48:49 -08:00
shamoon
7dabd0335f Remove service group bookmarksStyle 2024-12-22 17:37:46 -08:00
shamoon
d0937fe6a8 Updated requirements 2024-12-14 23:02:11 -08:00
67 changed files with 282 additions and 98 deletions

View File

@@ -54,3 +54,11 @@ body:
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/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: validations:
required: true required: true
- type: markdown
attributes:
value: |
## ⚠️ STOP ⚠️
Before you submit this support request, please ensure you have entered your configuration files and actually followed the steps from the troubleshooting guide linked above, if relevant. The troubleshooting steps often help to solve the problem.
*Please remember that this project is maintained by regular people **just like you**, so if you don't take the time to fill out the requested information, don't expect a reply back.*

View File

@@ -63,7 +63,7 @@ The homepage team appreciates all effort and interest from the community in fili
- Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity. - Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity.
- Discussions with a marked answer will be automatically closed. - Discussions with a marked answer will be automatically closed.
- Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity. - Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity.
- Feature requests that do not meet the following thresholds will be closed: 5 "up-votes" after 180 days of inactivity or 10 "up-votes" after 365 days. - Feature requests that do not meet the following thresholds will be closed: 10 "up-votes" after 180 days of inactivity or 20 "up-votes" after 365 days.
In all cases, threads can be re-opened by project maintainers and, of course, users can always create a new discussion for related concerns. In all cases, threads can be re-opened by project maintainers and, of course, users can always create a new discussion for related concerns.
Finally, remember that all information remains searchable and 'closed' feature requests can still serve as inspiration for new features. Finally, remember that all information remains searchable and 'closed' feature requests can still serve as inspiration for new features.

View File

@@ -13,6 +13,14 @@ You can customize the title of the page if you'd like.
title: My Awesome Homepage title: My Awesome Homepage
``` ```
## Description
You can customize the description of the page if you'd like.
```yaml
description: A description of my awesome homepage
```
## Start URL ## Start URL
You can customize the start_url as required for installable apps. The default is "/". You can customize the start_url as required for installable apps. The default is "/".

View File

@@ -48,7 +48,7 @@ self-hosted / open-source alternative, we ask that any widgets, etc. are develop
## New Feature Guidelines ## New Feature Guidelines
- 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. - New features should 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. - If you have ideas for a larger feature you may want to open a discussion first.
## Service Widget Guidelines ## Service Widget Guidelines

View File

@@ -7,7 +7,7 @@ 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 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. The `systemID` is the `id` field on the collections page of Beszel under the PocketBase admin panel. You can also use the 'nice name' from the Beszel UI.
Allowed fields for 'overview' mode: `["systems", "up"]` Allowed fields for 'overview' mode: `["systems", "up"]`
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]` Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`

View File

@@ -982,6 +982,9 @@
"name": "Naam", "name": "Naam",
"systems": "Stelsels", "systems": "Stelsels",
"up": "Op", "up": "Op",
"down": "Af",
"paused": "Onderbreek",
"pending": "Afwagtend",
"status": "Status", "status": "Status",
"updated": "Opgedateer", "updated": "Opgedateer",
"cpu": "SVE", "cpu": "SVE",

View File

@@ -982,6 +982,9 @@
"name": "الاسم", "name": "الاسم",
"systems": "Systems", "systems": "Systems",
"up": "يعمل", "up": "يعمل",
"down": "لا يعمل",
"paused": "متوقف",
"pending": "معلق",
"status": "الحالة", "status": "الحالة",
"updated": "محدث", "updated": "محدث",
"cpu": "المعالج", "cpu": "المعالج",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Статус", "status": "Статус",
"updated": "Updated", "updated": "Updated",
"cpu": "Процесор", "cpu": "Процесор",

View File

@@ -982,6 +982,9 @@
"name": "Nom", "name": "Nom",
"systems": "Sistemes", "systems": "Sistemes",
"up": "Actiu", "up": "Actiu",
"down": "Inactiu",
"paused": "En pausa",
"pending": "Pendent",
"status": "Estat", "status": "Estat",
"updated": "Actualitzat", "updated": "Actualitzat",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Pozastaveno",
"pending": "Čeká",
"status": "Stav", "status": "Stav",
"updated": "Aktualizováno", "updated": "Aktualizováno",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Navn", "name": "Navn",
"systems": "Systems", "systems": "Systems",
"up": "Op", "up": "Op",
"down": "Ned",
"paused": "Pause",
"pending": "Afventer",
"status": "Status", "status": "Status",
"updated": "Opdateret", "updated": "Opdateret",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systeme", "systems": "Systeme",
"up": "Senden", "up": "Senden",
"down": "Empfangen",
"paused": "Pausiert",
"pending": "Ausstehend",
"status": "Status", "status": "Status",
"updated": "Aktualisiert", "updated": "Aktualisiert",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Όνομα", "name": "Όνομα",
"systems": "Systems", "systems": "Systems",
"up": "Ping up", "up": "Ping up",
"down": "Ping down",
"paused": "Paused",
"pending": "Σε εκκρεμότητα",
"status": "Κατάσταση", "status": "Κατάσταση",
"updated": "Ενημερώθηκε", "updated": "Ενημερώθηκε",
"cpu": "Επεξεργαστής", "cpu": "Επεξεργαστής",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status", "status": "Status",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Stato", "status": "Stato",
"updated": "Updated", "updated": "Updated",
"cpu": "Ĉefprocesoro", "cpu": "Ĉefprocesoro",

View File

@@ -311,13 +311,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "Descargado", "download": "Descargado",
"nondownload": "Non-Downloaded", "nondownload": "No descargado",
"read": "Leer", "read": "Leer",
"unread": "Sin leer", "unread": "Sin leer",
"downloadedread": "Downloaded & Read", "downloadedread": "Descargado y leído",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "Descargado y no leído",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "No descargado y leído",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "No descargado y no leído"
}, },
"tailscale": { "tailscale": {
"address": "Dirección", "address": "Dirección",
@@ -980,32 +980,35 @@
}, },
"beszel": { "beszel": {
"name": "Nombre", "name": "Nombre",
"systems": "Systems", "systems": "Sistemas",
"up": "Activo", "up": "Activo",
"down": "Inactivo",
"paused": "Pausado",
"pending": "Pendiente",
"status": "Estado", "status": "Estado",
"updated": "Actualizado", "updated": "Actualizado",
"cpu": "CPU", "cpu": "CPU",
"memory": "MEM", "memory": "MEM",
"disk": "Disk", "disk": "Disco",
"network": "NET" "network": "RED"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Apps",
"synced": "Synced", "synced": "Sincronizado",
"outOfSync": "Out Of Sync", "outOfSync": "Desincronizado",
"healthy": "Saludable", "healthy": "Saludable",
"degraded": "Degraded", "degraded": "Degradado",
"progressing": "Progressing", "progressing": "Progresando",
"missing": "Faltantes", "missing": "Faltantes",
"suspended": "Suspended" "suspended": "Suspendido"
}, },
"spoolman": { "spoolman": {
"loading": "Cargando" "loading": "Cargando"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Grupos",
"issues": "Números", "issues": "Números",
"merges": "Merge Requests", "merges": "Solicitudes de fusión",
"projects": "Projects" "projects": "Proyectos"
} }
} }

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status", "status": "Status",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Vireillä",
"status": "Tila", "status": "Tila",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -58,7 +58,7 @@
"wlan": "WLAN", "wlan": "WLAN",
"devices": "Équipt.", "devices": "Équipt.",
"lan_devices": "Équipt. LAN", "lan_devices": "Équipt. LAN",
"wlan_devices": "Équipt. WLAN", "wlan_devices": "Périphériques WLAN",
"lan_users": "Utilisateurs LAN", "lan_users": "Utilisateurs LAN",
"wlan_users": "Utilisateurs WLAN", "wlan_users": "Utilisateurs WLAN",
"up": "Up", "up": "Up",
@@ -982,6 +982,9 @@
"name": "Nom", "name": "Nom",
"systems": "Systèmes", "systems": "Systèmes",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "En Pause",
"pending": "En attente",
"status": "Statut", "status": "Statut",
"updated": "Mis à jour", "updated": "Mis à jour",
"cpu": "CPU", "cpu": "CPU",
@@ -990,22 +993,22 @@
"network": "Réseau" "network": "Réseau"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Applications",
"synced": "Synced", "synced": "Synchronisé",
"outOfSync": "Out Of Sync", "outOfSync": "Désynchronisé",
"healthy": "Fonctionnel", "healthy": "Fonctionnel",
"degraded": "Degraded", "degraded": "Dégradé",
"progressing": "Progressing", "progressing": "En cours",
"missing": "Manquant", "missing": "Manquant",
"suspended": "Suspended" "suspended": "Suspendu"
}, },
"spoolman": { "spoolman": {
"loading": "Chargement" "loading": "Chargement"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Groupes",
"issues": "Anomalies", "issues": "Anomalies",
"merges": "Merge Requests", "merges": "Demandes de fusion de branches",
"projects": "Projects" "projects": "Projets"
} }
} }

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "ממתין",
"status": "סטטוס", "status": "סטטוס",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status", "status": "Status",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Ime", "name": "Ime",
"systems": "Systems", "systems": "Systems",
"up": "Dostupno", "up": "Dostupno",
"down": "Nedostupno",
"paused": "Zaustavljeno",
"pending": "U tijeku",
"status": "Stanje", "status": "Stanje",
"updated": "Aktualizirano", "updated": "Aktualizirano",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Név", "name": "Név",
"systems": "Rendszerek", "systems": "Rendszerek",
"up": "Fel", "up": "Fel",
"down": "Le",
"paused": "Szünetel",
"pending": "Függőben",
"status": "Státusz", "status": "Státusz",
"updated": "Frissített", "updated": "Frissített",
"cpu": "Processzor", "cpu": "Processzor",

View File

@@ -982,6 +982,9 @@
"name": "Nama", "name": "Nama",
"systems": "Systems", "systems": "Systems",
"up": "Hidup", "up": "Hidup",
"down": "Mati",
"paused": "Pause",
"pending": "Pending",
"status": "Status", "status": "Status",
"updated": "Terbarui", "updated": "Terbarui",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -335,7 +335,7 @@
}, },
"technitium": { "technitium": {
"totalQueries": "Richieste", "totalQueries": "Richieste",
"totalNoError": "Success", "totalNoError": "Successo",
"totalServerFailure": "Failures", "totalServerFailure": "Failures",
"totalNxDomain": "NX Domains", "totalNxDomain": "NX Domains",
"totalRefused": "Refused", "totalRefused": "Refused",
@@ -590,7 +590,7 @@
"total": "Totale" "total": "Totale"
}, },
"peanut": { "peanut": {
"battery_charge": "Battery Charge", "battery_charge": "Carica Batteria",
"ups_load": "Carico UPS", "ups_load": "Carico UPS",
"ups_status": "Stato UPS", "ups_status": "Stato UPS",
"online": "Online", "online": "Online",
@@ -854,7 +854,7 @@
}, },
"romm": { "romm": {
"platforms": "Piattaforme", "platforms": "Piattaforme",
"totalRoms": "Games", "totalRoms": "Giochi",
"saves": "Saves", "saves": "Saves",
"states": "States", "states": "States",
"screenshots": "Screenshots", "screenshots": "Screenshots",
@@ -890,7 +890,7 @@
"sceneDuration": "Durata Delle Scene", "sceneDuration": "Durata Delle Scene",
"images": "Immagini", "images": "Immagini",
"imageSize": "Dimensioni immagine", "imageSize": "Dimensioni immagine",
"galleries": "Galleries", "galleries": "Gallerie",
"performers": "Esecutori", "performers": "Esecutori",
"studios": "Studi", "studios": "Studi",
"movies": "Film", "movies": "Film",
@@ -933,7 +933,7 @@
}, },
"stocks": { "stocks": {
"stocks": "Stocks", "stocks": "Stocks",
"loading": "Loading", "loading": "Caricamento",
"open": "Open - US Market", "open": "Open - US Market",
"closed": "Closed - US Market", "closed": "Closed - US Market",
"invalidConfiguration": "Invalid Configuration" "invalidConfiguration": "Invalid Configuration"
@@ -944,8 +944,8 @@
"version": "Versione" "version": "Versione"
}, },
"linkwarden": { "linkwarden": {
"links": "Links", "links": "Collegamenti",
"collections": "Collections", "collections": "Raccolte",
"tags": "Tag" "tags": "Tag"
}, },
"zabbix": { "zabbix": {
@@ -957,12 +957,12 @@
"disaster": "Disaster" "disaster": "Disaster"
}, },
"lubelogger": { "lubelogger": {
"vehicle": "Vehicle", "vehicle": "Veicolo",
"vehicles": "Vehicles", "vehicles": "Veicoli",
"serviceRecords": "Service Records", "serviceRecords": "Service Records",
"reminders": "Reminders", "reminders": "Promemoria",
"nextReminder": "Next Reminder", "nextReminder": "Promemoria Seguente",
"none": "None" "none": "Nessuno"
}, },
"vikunja": { "vikunja": {
"projects": "Active Projects", "projects": "Active Projects",
@@ -982,6 +982,9 @@
"name": "Nome", "name": "Nome",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "In Pausa",
"pending": "In attesa",
"status": "Stato", "status": "Stato",
"updated": "Aggiornato", "updated": "Aggiornato",
"cpu": "CPU", "cpu": "CPU",
@@ -1000,7 +1003,7 @@
"suspended": "Suspended" "suspended": "Suspended"
}, },
"spoolman": { "spoolman": {
"loading": "Loading" "loading": "Caricamento"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Groups",

View File

@@ -982,6 +982,9 @@
"name": "名前", "name": "名前",
"systems": "Systems", "systems": "Systems",
"up": "稼働", "up": "稼働",
"down": "下へ",
"paused": "一時停止中",
"pending": "保留中",
"status": "状態", "status": "状態",
"updated": "更新済", "updated": "更新済",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "이름", "name": "이름",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "대기 중",
"status": "상태", "status": "상태",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Statuss", "status": "Statuss",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Nama", "name": "Nama",
"systems": "Systems", "systems": "Systems",
"up": "Hidup", "up": "Hidup",
"down": "Mati",
"paused": "Tangguh",
"pending": "Tertunda",
"status": "Status", "status": "Status",
"updated": "Dikemaskini", "updated": "Dikemaskini",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -311,13 +311,13 @@
}, },
"suwayomi": { "suwayomi": {
"download": "Gedownload", "download": "Gedownload",
"nondownload": "Non-Downloaded", "nondownload": "Niet gedownload",
"read": "Gelezen", "read": "Gelezen",
"unread": "Ongelezen", "unread": "Ongelezen",
"downloadedread": "Downloaded & Read", "downloadedread": "Gedownload & gelezen",
"downloadedunread": "Downloaded & Unread", "downloadedunread": "Gedownload & ongelezen",
"nondownloadedread": "Non-Downloaded & Read", "nondownloadedread": "Niet-gedownload & gelezen",
"nondownloadedunread": "Non-Downloaded & Unread" "nondownloadedunread": "Niet-gedownload & ongelezen"
}, },
"tailscale": { "tailscale": {
"address": "Adres", "address": "Adres",
@@ -980,32 +980,35 @@
}, },
"beszel": { "beszel": {
"name": "Naam", "name": "Naam",
"systems": "Systems", "systems": "Systemen",
"up": "Online", "up": "Online",
"down": "Offline",
"paused": "Gepauzeerd",
"pending": "In afwachting",
"status": "Status", "status": "Status",
"updated": "Bijgewerkt", "updated": "Bijgewerkt",
"cpu": "CPU", "cpu": "CPU",
"memory": "GEH", "memory": "GEH",
"disk": "Disk", "disk": "Schijf",
"network": "NET" "network": "NET"
}, },
"argocd": { "argocd": {
"apps": "Apps", "apps": "Apps",
"synced": "Synced", "synced": "Gesynchroniseerd",
"outOfSync": "Out Of Sync", "outOfSync": "Niet gesynchroniseerd",
"healthy": "Gezond", "healthy": "Gezond",
"degraded": "Degraded", "degraded": "Gedegradeerd",
"progressing": "Progressing", "progressing": "Doorvoeren",
"missing": "Ontbreekt", "missing": "Ontbreekt",
"suspended": "Suspended" "suspended": "Onderbroken"
}, },
"spoolman": { "spoolman": {
"loading": "Laden" "loading": "Laden"
}, },
"gitlab": { "gitlab": {
"groups": "Groups", "groups": "Groepen",
"issues": "Problemen", "issues": "Problemen",
"merges": "Merge Requests", "merges": "Merge Verzoeken",
"projects": "Projects" "projects": "Projecten"
} }
} }

View File

@@ -982,6 +982,9 @@
"name": "Navn", "name": "Navn",
"systems": "Systems", "systems": "Systems",
"up": "Oppe", "up": "Oppe",
"down": "Nede",
"paused": "Pauset",
"pending": "Ventende",
"status": "Status", "status": "Status",
"updated": "Oppdatert", "updated": "Oppdatert",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -13,7 +13,7 @@
"ms": "{{value, number}}", "ms": "{{value, number}}",
"date": "{{value, date}}", "date": "{{value, date}}",
"relativeDate": "{{value, relativeDate}}", "relativeDate": "{{value, relativeDate}}",
"duration": "{value, duration}", "duration": "{{value, duration}}",
"months": "mc", "months": "mc",
"days": "d", "days": "d",
"hours": "g", "hours": "g",
@@ -982,6 +982,9 @@
"name": "Nazwa", "name": "Nazwa",
"systems": "Systemy", "systems": "Systemy",
"up": "Dostępny", "up": "Dostępny",
"down": "Niedostępny",
"paused": "Zatrzymane",
"pending": "Oczekiwane",
"status": "Stan", "status": "Stan",
"updated": "Zaktualizowane", "updated": "Zaktualizowane",
"cpu": "Procesor", "cpu": "Procesor",

View File

@@ -982,6 +982,9 @@
"name": "Nome", "name": "Nome",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Pausa",
"pending": "Pendente",
"status": "Estado", "status": "Estado",
"updated": "Atualizado", "updated": "Atualizado",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Nome", "name": "Nome",
"systems": "Systems", "systems": "Systems",
"up": "Ativo", "up": "Ativo",
"down": "Inativo",
"paused": "Pausado",
"pending": "Pendente",
"status": "Status", "status": "Status",
"updated": "Atualizado", "updated": "Atualizado",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Sus", "up": "Sus",
"down": "Jos",
"paused": "Paused",
"pending": "În așteptare",
"status": "Stare", "status": "Stare",
"updated": "Updated", "updated": "Updated",
"cpu": "Procesor", "cpu": "Procesor",

View File

@@ -982,6 +982,9 @@
"name": "Имя", "name": "Имя",
"systems": "Системы", "systems": "Системы",
"up": "Онлайн", "up": "Онлайн",
"down": "Офлайн",
"paused": "Приостановлено",
"pending": "В обработке",
"status": "Статус", "status": "Статус",
"updated": "Обновленно", "updated": "Обновленно",
"cpu": "ЦП", "cpu": "ЦП",

View File

@@ -982,6 +982,9 @@
"name": "Meno", "name": "Meno",
"systems": "Systems", "systems": "Systems",
"up": "Nahrávanie", "up": "Nahrávanie",
"down": "Sťahovanie",
"paused": "Pozastavené",
"pending": "Čakajúce",
"status": "Stav", "status": "Stav",
"updated": "Aktualizované", "updated": "Aktualizované",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Naziv", "name": "Naziv",
"systems": "Sistemi", "systems": "Sistemi",
"up": "Povezan", "up": "Povezan",
"down": "Nepovezan",
"paused": "Pavziran",
"pending": "V teku",
"status": "Stanje", "status": "Stanje",
"updated": "Posodobljen", "updated": "Posodobljen",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status", "status": "Status",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Avvaktar",
"status": "Status", "status": "Status",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "పెండింగ్",
"status": "హోదా", "status": "హోదా",
"updated": "నవీకరించబడింది", "updated": "నవీకరించబడింది",
"cpu": "సీపియూ", "cpu": "సీపియూ",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "สถานะ", "status": "สถานะ",
"updated": "Updated", "updated": "Updated",
"cpu": "ซีพียู", "cpu": "ซีพียู",

View File

@@ -982,6 +982,9 @@
"name": "İsim", "name": "İsim",
"systems": "Systems", "systems": "Systems",
"up": "Yükleme", "up": "Yükleme",
"down": "İndirme",
"paused": "Duraklatıldı",
"pending": "Bekleyen",
"status": "Durum", "status": "Durum",
"updated": "Güncellendi", "updated": "Güncellendi",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Назва", "name": "Назва",
"systems": "Системи", "systems": "Системи",
"up": "Онлайн", "up": "Онлайн",
"down": "Офлайн",
"paused": "Призупинено",
"pending": "В очікуванні",
"status": "Стан", "status": "Стан",
"updated": "Оновлено", "updated": "Оновлено",
"cpu": "ЦП", "cpu": "ЦП",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Đang xử lý",
"status": "Trạng thái", "status": "Trạng thái",
"updated": "Updated", "updated": "Updated",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "Systems",
"up": "在線", "up": "在線",
"down": "離線",
"paused": "擱置中",
"pending": "待定",
"status": "狀況", "status": "狀況",
"updated": "已更新", "updated": "已更新",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "Name", "name": "Name",
"systems": "Systems", "systems": "Systems",
"up": "Up", "up": "Up",
"down": "Down",
"paused": "暂停",
"pending": "待办的",
"status": "状态", "status": "状态",
"updated": "已升级", "updated": "已升级",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -982,6 +982,9 @@
"name": "名稱", "name": "名稱",
"systems": "Systems", "systems": "Systems",
"up": "在線", "up": "在線",
"down": "離線",
"paused": "擱置中",
"pending": "待下載",
"status": "狀態", "status": "狀態",
"updated": "已更新", "updated": "已更新",
"cpu": "CPU", "cpu": "CPU",

View File

@@ -24,9 +24,9 @@ export default function BookmarksGroup({
<div <div
key={bookmarks.name} key={bookmarks.name}
className={classNames( className={classNames(
"bookmark-group", "bookmark-group flex-1 overflow-hidden",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/4 lg:basis-1/5 xl:basis-1/6", layout?.style === "row" ? "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 overflow-hidden" : "flex-1 p-1 overflow-hidden", layout?.header === false ? "px-1" : "p-1 pb-0",
)} )}
> >
<Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}> <Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}>

View File

@@ -5,15 +5,14 @@ import { columnMap } from "../../utils/layout/columns";
import Item from "components/bookmarks/item"; import Item from "components/bookmarks/item";
export default function List({ bookmarks, layout, bookmarksStyle }) { export default function List({ bookmarks, layout, bookmarksStyle }) {
let classes = let classes = layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col bookmark-list";
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col mt-3 bookmark-list";
const style = {}; const style = {};
if (layout?.iconsOnly || bookmarksStyle === "icons") { if (layout?.iconsOnly || bookmarksStyle === "icons") {
classes = "grid gap-3 mt-3 bookmark-list"; classes = "grid gap-2 bookmark-list";
style.gridTemplateColumns = "repeat(auto-fill, minmax(60px, 1fr))"; style.gridTemplateColumns = "repeat(auto-fill, minmax(60px, 1fr))";
} }
return ( return (
<ul className={classNames(classes)} style={style}> <ul className={classNames(classes, "mb-2", layout?.header === false ? "" : "mt-3")} style={style}>
{bookmarks.map((bookmark) => ( {bookmarks.map((bookmark) => (
<Item <Item
key={`${bookmark.name}-${bookmark.href}`} key={`${bookmark.name}-${bookmark.href}`}

View File

@@ -15,6 +15,7 @@ export default function ServicesGroup({
disableCollapse, disableCollapse,
useEqualHeights, useEqualHeights,
groupsInitiallyCollapsed, groupsInitiallyCollapsed,
isSubgroup,
}) { }) {
const panel = useRef(); const panel = useRef();
@@ -22,14 +23,18 @@ export default function ServicesGroup({
if (layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) panel.current.style.height = `0`; if (layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) panel.current.style.height = `0`;
}, [layout, groupsInitiallyCollapsed]); }, [layout, groupsInitiallyCollapsed]);
let groupPadding = layout?.header === false ? "px-1" : "p-1 pb-0";
if (isSubgroup) groupPadding = "";
return ( return (
<div <div
key={group.name} key={group.name}
className={classNames( className={classNames(
"services-group", "services-group flex-1",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4", layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4",
layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "", layout?.style !== "row" && fiveColumns ? "3xl:basis-1/5" : "",
layout?.header === false ? "flex-1 px-1 -my-1" : "flex-1 p-1", groupPadding,
isSubgroup ? "subgroup" : "",
)} )}
> >
<Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}> <Disclosure defaultOpen={!(layout?.initiallyCollapsed ?? groupsInitiallyCollapsed) ?? true}>
@@ -80,6 +85,7 @@ export default function ServicesGroup({
services={group.services} services={group.services}
layout={layout} layout={layout}
useEqualHeights={useEqualHeights} useEqualHeights={useEqualHeights}
header={layout?.header !== false}
/> />
{group.groups?.length > 0 && ( {group.groups?.length > 0 && (
<div <div
@@ -96,6 +102,7 @@ export default function ServicesGroup({
disableCollapse={disableCollapse} disableCollapse={disableCollapse}
useEqualHeights={useEqualHeights} useEqualHeights={useEqualHeights}
groupsInitiallyCollapsed={groupsInitiallyCollapsed} groupsInitiallyCollapsed={groupsInitiallyCollapsed}
isSubgroup
/> />
))} ))}
</div> </div>

View File

@@ -86,7 +86,7 @@ export default function Item({ service, groupName, useEqualHeights }) {
<div <div
className={`absolute top-0 right-0 flex flex-row justify-end ${ className={`absolute top-0 right-0 flex flex-row justify-end ${
statusStyle === "dot" ? "gap-0" : "gap-2 mr-2" statusStyle === "dot" ? "gap-0" : "gap-2 mr-2"
} z-30 service-tags`} } z-10 service-tags`}
> >
{service.ping && ( {service.ping && (
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping"> <div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">

View File

@@ -4,12 +4,13 @@ import { columnMap } from "../../utils/layout/columns";
import Item from "components/services/item"; import Item from "components/services/item";
export default function List({ groupName, services, layout, useEqualHeights }) { export default function List({ groupName, services, layout, useEqualHeights, header }) {
return ( return (
<ul <ul
className={classNames( className={classNames(
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col", layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col",
"mt-3 services-list", header ? "mt-3" : "",
"services-list",
)} )}
> >
{services.map((service) => ( {services.map((service) => (

View File

@@ -4,10 +4,6 @@ export default function Document() {
return ( return (
<Html> <Html>
<Head> <Head>
<meta
name="description"
content="A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
/>
<meta name="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" /> <link rel="manifest" href="/site.webmanifest?v=4" crossOrigin="use-credentials" />
<link rel="preload" href="/api/config/custom.css" as="style" /> <link rel="preload" href="/api/config/custom.css" as="style" />

View File

@@ -297,7 +297,6 @@ function Home({ initialSettings }) {
disableCollapse={settings.disableCollapse} disableCollapse={settings.disableCollapse}
useEqualHeights={settings.useEqualHeights} useEqualHeights={settings.useEqualHeights}
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed} groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
bookmarksStyle={settings.bookmarksStyle}
/> />
) : ( ) : (
<BookmarksGroup <BookmarksGroup
@@ -360,6 +359,13 @@ function Home({ initialSettings }) {
<> <>
<Head> <Head>
<title>{initialSettings.title || "Homepage"}</title> <title>{initialSettings.title || "Homepage"}</title>
<meta
name="description"
content={
initialSettings.description ||
"A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations."
}
/>
{settings.base && <base href={settings.base} />} {settings.base && <base href={settings.base} />}
{settings.favicon ? ( {settings.favicon ? (
<> <>

View File

@@ -63,3 +63,7 @@ dialog ::-webkit-scrollbar {
::-webkit-details-marker { ::-webkit-details-marker {
display: none; display: none;
} }
.chart + .chart {
margin-top: 2em;
}

View File

@@ -20,8 +20,20 @@ export default function Component({ service }) {
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS); widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
} }
if (systemsError) { let system = null;
return <Container service={service} error={systemsError} />; let finalError = systemsError;
if (systems && !systems.items) {
finalError = { message: "No items returned from beszel API" };
} else if (systems && systems.items && systemId) {
system = systems.items.find((item) => item.id === systemId || item.name === systemId);
if (!system) {
finalError = { message: `System with id ${systemId} not found` };
}
}
if (finalError) {
return <Container service={service} error={finalError} />;
} }
if (!systems) { if (!systems) {
@@ -33,9 +45,7 @@ export default function Component({ service }) {
); );
} }
if (systemId) { if (system) {
const system = systems.items.find((item) => item.id === systemId);
return ( return (
<Container service={service}> <Container service={service}>
<Block label="beszel.name" value={system.name} /> <Block label="beszel.name" value={system.name} />

View File

@@ -59,7 +59,7 @@ export default async function beszelProxyHandler(req, res) {
if (!token) { if (!token) {
[status, token] = await login(loginUrl, widget.username, widget.password, service); [status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) { if (status !== 200) {
logger.debug(`HTTP ${status} logging into Beszel: ${token}`); logger.debug(`HTTP ${status} logging into Beszel: ${JSON.stringify(token)}`);
return res.status(status).send(token); return res.status(status).send(token);
} }
} }
@@ -72,13 +72,13 @@ export default async function beszelProxyHandler(req, res) {
}, },
}); });
if (status === 403) { if ([400, 403].includes(status)) {
logger.debug(`HTTP ${status} retrieving data from Beszel, logging in and trying again.`); logger.debug(`HTTP ${status} retrieving data from Beszel, logging in and trying again.`);
cache.del(`${tokenCacheKey}.${service}`); cache.del(`${tokenCacheKey}.${service}`);
[status, token] = await login(loginUrl, widget.username, widget.password, service); [status, token] = await login(loginUrl, widget.username, widget.password, service);
if (status !== 200) { if (status !== 200) {
logger.debug(`HTTP ${status} logging into Beszel: ${data}`); logger.debug(`HTTP ${status} logging into Beszel: ${JSON.stringify(data)}`);
return res.status(status).send(data); return res.status(status).send(data);
} }

View File

@@ -9,7 +9,7 @@ const cellStyle = "relative w-10 flex items-center justify-center flex-col";
const monthButton = "pl-6 pr-6 ml-2 mr-2 hover:bg-theme-100/20 dark:hover:bg-white/5 rounded-md cursor-pointer"; const monthButton = "pl-6 pr-6 ml-2 mr-2 hover:bg-theme-100/20 dark:hover:bg-white/5 rounded-md cursor-pointer";
export function Day({ weekNumber, weekday, events, colorVariants, showDate, setShowDate, currentDate }) { export function Day({ weekNumber, weekday, events, colorVariants, showDate, setShowDate, currentDate }) {
const cellDate = showDate.set({ weekday, weekNumber }).startOf("day"); const cellDate = showDate.set({ weekday, weekNumber, weekYear: showDate.year }).startOf("day");
const filteredEvents = events?.filter((event) => compareDateTimezone(cellDate, event)); const filteredEvents = events?.filter((event) => compareDateTimezone(cellDate, event));
const dayStyles = (displayDate) => { const dayStyles = (displayDate) => {
@@ -35,7 +35,7 @@ export function Day({ weekNumber, weekday, events, colorVariants, showDate, setS
// today style // today style
style += "text-black-500 bg-theme-100/20 dark:bg-black/20 rounded-md "; style += "text-black-500 bg-theme-100/20 dark:bg-black/20 rounded-md ";
} else { } else {
style += "hover:bg-theme-100/20 dark:hover:bg-white/5 rounded-md cursor-pointer "; style += "hover:bg-theme-100/20 dark:hover:bg-white/5 rounded-md cursor-pointer";
} }
return style; return style;

View File

@@ -8,7 +8,7 @@ class Chart extends PureComponent {
const { dataPoints, formatter, label } = this.props; const { dataPoints, formatter, label } = this.props;
return ( return (
<div className="absolute -top-1 -left-1 h-[120px] w-[calc(100%+0.5em)] z-0"> <div className="absolute -top-10 -left-2 h-[calc(100%+3em)] w-[calc(100%+1em)] z-0">
<div className="overflow-clip z-10 w-full h-full"> <div className="overflow-clip z-10 w-full h-full">
<ResponsiveContainer width="100%" height="100%"> <ResponsiveContainer width="100%" height="100%">
<AreaChart data={dataPoints}> <AreaChart data={dataPoints}>

View File

@@ -8,7 +8,7 @@ class ChartDual extends PureComponent {
const { dataPoints, formatter, stack, label, stackOffset } = this.props; const { dataPoints, formatter, stack, label, stackOffset } = this.props;
return ( return (
<div className="absolute -top-1 -left-1 h-[120px] w-[calc(100%+0.5em)] z-0"> <div className="absolute -top-10 -left-2 h-[calc(100%+3em)] w-[calc(100%+1em)] z-0">
<div className="overflow-clip z-10 w-full h-full"> <div className="overflow-clip z-10 w-full h-full">
<ResponsiveContainer width="100%" height="100%"> <ResponsiveContainer width="100%" height="100%">
<AreaChart data={dataPoints} stackOffset={stackOffset ?? "none"}> <AreaChart data={dataPoints} stackOffset={stackOffset ?? "none"}>

View File

@@ -18,9 +18,9 @@ export default function Container({ children, widget, error = null, chart = true
} }
return ( return (
<div className={classNames("service-container", chart ? "chart relative h-[120px]" : "")}> <div className={classNames("service-container", chart ? "chart relative h-[68px]" : "")}>
{children} {children}
<div className={`absolute top-0 right-0 bottom-0 left-0 overflow-clip pointer-events-none ${className}`} /> <div className={`absolute -top-10 right-0 bottom-0 left-0 overflow-clip pointer-events-none ${className}`} />
{chart && <div className="h-[68px] overflow-clip" />} {chart && <div className="h-[68px] overflow-clip" />}
{!chart && <div className="h-[16px] overflow-clip" />} {!chart && <div className="h-[16px] overflow-clip" />}
</div> </div>

View File

@@ -38,10 +38,16 @@ export default function Component({ service }) {
} }
data.splice(chart ? 5 : 1); data.splice(chart ? 5 : 1);
let headerYPosition = "top-4";
let listYPosition = "bottom-4";
if (chart) {
headerYPosition = "-top-6";
listYPosition = "-top-3";
}
return ( return (
<Container chart={chart}> <Container chart={chart}>
<Block position="top-4 right-3 left-3"> <Block position={`${headerYPosition} right-3 left-3`}>
<div className="flex items-center text-xs"> <div className="flex items-center text-xs">
<div className="grow" /> <div className="grow" />
<div className="w-14 text-right italic">{t("resources.cpu")}</div> <div className="w-14 text-right italic">{t("resources.cpu")}</div>
@@ -49,7 +55,7 @@ export default function Component({ service }) {
</div> </div>
</Block> </Block>
<Block position="bottom-4 right-3 left-3"> <Block position={`${listYPosition} right-3 left-3`}>
<div className="pointer-events-none text-theme-900 dark:text-theme-200"> <div className="pointer-events-none text-theme-900 dark:text-theme-200">
{data.map((item) => ( {data.map((item) => (
<div key={item[idKey]} className="text-[0.75rem] h-[0.8rem]"> <div key={item[idKey]} className="text-[0.75rem] h-[0.8rem]">

View File

@@ -43,7 +43,7 @@ export default function Component({ service }) {
return ( return (
<Container chart={chart}> <Container chart={chart}>
{chart && ( {chart && (
<div className="absolute top-0 left-0 right-0 bottom-0"> <div className="absolute -top-2 -left-2 -right-2 -bottom-2">
<div <div
style={{ style={{
height: `${Math.max(20, fsData.size / fsData.free)}%`, height: `${Math.max(20, fsData.size / fsData.free)}%`,

View File

@@ -107,8 +107,12 @@ export default function Component({ service }) {
} }
return ( return (
<Container chart={chart} className="bg-gradient-to-br from-theme-500/30 via-theme-600/20 to-theme-700/10"> <Container chart={chart}>
<Block position="top-3 right-3"> {chart && (
<div className="bg-gradient-to-br from-theme-500/30 via-theme-600/20 to-theme-700/10 absolute -top-10 -left-2 -right-2 -bottom-2 h-[calc(100%+3em)] w-[calc(100%+1em)]" />
)}
<Block position="-top-6 right-2">
{quicklookData && quicklookData.cpu_name && chart && ( {quicklookData && quicklookData.cpu_name && chart && (
<div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div> <div className="text-[0.6rem] opacity-50">{quicklookData.cpu_name}</div>
)} )}
@@ -124,7 +128,7 @@ export default function Component({ service }) {
</Block> </Block>
{chart && ( {chart && (
<Block position="bottom-3 left-3"> <Block position="bottom-3 left-2">
{systemData && systemData.linux_distro && <div className="text-xs opacity-50">{systemData.linux_distro}</div>} {systemData && systemData.linux_distro && <div className="text-xs opacity-50">{systemData.linux_distro}</div>}
{systemData && systemData.os_version && <div className="text-xs opacity-50">{systemData.os_version}</div>} {systemData && systemData.os_version && <div className="text-xs opacity-50">{systemData.os_version}</div>}
{systemData && systemData.hostname && <div className="text-xs opacity-75">{systemData.hostname}</div>} {systemData && systemData.hostname && <div className="text-xs opacity-75">{systemData.hostname}</div>}
@@ -137,7 +141,7 @@ export default function Component({ service }) {
</Block> </Block>
)} )}
<Block position="bottom-3 right-3 w-[4rem]"> <Block position="bottom-3 right-2 w-[4rem]">
{chart && <CPU quicklookData={quicklookData} className="opacity-50" />} {chart && <CPU quicklookData={quicklookData} className="opacity-50" />}
{chart && <Mem quicklookData={quicklookData} className="opacity-50" />} {chart && <Mem quicklookData={quicklookData} className="opacity-50" />}

View File

@@ -42,10 +42,16 @@ export default function Component({ service }) {
} }
data.splice(chart ? 5 : 1); data.splice(chart ? 5 : 1);
let headerYPosition = "top-4";
let listYPosition = "bottom-4";
if (chart) {
headerYPosition = "-top-6";
listYPosition = "-top-3";
}
return ( return (
<Container chart={chart}> <Container chart={chart}>
<Block position="top-4 right-3 left-3"> <Block position={`${headerYPosition} right-3 left-3`}>
<div className="flex items-center text-xs"> <div className="flex items-center text-xs">
<div className="grow" /> <div className="grow" />
<div className="w-14 text-right italic">{t("resources.cpu")}</div> <div className="w-14 text-right italic">{t("resources.cpu")}</div>
@@ -53,7 +59,7 @@ export default function Component({ service }) {
</div> </div>
</Block> </Block>
<Block position="bottom-4 right-3 left-3"> <Block position={`${listYPosition} right-3 left-3`}>
<div className="pointer-events-none text-theme-900 dark:text-theme-200"> <div className="pointer-events-none text-theme-900 dark:text-theme-200">
{data.map((item) => ( {data.map((item) => (
<div key={item.pid} className="text-[0.75rem] h-[0.8rem]"> <div key={item.pid} className="text-[0.75rem] h-[0.8rem]">

View File

@@ -7,7 +7,7 @@ const widget = {
mappings: { mappings: {
ip: { ip: {
endpoint: "publicip/ip", endpoint: "publicip/ip",
validate: ["public_ip", "region", "country"], validate: ["public_ip", "country"],
}, },
}, },
}; };