diff --git a/CHANGELOG.md b/CHANGELOG.md index d44465030..5764c2975 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,30 @@ ## [Unreleased] +## [1.22.1] — 2026-06-27 — Mobile and Coach polish + +A reliability and quality-of-life patch focused on the mobile interface and the Coach. + +### Added + +- Each lab biomarker shows a short description under its heading, the way Insights describes its metrics. +- Hover a Coach message for an action row: copy it, read it aloud, rate the reply, regenerate it, and see the time it was sent. + +### Changed + +- Read-aloud now selects a natural device voice instead of the default robotic one. +- The Coach prompt stays on one line and the conversation search field spans the full width. +- The settings and admin section navigation stays fixed while only the content scrolls, on both desktop and mobile. +- The admin "Module availability" section is now simply "Modules". + +### Fixed + +- The settings and admin side navigation no longer drifts while scrolling. +- Selecting a settings section on mobile no longer animates a scroll from the top of the page. +- The profile menu rows are evenly spaced, and the "More" menu labels are no longer clipped on narrow screens. +- Charts no longer crush the layout in landscape on small screens. +- Sleep insights no longer repeats the nightly average above its tiles. + ## [1.22.0] — 2026-06-27 — A Coach that speaks, remembers, and charts; richer narratives across the app A feature release. The Coach reads its replies aloud, can draw the metric it is discussing, remembers what you ask it to and resurfaces those reminders, and proposes checkups or measurement reminders you confirm inline. Insights and Coach assessments are rewritten for connected, motivating narratives instead of restated figures, and the daily read now folds in labs, preventive care, workouts, and glucose. Four additive migrations (`0195` hidden biomarkers, `0196` coach reminders, `0197` coach plan outcomes, `0198` AI settings); applied automatically on start — no operator action required. diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 7036a58a8..79e597122 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: HealthLog API - version: 1.22.0 + version: 1.22.1 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/messages/de.json b/messages/de.json index 8a3a5fb4c..523158b31 100644 --- a/messages/de.json +++ b/messages/de.json @@ -2094,12 +2094,15 @@ "send": "Senden", "stop": "Stopp", "thinking": "Denke nach…", - "composerPlaceholder": "Frag mich etwas zu deinen Daten…", + "composerPlaceholder": "Frag mich etwas …", "nudgeBubbleLabel": "Neue Nachricht vom Coach — Chat öffnen", "fabLabel": "Coach öffnen", "readAloud": "Vorlesen", "readAloudStop": "Vorlesen beenden", "messageTimeLabel": "Nachricht gesendet {time}", + "copyMessage": "Kopieren", + "copyMessageError": "Kopieren fehlgeschlagen", + "regenerate": "Erneut versuchen", "selfContextAdopt": { "offer": "Antwort in deine Selbstauskunft übernehmen?", "confirm": "Übernehmen", @@ -2614,8 +2617,6 @@ "title": "Schlaf", "description": "Phasen-Aufschlüsselung und nächtliche Dauer – gezogen aus Apple Health.", "headlineTitle": "Durchschnitt pro Nacht", - "headlineCaption": "Gemittelt über {count} Nächte – {suffix}", - "headlineCaptionSuffix": "pro Nacht", "compositionTitle": "Phasen-Verteilung", "compositionSubtitle": "Letzte {nights} Nächte", "compositionAriaLabel": "Schlafphasen-Verteilung über {nights} Nächte", @@ -5518,7 +5519,7 @@ "subtitle": "Version, Lizenz und Update-Status." }, "module-availability": { - "title": "Modulverfügbarkeit", + "title": "Module", "subtitle": "Module für jedes Konto auf diesem Server aktivieren oder deaktivieren." } }, @@ -6842,6 +6843,34 @@ "liver": "Leber", "electrolytes": "Elektrolyte", "bloodCount": "Blutbild" + }, + "desc": { + "total-cholesterol": "Gesamtmenge des im Blut transportierten Cholesterins, Summe aus LDL-, HDL- und weiteren Lipoproteinfraktionen.", + "ldl": "Cholesterin in Lipoproteinen geringer Dichte, der Anteil, der sich in den Arterienwänden ablagert.", + "hdl": "Cholesterin in Lipoproteinen hoher Dichte, die Cholesterin zurück zur Leber transportieren.", + "triglycerides": "Das wichtigste Blutfett, aus der Nahrung aufgenommen und in der Leber gebildet.", + "fasting-glucose": "Nüchtern gemessener Blutzucker, der die grundlegende Glukoseregulation widerspiegelt.", + "hba1c": "Anteil des an Glukose gebundenen Hämoglobins, Spiegel des Blutzuckers der letzten zwei bis drei Monate.", + "tsh": "Hypophysenhormon, das die Schilddrüse steuert; der wichtigste Suchtest der Schilddrüsenfunktion.", + "ft3": "Die freie, aktive Form des Trijodthyronins, des stärker wirksamen Schilddrüsenhormons.", + "ft4": "Die freie Form des Thyroxins, des Haupthormons, das die Schilddrüse ins Blut abgibt.", + "ferritin": "Das wichtigste Eisenspeicherprotein des Körpers, Maß für die Eisenreserven.", + "transferrin-saturation": "Anteil des Eisentransportproteins Transferrin, der aktuell Eisen trägt.", + "vitamin-d": "Zirkulierendes 25-Hydroxy-Vitamin-D, der Standardmarker für den Vitamin-D-Status.", + "vitamin-b12": "Vitamin, das für die Bildung roter Blutkörperchen und die Nervenfunktion notwendig ist.", + "folate": "B-Vitamin, das für die Bildung roter Blutkörperchen und die DNA-Synthese benötigt wird.", + "hs-crp": "Ein Leberprotein, das bei Entzündungen ansteigt, hochempfindlich gemessen.", + "creatinine": "Abbauprodukt der Muskulatur, das über die Nieren ausgeschieden wird; Maß der Nierenfunktion.", + "egfr": "Geschätzte Filtrationsrate der Nieren, aus dem Kreatinin berechnet.", + "alt": "Leberenzym, das bei Schädigung der Leberzellen ins Blut freigesetzt wird.", + "ast": "Enzym aus Leber und Muskulatur, das bei Schädigung dieser Gewebe ansteigt.", + "ggt": "Enzym aus Leber und Gallenwegen, das bei Gallenstau oder Alkoholbelastung ansteigt.", + "sodium": "Wichtigster Elektrolyt für den Flüssigkeitshaushalt und das Blutvolumen.", + "potassium": "Elektrolyt, der für die Nervenleitung und die Herzmuskelfunktion unentbehrlich ist.", + "hemoglobin": "Das sauerstofftransportierende Protein in den roten Blutkörperchen.", + "hematocrit": "Der Anteil der roten Blutkörperchen am Blutvolumen.", + "wbc": "Gesamtzahl der weißen Blutkörperchen, der zirkulierenden Abwehr des Immunsystems.", + "platelets": "Zellfragmente, die sich zusammenlagern und die Blutgerinnung bewirken." } }, "noteLoadFailed": "Notiz konnte nicht geladen werden; sie bleibt beim Speichern unverändert.", diff --git a/messages/en.json b/messages/en.json index 06b38c3e8..16ec52b02 100644 --- a/messages/en.json +++ b/messages/en.json @@ -2094,12 +2094,15 @@ "send": "Send", "stop": "Stop", "thinking": "Thinking…", - "composerPlaceholder": "Ask anything about your data…", + "composerPlaceholder": "Ask me anything …", "nudgeBubbleLabel": "New message from the Coach — open chat", "fabLabel": "Open the Coach", "readAloud": "Read aloud", "readAloudStop": "Stop reading", "messageTimeLabel": "Message sent {time}", + "copyMessage": "Copy", + "copyMessageError": "Could not copy", + "regenerate": "Try again", "selfContextAdopt": { "offer": "Add this answer to your self-context?", "confirm": "Add", @@ -2614,8 +2617,6 @@ "title": "Sleep", "description": "Stage breakdown and nightly duration, drawn from Apple Health.", "headlineTitle": "Average per night", - "headlineCaption": "Averaged across {count} nights — {suffix}", - "headlineCaptionSuffix": "per night", "compositionTitle": "Stage composition", "compositionSubtitle": "Last {nights} nights", "compositionAriaLabel": "Sleep stage composition over {nights} nights", @@ -5518,7 +5519,7 @@ "subtitle": "Version, license, and update status." }, "module-availability": { - "title": "Module availability", + "title": "Modules", "subtitle": "Turn modules on or off for every account on this server." } }, @@ -6842,6 +6843,34 @@ "liver": "Liver", "electrolytes": "Electrolytes", "bloodCount": "Blood count" + }, + "desc": { + "total-cholesterol": "Total amount of cholesterol carried in the blood, summing the LDL, HDL, and other lipoprotein fractions.", + "ldl": "Cholesterol carried by low-density lipoproteins, the fraction that deposits in artery walls.", + "hdl": "Cholesterol carried by high-density lipoproteins, which transport cholesterol back to the liver.", + "triglycerides": "The main fat circulating in the blood, drawn from diet and produced by the liver.", + "fasting-glucose": "Blood sugar measured after an overnight fast, reflecting baseline glucose regulation.", + "hba1c": "The share of haemoglobin bound to glucose, reflecting average blood sugar over the past two to three months.", + "tsh": "Pituitary hormone that signals the thyroid; the primary screen of thyroid function.", + "ft3": "The unbound, active form of triiodothyronine, the more potent thyroid hormone.", + "ft4": "The unbound form of thyroxine, the main hormone the thyroid releases into the blood.", + "ferritin": "The body's main iron-storage protein, reflecting total iron reserves.", + "transferrin-saturation": "Share of the iron-transport protein transferrin that is currently carrying iron.", + "vitamin-d": "Circulating 25-hydroxyvitamin D, the standard marker of vitamin D status.", + "vitamin-b12": "Vitamin essential for red blood cell formation and nerve function.", + "folate": "B-vitamin needed for red blood cell formation and DNA synthesis.", + "hs-crp": "A liver protein that rises with inflammation, measured at high sensitivity.", + "creatinine": "Muscle waste product cleared by the kidneys, used to gauge kidney function.", + "egfr": "Estimated rate at which the kidneys filter blood, derived from creatinine.", + "alt": "Liver enzyme released into the blood when liver cells are damaged.", + "ast": "Enzyme found in liver and muscle that rises when those tissues are injured.", + "ggt": "Liver and bile-duct enzyme that rises with bile-flow obstruction or alcohol exposure.", + "sodium": "Principal electrolyte governing the body's fluid balance and blood volume.", + "potassium": "Electrolyte essential for nerve signalling and heart-muscle function.", + "hemoglobin": "The oxygen-carrying protein in red blood cells.", + "hematocrit": "The fraction of blood volume made up of red blood cells.", + "wbc": "Total count of white blood cells, the immune system's circulating defence.", + "platelets": "Cell fragments that clump together to form blood clots." } }, "noteLoadFailed": "Note could not be loaded; it will be kept unchanged when you save.", diff --git a/messages/es.json b/messages/es.json index 0b49cd985..8bea74277 100644 --- a/messages/es.json +++ b/messages/es.json @@ -2094,12 +2094,15 @@ "send": "Enviar", "stop": "Detener", "thinking": "Pensando…", - "composerPlaceholder": "Pregúntame sobre tus datos…", + "composerPlaceholder": "Pregúntame algo …", "nudgeBubbleLabel": "Nuevo mensaje del coach — abrir el chat", "fabLabel": "Abrir el coach", "readAloud": "Leer en voz alta", "readAloudStop": "Detener lectura", "messageTimeLabel": "Mensaje enviado {time}", + "copyMessage": "Copiar", + "copyMessageError": "No se pudo copiar", + "regenerate": "Reintentar", "selfContextAdopt": { "offer": "¿Añadir esta respuesta a tu información personal?", "confirm": "Añadir", @@ -2614,8 +2617,6 @@ "title": "Sueño", "description": "Desglose por fases y duración nocturna, tomados de Apple Health.", "headlineTitle": "Media por noche", - "headlineCaption": "Promediado sobre {count} noches — {suffix}", - "headlineCaptionSuffix": "por noche", "compositionTitle": "Distribución de fases", "compositionSubtitle": "Últimas {nights} noches", "compositionAriaLabel": "Distribución de fases del sueño en {nights} noches", @@ -5518,7 +5519,7 @@ "subtitle": "Versión, licencia y estado de actualizaciones." }, "module-availability": { - "title": "Disponibilidad de módulos", + "title": "Módulos", "subtitle": "Activa o desactiva módulos para todas las cuentas de este servidor." } }, @@ -6842,6 +6843,34 @@ "liver": "Hígado", "electrolytes": "Electrolitos", "bloodCount": "Hemograma" + }, + "desc": { + "total-cholesterol": "Cantidad total de colesterol transportado en la sangre, suma de las fracciones LDL, HDL y otras lipoproteínas.", + "ldl": "Colesterol transportado por lipoproteínas de baja densidad, la fracción que se deposita en las paredes arteriales.", + "hdl": "Colesterol transportado por lipoproteínas de alta densidad, que lo devuelven al hígado.", + "triglycerides": "La principal grasa que circula en la sangre, procedente de la dieta y producida por el hígado.", + "fasting-glucose": "Azúcar en sangre medido en ayunas, refleja la regulación basal de la glucosa.", + "hba1c": "Proporción de hemoglobina unida a glucosa, refleja el azúcar en sangre de los últimos dos o tres meses.", + "tsh": "Hormona hipofisaria que regula la tiroides; la prueba principal de la función tiroidea.", + "ft3": "La forma libre y activa de la triyodotironina, la hormona tiroidea más potente.", + "ft4": "La forma libre de la tiroxina, la principal hormona que la tiroides libera a la sangre.", + "ferritin": "La principal proteína de almacenamiento de hierro del cuerpo, refleja las reservas de hierro.", + "transferrin-saturation": "Proporción de la proteína transportadora transferrina que lleva hierro en ese momento.", + "vitamin-d": "25-hidroxivitamina D circulante, el marcador estándar del estado de vitamina D.", + "vitamin-b12": "Vitamina esencial para la formación de glóbulos rojos y la función nerviosa.", + "folate": "Vitamina B necesaria para la formación de glóbulos rojos y la síntesis de ADN.", + "hs-crp": "Una proteína hepática que aumenta con la inflamación, medida con alta sensibilidad.", + "creatinine": "Producto de desecho muscular eliminado por los riñones, usado para evaluar la función renal.", + "egfr": "Tasa estimada de filtración de los riñones, calculada a partir de la creatinina.", + "alt": "Enzima hepática liberada a la sangre cuando se dañan las células del hígado.", + "ast": "Enzima del hígado y el músculo que aumenta cuando esos tejidos se lesionan.", + "ggt": "Enzima del hígado y las vías biliares que aumenta con la obstrucción biliar o el alcohol.", + "sodium": "Principal electrolito que regula el equilibrio de líquidos y el volumen sanguíneo.", + "potassium": "Electrolito esencial para la transmisión nerviosa y la función del músculo cardíaco.", + "hemoglobin": "La proteína de los glóbulos rojos que transporta el oxígeno.", + "hematocrit": "La fracción del volumen sanguíneo formada por glóbulos rojos.", + "wbc": "Recuento total de glóbulos blancos, la defensa circulante del sistema inmunitario.", + "platelets": "Fragmentos celulares que se agregan para formar coágulos sanguíneos." } }, "noteLoadFailed": "No se pudo cargar la nota; se mantendrá sin cambios al guardar.", diff --git a/messages/fr.json b/messages/fr.json index 971a1bbd8..d943773ff 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -2094,12 +2094,15 @@ "send": "Envoyer", "stop": "Arrêter", "thinking": "Réflexion en cours…", - "composerPlaceholder": "Pose-moi une question sur tes données…", + "composerPlaceholder": "Pose ta question …", "nudgeBubbleLabel": "Nouveau message du coach — ouvrir le chat", "fabLabel": "Ouvrir le coach", "readAloud": "Lire à voix haute", "readAloudStop": "Arrêter la lecture", "messageTimeLabel": "Message envoyé {time}", + "copyMessage": "Copier", + "copyMessageError": "Copie impossible", + "regenerate": "Réessayer", "selfContextAdopt": { "offer": "Ajouter cette réponse à vos informations personnelles ?", "confirm": "Ajouter", @@ -2614,8 +2617,6 @@ "title": "Sommeil", "description": "Répartition des phases et durée nocturne, issues d’Apple Health.", "headlineTitle": "Moyenne par nuit", - "headlineCaption": "Moyenne sur {count} nuits — {suffix}", - "headlineCaptionSuffix": "par nuit", "compositionTitle": "Répartition des phases", "compositionSubtitle": "{nights} dernières nuits", "compositionAriaLabel": "Répartition des phases de sommeil sur {nights} nuits", @@ -5518,7 +5519,7 @@ "subtitle": "Version, licence et état des mises à jour." }, "module-availability": { - "title": "Disponibilité des modules", + "title": "Modules", "subtitle": "Activez ou désactivez les modules pour tous les comptes de ce serveur." } }, @@ -6842,6 +6843,34 @@ "liver": "Foie", "electrolytes": "Électrolytes", "bloodCount": "Numération sanguine" + }, + "desc": { + "total-cholesterol": "Quantité totale de cholestérol transporté dans le sang, somme des fractions LDL, HDL et autres lipoprotéines.", + "ldl": "Cholestérol transporté par les lipoprotéines de basse densité, la fraction qui se dépose dans les parois artérielles.", + "hdl": "Cholestérol transporté par les lipoprotéines de haute densité, qui le ramènent vers le foie.", + "triglycerides": "La principale graisse circulant dans le sang, issue de l'alimentation et produite par le foie.", + "fasting-glucose": "Glycémie mesurée à jeun, reflétant la régulation de base du glucose.", + "hba1c": "Part de l'hémoglobine liée au glucose, reflet de la glycémie des deux à trois derniers mois.", + "tsh": "Hormone hypophysaire qui régule la thyroïde ; le principal test de la fonction thyroïdienne.", + "ft3": "La forme libre et active de la triiodothyronine, l'hormone thyroïdienne la plus puissante.", + "ft4": "La forme libre de la thyroxine, la principale hormone que la thyroïde libère dans le sang.", + "ferritin": "La principale protéine de stockage du fer, reflet des réserves en fer.", + "transferrin-saturation": "Part de la transferrine, protéine de transport du fer, qui porte du fer à un instant donné.", + "vitamin-d": "25-hydroxyvitamine D circulante, le marqueur de référence du statut en vitamine D.", + "vitamin-b12": "Vitamine essentielle à la formation des globules rouges et à la fonction nerveuse.", + "folate": "Vitamine B nécessaire à la formation des globules rouges et à la synthèse de l'ADN.", + "hs-crp": "Une protéine hépatique qui s'élève avec l'inflammation, mesurée à haute sensibilité.", + "creatinine": "Déchet musculaire éliminé par les reins, utilisé pour évaluer la fonction rénale.", + "egfr": "Débit de filtration estimé des reins, calculé à partir de la créatinine.", + "alt": "Enzyme hépatique libérée dans le sang lorsque les cellules du foie sont endommagées.", + "ast": "Enzyme du foie et du muscle qui s'élève lorsque ces tissus sont lésés.", + "ggt": "Enzyme du foie et des voies biliaires qui s'élève en cas d'obstruction biliaire ou d'alcool.", + "sodium": "Principal électrolyte régulant l'équilibre hydrique et le volume sanguin.", + "potassium": "Électrolyte essentiel à la conduction nerveuse et à la fonction du muscle cardiaque.", + "hemoglobin": "La protéine des globules rouges qui transporte l'oxygène.", + "hematocrit": "La fraction du volume sanguin constituée de globules rouges.", + "wbc": "Nombre total de globules blancs, la défense circulante du système immunitaire.", + "platelets": "Fragments cellulaires qui s'agrègent pour former des caillots sanguins." } }, "noteLoadFailed": "La note n’a pas pu être chargée ; elle restera inchangée à l’enregistrement.", diff --git a/messages/it.json b/messages/it.json index 4b762cd6b..38c204fbb 100644 --- a/messages/it.json +++ b/messages/it.json @@ -2094,12 +2094,15 @@ "send": "Invia", "stop": "Interrompi", "thinking": "Sto pensando…", - "composerPlaceholder": "Chiedimi qualcosa sui tuoi dati…", + "composerPlaceholder": "Chiedimi pure …", "nudgeBubbleLabel": "Nuovo messaggio dal coach — apri la chat", "fabLabel": "Apri il coach", "readAloud": "Leggi ad alta voce", "readAloudStop": "Interrompi lettura", "messageTimeLabel": "Messaggio inviato {time}", + "copyMessage": "Copia", + "copyMessageError": "Copia non riuscita", + "regenerate": "Riprova", "selfContextAdopt": { "offer": "Aggiungere questa risposta alle tue informazioni personali?", "confirm": "Aggiungi", @@ -2614,8 +2617,6 @@ "title": "Sonno", "description": "Suddivisione per fasi e durata notturna, da Apple Health.", "headlineTitle": "Media per notte", - "headlineCaption": "Mediato su {count} notti — {suffix}", - "headlineCaptionSuffix": "per notte", "compositionTitle": "Distribuzione delle fasi", "compositionSubtitle": "Ultime {nights} notti", "compositionAriaLabel": "Distribuzione delle fasi del sonno su {nights} notti", @@ -5518,7 +5519,7 @@ "subtitle": "Versione, licenza e stato degli aggiornamenti." }, "module-availability": { - "title": "Disponibilità dei moduli", + "title": "Moduli", "subtitle": "Attiva o disattiva i moduli per tutti gli account su questo server." } }, @@ -6842,6 +6843,34 @@ "liver": "Fegato", "electrolytes": "Elettroliti", "bloodCount": "Emocromo" + }, + "desc": { + "total-cholesterol": "Quantità totale di colesterolo trasportato nel sangue, somma delle frazioni LDL, HDL e altre lipoproteine.", + "ldl": "Colesterolo trasportato dalle lipoproteine a bassa densità, la frazione che si deposita nelle pareti arteriose.", + "hdl": "Colesterolo trasportato dalle lipoproteine ad alta densità, che lo riportano al fegato.", + "triglycerides": "Il principale grasso circolante nel sangue, assunto con la dieta e prodotto dal fegato.", + "fasting-glucose": "Glicemia misurata a digiuno, riflette la regolazione di base del glucosio.", + "hba1c": "Quota di emoglobina legata al glucosio, riflette la glicemia degli ultimi due o tre mesi.", + "tsh": "Ormone ipofisario che regola la tiroide; il principale test della funzione tiroidea.", + "ft3": "La forma libera e attiva della triiodotironina, l'ormone tiroideo più potente.", + "ft4": "La forma libera della tiroxina, il principale ormone che la tiroide rilascia nel sangue.", + "ferritin": "La principale proteina di deposito del ferro, riflette le riserve di ferro.", + "transferrin-saturation": "Quota della transferrina, proteina di trasporto del ferro, che trasporta ferro in quel momento.", + "vitamin-d": "25-idrossivitamina D circolante, il marcatore standard dello stato di vitamina D.", + "vitamin-b12": "Vitamina essenziale per la formazione dei globuli rossi e la funzione nervosa.", + "folate": "Vitamina B necessaria per la formazione dei globuli rossi e la sintesi del DNA.", + "hs-crp": "Una proteina epatica che aumenta con l'infiammazione, misurata ad alta sensibilità.", + "creatinine": "Prodotto di scarto muscolare eliminato dai reni, usato per valutare la funzione renale.", + "egfr": "Velocità di filtrazione stimata dei reni, calcolata a partire dalla creatinina.", + "alt": "Enzima epatico rilasciato nel sangue quando le cellule del fegato sono danneggiate.", + "ast": "Enzima di fegato e muscolo che aumenta quando questi tessuti sono lesi.", + "ggt": "Enzima di fegato e vie biliari che aumenta con l'ostruzione biliare o l'alcol.", + "sodium": "Principale elettrolita che regola l'equilibrio dei liquidi e il volume del sangue.", + "potassium": "Elettrolita essenziale per la conduzione nervosa e la funzione del muscolo cardiaco.", + "hemoglobin": "La proteina dei globuli rossi che trasporta l'ossigeno.", + "hematocrit": "La frazione del volume sanguigno costituita da globuli rossi.", + "wbc": "Conteggio totale dei globuli bianchi, la difesa circolante del sistema immunitario.", + "platelets": "Frammenti cellulari che si aggregano per formare coaguli di sangue." } }, "noteLoadFailed": "Impossibile caricare la nota; resterà invariata al salvataggio.", diff --git a/messages/pl.json b/messages/pl.json index 664af0d8d..566625aa1 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -2094,12 +2094,15 @@ "send": "Wyślij", "stop": "Zatrzymaj", "thinking": "Myślę…", - "composerPlaceholder": "Zapytaj o swoje dane…", + "composerPlaceholder": "Zapytaj mnie …", "nudgeBubbleLabel": "Nowa wiadomość od trenera — otwórz czat", "fabLabel": "Otwórz trenera", "readAloud": "Czytaj na głos", "readAloudStop": "Zatrzymaj czytanie", "messageTimeLabel": "Wiadomość wysłana {time}", + "copyMessage": "Kopiuj", + "copyMessageError": "Nie udało się skopiować", + "regenerate": "Spróbuj ponownie", "selfContextAdopt": { "offer": "Dodać tę odpowiedź do Twoich informacji o sobie?", "confirm": "Dodaj", @@ -2614,8 +2617,6 @@ "title": "Sen", "description": "Podział na fazy i nocna długość snu, dane z Apple Health.", "headlineTitle": "Średnia na noc", - "headlineCaption": "Uśrednione z {count} nocy — {suffix}", - "headlineCaptionSuffix": "na noc", "compositionTitle": "Rozkład faz", "compositionSubtitle": "Ostatnie {nights} nocy", "compositionAriaLabel": "Rozkład faz snu w {nights} nocach", @@ -5518,7 +5519,7 @@ "subtitle": "Wersja, licencja i stan aktualizacji." }, "module-availability": { - "title": "Dostępność modułów", + "title": "Moduły", "subtitle": "Włącz lub wyłącz moduły dla wszystkich kont na tym serwerze." } }, @@ -6842,6 +6843,34 @@ "liver": "Wątroba", "electrolytes": "Elektrolity", "bloodCount": "Morfologia krwi" + }, + "desc": { + "total-cholesterol": "Całkowita ilość cholesterolu transportowanego we krwi, suma frakcji LDL, HDL i pozostałych lipoprotein.", + "ldl": "Cholesterol transportowany przez lipoproteiny o niskiej gęstości, frakcja odkładająca się w ścianach tętnic.", + "hdl": "Cholesterol transportowany przez lipoproteiny o wysokiej gęstości, które odprowadzają go do wątroby.", + "triglycerides": "Główny tłuszcz krążący we krwi, pochodzący z diety i wytwarzany przez wątrobę.", + "fasting-glucose": "Poziom cukru we krwi mierzony na czczo, odzwierciedla podstawową regulację glukozy.", + "hba1c": "Odsetek hemoglobiny związanej z glukozą, odzwierciedla poziom cukru z ostatnich dwóch–trzech miesięcy.", + "tsh": "Hormon przysadki sterujący tarczycą; podstawowy test czynności tarczycy.", + "ft3": "Wolna, aktywna postać trijodotyroniny, silniejszego hormonu tarczycy.", + "ft4": "Wolna postać tyroksyny, głównego hormonu uwalnianego przez tarczycę do krwi.", + "ferritin": "Główne białko magazynujące żelazo, odzwierciedla zapasy żelaza w organizmie.", + "transferrin-saturation": "Odsetek transferyny, białka transportującego żelazo, które w danym momencie przenosi żelazo.", + "vitamin-d": "Krążąca 25-hydroksywitamina D, standardowy wskaźnik stanu witaminy D.", + "vitamin-b12": "Witamina niezbędna do tworzenia czerwonych krwinek i funkcji nerwów.", + "folate": "Witamina z grupy B potrzebna do tworzenia czerwonych krwinek i syntezy DNA.", + "hs-crp": "Białko wątrobowe rosnące w stanach zapalnych, mierzone z wysoką czułością.", + "creatinine": "Produkt przemiany mięśni usuwany przez nerki, służy do oceny czynności nerek.", + "egfr": "Szacowany współczynnik filtracji nerek, obliczany na podstawie kreatyniny.", + "alt": "Enzym wątrobowy uwalniany do krwi przy uszkodzeniu komórek wątroby.", + "ast": "Enzym wątroby i mięśni rosnący przy uszkodzeniu tych tkanek.", + "ggt": "Enzym wątroby i dróg żółciowych rosnący przy zastoju żółci lub spożyciu alkoholu.", + "sodium": "Główny elektrolit regulujący gospodarkę wodną i objętość krwi.", + "potassium": "Elektrolit niezbędny do przewodzenia nerwowego i pracy mięśnia sercowego.", + "hemoglobin": "Białko czerwonych krwinek transportujące tlen.", + "hematocrit": "Udział czerwonych krwinek w objętości krwi.", + "wbc": "Całkowita liczba białych krwinek, krążącej obrony układu odpornościowego.", + "platelets": "Fragmenty komórkowe, które zlepiają się, tworząc skrzepy krwi." } }, "noteLoadFailed": "Nie udało się wczytać notatki; pozostanie niezmieniona po zapisaniu.", diff --git a/package.json b/package.json index 9c5bb7c9b..29b6f8321 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.22.0", + "version": "1.22.1", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "PolyForm-Noncommercial-1.0.0", "homepage": "https://healthlog.dev", diff --git a/src/components/admin/admin-shell.tsx b/src/components/admin/admin-shell.tsx index 39f94bb37..46e52c8d6 100644 --- a/src/components/admin/admin-shell.tsx +++ b/src/components/admin/admin-shell.tsx @@ -37,7 +37,6 @@ import { } from "lucide-react"; import { cn } from "@/lib/utils"; -import { scrollBehaviorForUser } from "@/lib/motion"; import { useAuth } from "@/hooks/use-auth"; import { useTranslations } from "@/lib/i18n/context"; import { isAdminSectionSlug, type AdminSectionSlug } from "./section-slugs"; @@ -188,16 +187,15 @@ export function AdminShell({ active, children }: AdminShellProps) { '[aria-current="page"]', ); if (!activeChip) return; - activeChip.scrollIntoView({ - block: "nearest", - // v1.4.36 W4b — `inline: "start"` pins the active chip to the - // left edge of the scroller. `inline: "center"` over-scrolled - // and the first one or two chips were unreachable on narrow - // viewports. - inline: "start", - // v1.4.43 W5-H5 — respect `prefers-reduced-motion`. - behavior: scrollBehaviorForUser(), - }); + // Adjust only the strip's own horizontal offset, instantly. The old + // `scrollIntoView` walked every scrollable ancestor and could nudge the + // document vertically, and a smooth behaviour animated the strip from a + // reset `scrollLeft: 0` to the target on every tap — an unwanted "scroll + // from the start" sweep. `scrollTo({ left, behavior: "auto" })` confines + // the motion to the strip's horizontal axis and jumps without animation. + const maxScroll = strip.scrollWidth - strip.clientWidth; + const target = Math.max(0, Math.min(activeChip.offsetLeft, maxScroll)); + strip.scrollTo({ left: target, behavior: "auto" }); }, [activeSlug]); // The section bodies are already role-gated, but the shell frame @@ -253,7 +251,7 @@ export function AdminShell({ active, children }: AdminShellProps) {