Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/SPEC.md
Original file line number Diff line number Diff line change
Expand Up @@ -1158,7 +1158,7 @@ Responsive grid: 1 column on mobile, 2 on tablet, 3 on desktop.

The three newer modules (Rewards, Health, Housekeeping) start **hidden** by default — they are specialised and not active in every household, so they are offered as opt-ins in **Customize** rather than adding empty tiles to a fresh dashboard. Existing saved layouts are untouched.

**Widget sizes:** each widget has a configurable size using named presets (Tiny, Narrow, Tall, Standard, Large, Full) that map to `columns × rows` in the CSS grid. List widgets (tasks, calendar) default to the tall/narrow **Tall** (1×2) preset so a short list keeps useful height without occupying a full two-column row. Sizes are persisted in user preferences and survive page reloads.
**Widget sizes:** each widget has a configurable size using named presets grouped by height in Customize: one-row presets — Tiny (1×1), Narrow (2×1), Wide (3×1), Full row (4×1) — and two-row presets — Tall (1×2), Standard (2×2), Large (3×2), Full (4×2). They map to `columns × rows` in the CSS grid. List widgets (tasks, calendar) default to the tall/narrow **Tall** (1×2) preset so a short list keeps useful height without occupying a full two-column row. Sizes are persisted in user preferences and survive page reloads; older/direct 3- or 4-row matrix values are normalized to the nearest offered one- or two-row preset so the stored value and active picker state remain truthful.

Skeleton loading instead of spinners (the skeleton mirrors the default-visible widgets at their correct grid-spanning sizes to prevent layout shift). Clicking any widget navigates to that module.

Expand Down
4 changes: 4 additions & 0 deletions public/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "إنهاء التخصيص",
"customizeSize": "الحجم",
"customizeSizeFor": "حجم {{widget}}",
"widgetSizeOneRowGroup": "صف واحد",
"widgetSizeTwoRowsGroup": "صفان",
"customizeHide": "إخفاء {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "صغير (1×1)",
"widgetSizeNarrow": "ضيق (2×1)",
"widgetSizeWide": "عريض (3×1)",
"widgetSizeFullRow": "صف كامل (4×1)",
"widgetSizeTall": "طويل (1×2)",
"widgetSizeStandard": "قياسي (2×2)",
"widgetSizeLarge": "كبير (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Ukončit přizpůsobení",
"customizeSize": "Velikost",
"customizeSizeFor": "Velikost pro {{widget}}",
"widgetSizeOneRowGroup": "1 řádek",
"widgetSizeTwoRowsGroup": "2 řádky",
"customizeHide": "Skrýt {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Malý (1×1)",
"widgetSizeNarrow": "Úzký (2×1)",
"widgetSizeWide": "Široký (3×1)",
"widgetSizeFullRow": "Celý řádek (4×1)",
"widgetSizeTall": "Vysoký (1×2)",
"widgetSizeStandard": "Standardní (2×2)",
"widgetSizeLarge": "Velký (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,15 @@
"customizeExit": "Anpassung beenden",
"customizeSize": "Größe",
"customizeSizeFor": "Größe für {{widget}}",
"widgetSizeOneRowGroup": "1 Zeile",
"widgetSizeTwoRowsGroup": "2 Zeilen",
"customizeHide": "{{widget}} ausblenden",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Klein (1×1)",
"widgetSizeNarrow": "Schmal (2×1)",
"widgetSizeWide": "Breit (3×1)",
"widgetSizeFullRow": "Ganze Zeile (4×1)",
"widgetSizeTall": "Hoch (1×2)",
"widgetSizeStandard": "Standard (2×2)",
"widgetSizeLarge": "Groß (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/el.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Έξοδος από προσαρμογή",
"customizeSize": "Μέγεθος",
"customizeSizeFor": "Μέγεθος για {{widget}}",
"widgetSizeOneRowGroup": "1 σειρά",
"widgetSizeTwoRowsGroup": "2 σειρές",
"customizeHide": "Απόκρυψη {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Μικρό (1×1)",
"widgetSizeNarrow": "Στενό (2×1)",
"widgetSizeWide": "Πλατύ (3×1)",
"widgetSizeFullRow": "Πλήρης σειρά (4×1)",
"widgetSizeTall": "Ψηλό (1×2)",
"widgetSizeStandard": "Τυπικό (2×2)",
"widgetSizeLarge": "Μεγάλο (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Exit customization",
"customizeSize": "Size",
"customizeSizeFor": "Size for {{widget}}",
"widgetSizeOneRowGroup": "1 row",
"widgetSizeTwoRowsGroup": "2 rows",
"customizeHide": "Hide {{widget}}",
"customizeHiddenTitle": "Hidden widgets",
"customizeShow": "Show {{widget}}",
"widgetSizeTiny": "Small (1×1)",
"widgetSizeNarrow": "Narrow (2×1)",
"widgetSizeWide": "Wide (3×1)",
"widgetSizeFullRow": "Full row (4×1)",
"widgetSizeTall": "Tall (1×2)",
"widgetSizeStandard": "Standard (2×2)",
"widgetSizeLarge": "Large (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Salir de personalización",
"customizeSize": "Tamaño",
"customizeSizeFor": "Tamaño de {{widget}}",
"widgetSizeOneRowGroup": "1 fila",
"widgetSizeTwoRowsGroup": "2 filas",
"customizeHide": "Ocultar {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Pequeño (1×1)",
"widgetSizeNarrow": "Estrecho (2×1)",
"widgetSizeWide": "Ancho (3×1)",
"widgetSizeFullRow": "Fila completa (4×1)",
"widgetSizeTall": "Alto (1×2)",
"widgetSizeStandard": "Estándar (2×2)",
"widgetSizeLarge": "Grande (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/fa.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,15 @@
"customizeExit": "پایان سفارشی‌سازی",
"customizeSize": "اندازه",
"customizeSizeFor": "اندازه برای {{widget}}",
"widgetSizeOneRowGroup": "۱ ردیف",
"widgetSizeTwoRowsGroup": "۲ ردیف",
"customizeHide": "پنهان کردن {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "کوچک (۱×۱)",
"widgetSizeNarrow": "باریک (۲×۱)",
"widgetSizeWide": "عریض (۳×۱)",
"widgetSizeFullRow": "ردیف کامل (۴×۱)",
"widgetSizeTall": "بلند (1×2)",
"widgetSizeStandard": "استاندارد (۲×۲)",
"widgetSizeLarge": "بزرگ (۳×۲)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Quitter la personnalisation",
"customizeSize": "Taille",
"customizeSizeFor": "Taille de {{widget}}",
"widgetSizeOneRowGroup": "1 ligne",
"widgetSizeTwoRowsGroup": "2 lignes",
"customizeHide": "Masquer {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Petit (1×1)",
"widgetSizeNarrow": "Étroit (2×1)",
"widgetSizeWide": "Large (3×1)",
"widgetSizeFullRow": "Ligne complète (4×1)",
"widgetSizeTall": "Haut (1×2)",
"widgetSizeStandard": "Standard (2×2)",
"widgetSizeLarge": "Grand (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "अनुकूलन से बाहर निकलें",
"customizeSize": "आकार",
"customizeSizeFor": "{{widget}} का आकार",
"widgetSizeOneRowGroup": "1 पंक्ति",
"widgetSizeTwoRowsGroup": "2 पंक्तियाँ",
"customizeHide": "{{widget}} छिपाएँ",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "छोटा (1×1)",
"widgetSizeNarrow": "संकरा (2×1)",
"widgetSizeWide": "चौड़ा (3×1)",
"widgetSizeFullRow": "पूरी पंक्ति (4×1)",
"widgetSizeTall": "लंबा (1×2)",
"widgetSizeStandard": "मानक (2×2)",
"widgetSizeLarge": "बड़ा (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Kilépés a testreszabásból",
"customizeSize": "Méret",
"customizeSizeFor": "Méret {{widget}} számára",
"widgetSizeOneRowGroup": "1 sor",
"widgetSizeTwoRowsGroup": "2 sor",
"customizeHide": "Elrejtés {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Kicsi (1×1)",
"widgetSizeNarrow": "Keskeny (2×1)",
"widgetSizeWide": "Széles (3×1)",
"widgetSizeFullRow": "Teljes sor (4×1)",
"widgetSizeTall": "Magas (1×2)",
"widgetSizeStandard": "Normál (2×2)",
"widgetSizeLarge": "Nagy (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,15 @@
"customizeExit": "Selesai menyesuaikan",
"customizeSize": "Ukuran",
"customizeSizeFor": "Ukuran untuk {{widget}}",
"widgetSizeOneRowGroup": "1 baris",
"widgetSizeTwoRowsGroup": "2 baris",
"customizeHide": "Sembunyikan {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Kecil (1×1)",
"widgetSizeNarrow": "Sempit (2×1)",
"widgetSizeWide": "Lebar (3×1)",
"widgetSizeFullRow": "Baris penuh (4×1)",
"widgetSizeTall": "Tinggi (1×2)",
"widgetSizeStandard": "Standar (2×2)",
"widgetSizeLarge": "Besar (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Esci dalla personalizzazione",
"customizeSize": "Dimensione",
"customizeSizeFor": "Dimensione di {{widget}}",
"widgetSizeOneRowGroup": "1 riga",
"widgetSizeTwoRowsGroup": "2 righe",
"customizeHide": "Nascondi {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Piccolo (1×1)",
"widgetSizeNarrow": "Stretto (2×1)",
"widgetSizeWide": "Ampio (3×1)",
"widgetSizeFullRow": "Riga intera (4×1)",
"widgetSizeTall": "Alto (1×2)",
"widgetSizeStandard": "Standard (2×2)",
"widgetSizeLarge": "Grande (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "カスタマイズを終了",
"customizeSize": "サイズ",
"customizeSizeFor": "{{widget}} のサイズ",
"widgetSizeOneRowGroup": "1行",
"widgetSizeTwoRowsGroup": "2行",
"customizeHide": "{{widget}} を非表示",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "小 (1×1)",
"widgetSizeNarrow": "縦長 (2×1)",
"widgetSizeWide": "ワイド (3×1)",
"widgetSizeFullRow": "行全体 (4×1)",
"widgetSizeTall": "縦長 (1×2)",
"widgetSizeStandard": "標準 (2×2)",
"widgetSizeLarge": "大 (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,15 @@
"customizeExit": "맞춤 설정 종료",
"customizeSize": "크기",
"customizeSizeFor": "{{widget}} 크기",
"widgetSizeOneRowGroup": "1행",
"widgetSizeTwoRowsGroup": "2행",
"customizeHide": "{{widget}} 숨기기",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "작게 (1×1)",
"widgetSizeNarrow": "좁게 (2×1)",
"widgetSizeWide": "넓게 (3×1)",
"widgetSizeFullRow": "전체 행 (4×1)",
"widgetSizeTall": "세로형 (1×2)",
"widgetSizeStandard": "표준 (2×2)",
"widgetSizeLarge": "크게 (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Aanpassing beëindigen",
"customizeSize": "Grootte",
"customizeSizeFor": "Grootte voor {{widget}}",
"widgetSizeOneRowGroup": "1 rij",
"widgetSizeTwoRowsGroup": "2 rijen",
"customizeHide": "{{widget}} verbergen",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Klein (1×1)",
"widgetSizeNarrow": "Smal (2×1)",
"widgetSizeWide": "Breed (3×1)",
"widgetSizeFullRow": "Volledige rij (4×1)",
"widgetSizeTall": "Hoog (1×2)",
"widgetSizeStandard": "Standaard (2×2)",
"widgetSizeLarge": "Groot (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,15 @@
"customizeExit": "Zakończ dostosowywanie",
"customizeSize": "Rozmiar",
"customizeSizeFor": "Rozmiar dla {{widget}}",
"widgetSizeOneRowGroup": "1 wiersz",
"widgetSizeTwoRowsGroup": "2 wiersze",
"customizeHide": "Ukryj {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Mały (1×1)",
"widgetSizeNarrow": "Wąski (2×1)",
"widgetSizeWide": "Szeroki (3×1)",
"widgetSizeFullRow": "Cały wiersz (4×1)",
"widgetSizeTall": "Wysoki (1×2)",
"widgetSizeStandard": "Standardowy (2×2)",
"widgetSizeLarge": "Duży (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Sair da personalização",
"customizeSize": "Tamanho",
"customizeSizeFor": "Tamanho de {{widget}}",
"widgetSizeOneRowGroup": "1 linha",
"widgetSizeTwoRowsGroup": "2 linhas",
"customizeHide": "Ocultar {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Pequeno (1×1)",
"widgetSizeNarrow": "Estreito (2×1)",
"widgetSizeWide": "Largo (3×1)",
"widgetSizeFullRow": "Linha completa (4×1)",
"widgetSizeTall": "Alto (1×2)",
"widgetSizeStandard": "Padrão (2×2)",
"widgetSizeLarge": "Grande (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Выйти из настройки",
"customizeSize": "Размер",
"customizeSizeFor": "Размер для {{widget}}",
"widgetSizeOneRowGroup": "1 строка",
"widgetSizeTwoRowsGroup": "2 строки",
"customizeHide": "Скрыть {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Маленький (1×1)",
"widgetSizeNarrow": "Узкий (2×1)",
"widgetSizeWide": "Широкий (3×1)",
"widgetSizeFullRow": "На всю строку (4×1)",
"widgetSizeTall": "Высокий (1×2)",
"widgetSizeStandard": "Стандартный (2×2)",
"widgetSizeLarge": "Большой (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/sv.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Avsluta anpassning",
"customizeSize": "Storlek",
"customizeSizeFor": "Storlek för {{widget}}",
"widgetSizeOneRowGroup": "1 rad",
"widgetSizeTwoRowsGroup": "2 rader",
"customizeHide": "Dölj {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Liten (1×1)",
"widgetSizeNarrow": "Smal (2×1)",
"widgetSizeWide": "Bred (3×1)",
"widgetSizeFullRow": "Hel rad (4×1)",
"widgetSizeTall": "Hög (1×2)",
"widgetSizeStandard": "Standard (2×2)",
"widgetSizeLarge": "Stor (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/tr.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Özelleştirmeden çık",
"customizeSize": "Boyut",
"customizeSizeFor": "{{widget}} boyutu",
"widgetSizeOneRowGroup": "1 satır",
"widgetSizeTwoRowsGroup": "2 satır",
"customizeHide": "{{widget}} gizle",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Küçük (1×1)",
"widgetSizeNarrow": "Dar (2×1)",
"widgetSizeWide": "Geniş (3×1)",
"widgetSizeFullRow": "Tam satır (4×1)",
"widgetSizeTall": "Yüksek (1×2)",
"widgetSizeStandard": "Standart (2×2)",
"widgetSizeLarge": "Büyük (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/uk.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Вийти з налаштування",
"customizeSize": "Розмір",
"customizeSizeFor": "Розмір для {{widget}}",
"widgetSizeOneRowGroup": "1 рядок",
"widgetSizeTwoRowsGroup": "2 рядки",
"customizeHide": "Приховати {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Маленький (1×1)",
"widgetSizeNarrow": "Вузький (2×1)",
"widgetSizeWide": "Широкий (3×1)",
"widgetSizeFullRow": "На весь рядок (4×1)",
"widgetSizeTall": "Високий (1×2)",
"widgetSizeStandard": "Стандартний (2×2)",
"widgetSizeLarge": "Великий (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/vi.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "Thoát tùy chỉnh",
"customizeSize": "Kích thước",
"customizeSizeFor": "Kích thước cho {{widget}}",
"widgetSizeOneRowGroup": "1 hàng",
"widgetSizeTwoRowsGroup": "2 hàng",
"customizeHide": "Ẩn {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "Nhỏ (1×1)",
"widgetSizeNarrow": "Hẹp (2×1)",
"widgetSizeWide": "Rộng (3×1)",
"widgetSizeFullRow": "Toàn hàng (4×1)",
"widgetSizeTall": "Cao (1×2)",
"widgetSizeStandard": "Tiêu chuẩn (2×2)",
"widgetSizeLarge": "Lớn (3×2)",
Expand Down
4 changes: 4 additions & 0 deletions public/locales/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,15 @@
"customizeExit": "退出自定义",
"customizeSize": "大小",
"customizeSizeFor": "{{widget}} 的大小",
"widgetSizeOneRowGroup": "1 行",
"widgetSizeTwoRowsGroup": "2 行",
"customizeHide": "隐藏 {{widget}}",
"customizeHiddenTitle": "Ausgeblendete Widgets",
"customizeShow": "{{widget}} einblenden",
"widgetSizeTiny": "小 (1×1)",
"widgetSizeNarrow": "窄 (2×1)",
"widgetSizeWide": "宽 (3×1)",
"widgetSizeFullRow": "整行 (4×1)",
"widgetSizeTall": "高 (1×2)",
"widgetSizeStandard": "标准 (2×2)",
"widgetSizeLarge": "大 (3×2)",
Expand Down
Loading
Loading