Redraw the calendar as an almanac: gridless cells, typed bands

Day cells lose their borders and fills; red days, klämdagar and
Saturdays are told apart by the numeral's ink with a 12px R/K mark,
today is a filled circle, overrides and exclusions mark the numeral.
Bands carry their funding type by fill, ink and hatching and their
owner by a left cap. The preset rail becomes a chip row, the legend a
help popover, the period popover's three delete buttons fold behind
one "Ta bort…", and solo users pick a type directly in the day modal.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBRLomdLK9jF7wU7a8AA6H
This commit is contained in:
2026-09-19 19:02:02 +02:00
parent d14f86478a
commit dbef997da4
28 changed files with 1486 additions and 1109 deletions
+23 -9
View File
@@ -4,14 +4,6 @@ export const calendar = {
'calendar.selectMonthAria': 'Välj månad',
'calendar.selectYearAria': 'Välj år',
'calendar.deleteError': 'Det gick inte att ta bort den planerade dagen',
'calendar.legendDoubleDay': 'Dubbeldag',
'calendar.legendIncomeBased': 'Sjukpenningnivå',
'calendar.legendKlamdag': 'Klämdag',
'calendar.legendMinimumRate': 'Lägstanivå',
'calendar.legendOverride': 'Undantag (arbets-/ledig dag)',
'calendar.legendRedDay': 'R = röd dag',
'calendar.legendTitle': 'Teckenförklaring',
'calendar.legendVacation': 'Semester',
'calendar.loading': 'Laddar kalender...',
'calendar.nextMonthAria': 'Nästa månad',
'calendar.overrideError': 'Det gick inte att uppdatera undantaget',
@@ -30,7 +22,6 @@ export const calendar = {
'calendar.weekdayTue': 'Tis',
'calendar.weekdayWed': 'Ons',
'calendar.you': 'Du',
'calendarDay.ariaWithEvents': '{date} med {count} händelse(r)',
'calendarDay.excludedAria': 'borttagen dag – planeraren hoppar över den',
'calendarDay.klamdagAria': 'klämdag',
'calendarDay.overrideFreeAria': 'markerad som ledig dag (undantag)',
@@ -69,6 +60,7 @@ export const calendar = {
'plannedDayModal.savingButton': 'Sparar…',
'plannedDayModal.sjukpenningOption': 'Sjukpenningnivå (390-nivån)',
'plannedDayModal.vacationOption': 'Semester',
'plannedDayModal.autoOption': 'Låt planeraren välja',
'redDaysList.effectiveFree': 'Ledig',
'redDaysList.effectiveWorking': 'Arbetsdag',
'redDaysList.emptyYear': 'Inga röda dagar eller undantag detta år.',
@@ -101,9 +93,30 @@ export const calendar = {
'calendar.undoError': 'Det gick inte att ångra ändringen',
'calendar.dismissToastAria': 'Stäng meddelandet',
// The "?" beside the month title — replaces the legend that used to sit
// under the grid. One line per mark the calendar draws.
'calendar.helpAria': 'Förklaring av kalenderns markeringar',
'calendar.helpTitle': 'Dagar',
'calendar.helpBandsTitle': 'Perioder',
'calendar.helpRedDay': 'Röd dag (R) — helgdag eller söndag',
'calendar.helpKlamdag': 'Klämdag (K)',
'calendar.helpSaturday': 'Lördag',
'calendar.helpToday': 'Idag',
'calendar.helpOverride': 'Undantag — markerad som arbetsdag eller ledig dag',
'calendar.helpExcluded': 'Borttagen dag — planeraren hoppar över den',
'calendar.helpVacation': 'Semester',
'calendar.helpSjukpenning': 'Sjukpenningnivå',
'calendar.helpLagsta': 'Lägstanivå',
'calendar.helpSelf': 'Din ledighet',
'calendar.helpPartner': 'Partnerns ledighet',
'calendar.helpDubbeldag': 'Dubbeldag — båda föräldrarna samma dag',
'calendar.helpPinned': 'Låst av dig — planeraren ändrar inte dagen',
'calendar.railHeading': 'Lägg till ledighet',
'calendar.railHint': 'Klicka för att lägga till — kalendern hoppar till där den passar bäst.',
'calendar.presetAddAria': 'Lägg till {name}',
'calendar.presetChipsLabel': 'Lägg till ledighet',
'calendar.presetWeeksShort': '{count} v',
'calendar.periodPopoverTitle': 'Redigera period',
'calendar.periodAdHocTitle': 'Period',
@@ -136,6 +149,7 @@ export const calendar = {
'calendar.periodDeleteAdHocButton': 'Ta bort dessa dagar',
'calendar.periodCancelButton': 'Avbryt',
'calendar.periodCloseAria': 'Stäng',
'calendar.periodDeleteMenuButton': 'Ta bort…',
// todo.md #9 — three-way remove: this day / this period (this year) / this
// period every year.