refactor(calendar): stack layout, wider grid, fixed cell height
Deploy / verify (push) Successful in 53s
Deploy / deploy (push) Successful in 57s

- Calendar widget stays stacked (calendar above events list)
- Grid widens to max-w-2xl with fixed h-10 cells (no aspect-square height growth)
- Gap between cells: 0.5 → 1.5
- Button system extracted to shared btn-* utility classes in app.css
- Replaced Google Calendar link + Google Maps with OSM
- Removed google icon from iconify subset

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-05-08 09:56:40 +02:00
parent b491e3767a
commit 8db68e073c
5 changed files with 162 additions and 188 deletions
+2 -20
View File
@@ -122,25 +122,7 @@ export function downloadICS(item: CalendarItemICS, filename: string): void {
URL.revokeObjectURL(url);
}
/** Google-Calendar's render-template URL. Times must be UTC, in
* YYYYMMDDTHHMMSSZ format, joined by `/`. */
export function googleCalUrl(item: CalendarItemICS): string {
const start = item.start;
const end =
item.end ?? new Date(start.getTime() + 60 * 60 * 1000);
const dates = `${fmtICSDate(start)}/${fmtICSDate(end)}`;
const params = new URLSearchParams({
action: "TEMPLATE",
text: item.title,
dates,
});
if (item.description) params.set("details", item.description);
if (item.location) params.set("location", item.location);
return `https://calendar.google.com/calendar/render?${params.toString()}`;
}
/** Generic maps URL — Google Maps search by query. Safe with addresses
* or place names. */
/** OpenStreetMap search URL for an address or place name. */
export function mapsUrl(location: string): string {
return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(location)}`;
return `https://www.openstreetmap.org/search?query=${encodeURIComponent(location)}`;
}