Everything language- and region-specific that the pickers need.
Cally reaches for Intl.DateTimeFormat. Elm has no Intl, so a Locale is a
plain record of formatting functions that you can build yourself. Two English
locales ship with the package; both reproduce the exact strings node's ICU
produces for en-GB and en-US (see upstream/intl-fixture.json), including
the thin-space en-dash ICU uses between the two halves of a range.
British English. Weeks start on Monday, day labels read "5 January", and
September's short name is "Sept".
American English. Weeks start on Sunday and day labels read "January 5".
Writing direction. Cally checks :dir(ltr) at runtime to decide which way
the left and right arrow keys move; elm-cally reads this field instead.
A year and a month, with no day. Mirrors Cally's PlainYearMonth.
The { year, month } half of Intl.DateTimeFormat's options. Nothing
drops the field, exactly like leaving the option out.
How a year should be rendered: 2026 or 26.
How a month should be rendered. Mirrors the month option of
Intl.DateTimeFormat.
How a weekday should be rendered. Mirrors the weekday option of
Intl.DateTimeFormat.
Everything the pickers need to render text.
dirdecides which wayArrowLeftandArrowRightmove.firstDayOfWeekis the default forConfig.firstDayOfWeek.dayLabelis thearia-labelof a day button, Cally's{ month: "long", day: "numeric" }:"5 January"or"January 5".yearMonthandyearMonthRangerender the picker headings, Cally'sformat/formatVerboseand theirformatRange.*Labelfields are the visually hidden and default texts.