v1.7.5: UI-Verbesserungen Listenansicht und Zeiteingabe

- Listview: Toolbar-Rahmen #407BFF, Fokus 2px ring-inset #235CC8
- Listview: Pfeil-Buttons Monatsauswahl in #85B7D7
- Listview: Klimawerte werden bei allen-0 ausgeblendet
- Zeiteingabe: nur Stunden + Tab setzt Minuten automatisch auf :00

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 22:21:05 +02:00
parent 9e2f430d4a
commit b588a70ecd
4 changed files with 12 additions and 11 deletions
+6 -6
View File
@@ -123,19 +123,19 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 10, co
> >
<button <button
onClick={() => setMonth((m) => prevMonth(m))} onClick={() => setMonth((m) => prevMonth(m))}
className="px-2 py-1 text-sm rounded-lg bg-gray-200 hover:bg-gray-300" className="px-2 py-1 text-sm rounded-lg bg-[#85B7D7] hover:bg-[#6a9fc5]"
></button> ></button>
<input <input
type="month" type="month"
value={month} value={month}
max={currentMonth()} max={currentMonth()}
onChange={(e) => setMonth(e.target.value > currentMonth() ? currentMonth() : e.target.value)} onChange={(e) => setMonth(e.target.value > currentMonth() ? currentMonth() : e.target.value)}
className="border border-gray-300 rounded-lg px-2 py-1 text-sm" className="border border-[#407BFF] rounded-lg px-2 py-1 text-sm focus:outline-none focus:ring-2 focus:ring-inset focus:ring-[#235CC8]"
/> />
<button <button
onClick={() => setMonth((m) => nextMonth(m))} onClick={() => setMonth((m) => nextMonth(m))}
disabled={month >= currentMonth()} disabled={month >= currentMonth()}
className="px-2 py-1 text-sm rounded-lg bg-gray-200 hover:bg-gray-300 disabled:opacity-40 disabled:cursor-not-allowed" className="px-2 py-1 text-sm rounded-lg bg-[#85B7D7] hover:bg-[#6a9fc5] disabled:opacity-40 disabled:cursor-not-allowed"
></button> ></button>
{month !== currentMonth() && ( {month !== currentMonth() && (
<button <button
@@ -150,7 +150,7 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 10, co
value={search} value={search}
onChange={(e) => setSearch(e.target.value)} onChange={(e) => setSearch(e.target.value)}
placeholder="Suche in Bemerkungen, Objekte, BEOs…" placeholder="Suche in Bemerkungen, Objekte, BEOs…"
className="w-full px-3 py-1.5 pr-8 border border-gray-300 rounded-lg text-sm focus:outline-none focus:border-blue-500" className="w-full px-3 py-1.5 pr-8 border border-[#407BFF] rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-inset focus:ring-[#235CC8]"
/> />
{search ? ( {search ? (
<button <button
@@ -164,7 +164,7 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 10, co
</div> </div>
<button <button
onClick={handlePrint} onClick={handlePrint}
className="text-sm px-3 py-1.5 bg-gray-200 hover:bg-gray-300 text-gray-700 rounded-lg shrink-0" className="text-sm px-3 py-1.5 bg-[#85B7D7] hover:bg-[#6a9fc5] text-black rounded-lg shrink-0"
>🖨 Drucken</button> >🖨 Drucken</button>
</div> </div>
); );
@@ -260,7 +260,7 @@ export default function LogbuchList({ kuppel, refreshKey, onEdit, limit = 10, co
{!compact && <td className={cell}>{e.Bemerkungen || ''}</td>} {!compact && <td className={cell}>{e.Bemerkungen || ''}</td>}
{!compact && ( {!compact && (
<td className={cell}> <td className={cell}>
{e.WetterTemp !== null && ( {e.WetterTemp !== null && !(parseFloat(String(e.WetterTemp)) === 0 && parseFloat(String(e.WetterFeuchte ?? 0)) === 0 && parseFloat(String(e.WetterDruck ?? 0)) === 0) && (
<div className="text-xs whitespace-nowrap"> <div className="text-xs whitespace-nowrap">
<div>{e.WetterTemp} °C</div> <div>{e.WetterTemp} °C</div>
<div>{Math.round(e.WetterFeuchte ?? 0)} %</div> <div>{Math.round(e.WetterFeuchte ?? 0)} %</div>
+3 -2
View File
@@ -53,8 +53,9 @@ export default function TimeInput({ value, onChange, className = '', clearOnFocu
setError(false); setError(false);
return; return;
} }
if (isValid(local)) { const expanded = /^\d{1,2}:?$/.test(local) ? local.replace(/:$/, '') + ':00' : local;
const norm = normalize(local); if (isValid(expanded)) {
const norm = normalize(expanded);
setLocal(norm); setLocal(norm);
setError(false); setError(false);
onChange(norm); onChange(norm);
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "logbuch", "name": "logbuch",
"version": "1.7.4", "version": "1.7.5",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "logbuch", "name": "logbuch",
"version": "1.7.4", "version": "1.7.5",
"dependencies": { "dependencies": {
"bcryptjs": "^3.0.3", "bcryptjs": "^3.0.3",
"jose": "^6.2.2", "jose": "^6.2.2",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "logbuch", "name": "logbuch",
"version": "1.7.4", "version": "1.7.5",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",