mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-13 14:32:03 +00:00
From 1280 px the day and, on /coach, the conversations each keep a narrow strip at the right edge, open or not. A click on the strip opens its panel left of the strips and a second click closes it; the strip never moves. Strips start below the top bar's band, side by side, conversations first. Below 1600 px one panel is open at a time. The day slides like the conversations (width, 200 ms, none under reduced motion), stays open through a page change instead of folding and reopening, and does not slide in on arrival. Its content loads when a day first opens, so the scores, sections and calendar leave the shell's first load: every watched route falls back under its unchanged ceiling. The aggregate cap is re-measured for the chunk double count this causes.
26 lines
773 B
TypeScript
26 lines
773 B
TypeScript
"use client";
|
|
|
|
import type { DateKey } from "@/lib/day/contract";
|
|
import { resolveIntlLocale } from "@/lib/format-locale";
|
|
import { useTranslations } from "@/lib/i18n/context";
|
|
|
|
/**
|
|
* "Saturday, 3 January 2026", for the day's header, its spoken name and its
|
|
* strip. Its own module, so the shell's day layer can name a day without
|
|
* loading the day view.
|
|
*/
|
|
export function useLongDayLabel(
|
|
length: "long" | "short" = "long",
|
|
): (date: DateKey) => string {
|
|
const { locale } = useTranslations();
|
|
const intl = resolveIntlLocale(locale);
|
|
return (date: DateKey) =>
|
|
new Intl.DateTimeFormat(intl, {
|
|
weekday: length,
|
|
day: "numeric",
|
|
month: length,
|
|
year: "numeric",
|
|
timeZone: "UTC",
|
|
}).format(new Date(`${date}T12:00:00.000Z`));
|
|
}
|