Redesign the setup flow and consolidate the CSS into one primitives layer
Onboarding asks explicitly for one or two parents and shows one card per parent for balances; the balance form is per parent with inline validation; the partner can be filled from the FK deduction or added from it. Settings and Dashboard reuse the same form. CSS: bare buttons carry no colour any more; buttons, cards, choice cards, fields, alerts, badges, eyebrow and modal chrome are defined once in primitives.css. Media queries live only in responsive.css. A style guard test blocks hex, !important and stray media queries. Bilingual fixes: calendar selects size by content, header no longer wraps. Vitest is capped at four workers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -1,13 +1,15 @@
|
||||
export const auth = {
|
||||
'auth.createAccountButton': 'Skapa konto',
|
||||
'auth.createAccountTitle': 'Skapa konto',
|
||||
'auth.emailLabel': 'E-post',
|
||||
'auth.emailPlaceholder': 'E-post',
|
||||
'auth.genericError': 'Något gick fel',
|
||||
'auth.haveAccountButton': 'Har redan konto',
|
||||
'auth.loadingEllipsis': 'Laddar…',
|
||||
'auth.loginButton': 'Logga in',
|
||||
'auth.loginTitle': 'Logga in',
|
||||
'auth.nameLabel': 'Namn',
|
||||
'auth.namePlaceholder': 'Namn',
|
||||
'auth.passwordLabel': 'Lösenord',
|
||||
'auth.passwordPlaceholder': 'Lösenord',
|
||||
'auth.registerButton': 'Registrera',
|
||||
} as const
|
||||
@@ -9,7 +9,7 @@ export const calendar = {
|
||||
'calendar.legendKlamdag': 'Klämdag',
|
||||
'calendar.legendMinimumRate': 'Lägstanivå',
|
||||
'calendar.legendOverride': 'Undantag (arbets-/ledig dag)',
|
||||
'calendar.legendRedDay': 'Röd dag',
|
||||
'calendar.legendRedDay': 'R = röd dag',
|
||||
'calendar.legendTitle': 'Teckenförklaring',
|
||||
'calendar.legendVacation': 'Semester',
|
||||
'calendar.loading': 'Laddar kalender...',
|
||||
@@ -52,8 +52,6 @@ export const calendar = {
|
||||
'plannedDayModal.parentLabel': 'Förälder',
|
||||
'plannedDayModal.pinnedNotice': 'Den här dagen är låst av dig — planeraren ändrar den inte automatiskt.',
|
||||
'plannedDayModal.dayStatusLabel': 'Den här dagen är:',
|
||||
'plannedDayModal.workdayOption': 'Arbetsdag',
|
||||
'plannedDayModal.dayOffOption': 'Ledig',
|
||||
'plannedDayModal.rangeTitle': 'Planera {count} dagar',
|
||||
'plannedDayModal.saveButton': 'Spara',
|
||||
'plannedDayModal.saveError': 'Det gick inte att spara den planerade dagen',
|
||||
|
||||
@@ -2,6 +2,7 @@ export const dashboard = {
|
||||
'age4Bars.expiringStat': '{expiring} dagar förfaller',
|
||||
'age4Bars.savableStat': '{left} av {cap} dagar kan sparas',
|
||||
'age4Bars.title': 'Dagar kvar vid 4 års ålder, per förälder',
|
||||
'dashboard.balancePickerPrompt': 'Vem gäller det?',
|
||||
'dashboard.daysLeft': 'Kvarvarande dagar',
|
||||
'dashboard.enterManually': 'Ange uppgifter manuellt',
|
||||
'dashboard.estimatedBadge': 'Uppskattat',
|
||||
@@ -11,11 +12,12 @@ export const dashboard = {
|
||||
'dashboard.expiringAtB4ParentFallback': 'Förälder {number}',
|
||||
'dashboard.fetchFromFk': 'Hämta från Försäkringskassan',
|
||||
'dashboard.hero.hasPlanMessage': '{atRisk} dagar riskerar att försvinna när {childName} fyller 4 ({date}).',
|
||||
'dashboard.hero.noneAtRiskMessage': 'Inga dagar går förlorade — er plan hinner använda alla innan {childName} fyller 4 ({date}).',
|
||||
'dashboard.hero.noPlanMessage': 'Du har {days} dagar att planera. Utan en plan försvinner {atRisk} av dem när {childName} fyller 4.',
|
||||
'dashboard.loading': 'Laddar...',
|
||||
'dashboard.moreDetailsSummary': 'Fler detaljer',
|
||||
'dashboard.overviewTitle': 'Översikt',
|
||||
'dashboard.planFold.noWishesHint': 'Lägg till önskemål under Planering för att se ett förslag här.',
|
||||
'dashboard.planFold.noWishesHint': 'Lägg till önskemål under Kalender för att se ett förslag här.',
|
||||
'dashboard.planFold.summary': 'Planförslag för de kommande åren',
|
||||
'dashboard.planFold.unknownParent': 'Okänd förälder',
|
||||
'dashboard.plannedDaysTitle': 'Planerade dagar',
|
||||
@@ -36,6 +38,8 @@ export const dashboard = {
|
||||
'parentalLeaveBreakdown.totalHeader': 'Totalt',
|
||||
'parentalLeaveBreakdown.transferableDays': 'Överlåtbara dagar',
|
||||
'parentalLeaveBreakdown.typeHeader': 'Typ',
|
||||
'yearTimeline.bandLabel': '{dayType}, {startDate} – {endDate}',
|
||||
'yearTimeline.bandLabel': '{dayType}, {startDate} – {endDate} ({dayCount} dagar). Klicka för att öppna denna månad i kalendern.',
|
||||
'yearTimeline.bandLabelOneDay': '{dayType}, {startDate} – {endDate} (1 dag). Klicka för att öppna denna månad i kalendern.',
|
||||
'yearTimeline.caption': 'Varje rad är ett år och varje färgad stapel en planerad ledighetsperiod. Klicka på en stapel för att öppna den månaden i kalendern.',
|
||||
'yearTimeline.title': 'De kommande åren',
|
||||
} as const
|
||||
@@ -1,29 +1,36 @@
|
||||
export const onboarding = {
|
||||
'onboarding.addChildButton': 'Lägg till barn',
|
||||
'onboarding.addDeducedPartnerButton': 'Lägg till {name}',
|
||||
'onboarding.addingChild': 'Lägger till...',
|
||||
'onboarding.balancesLegend': 'Föräldradagar',
|
||||
'onboarding.balanceStatus': '{left} av {total} dagar kvar',
|
||||
'onboarding.balanceStatusNone': 'Inga uppgifter ännu',
|
||||
'onboarding.birthdayLabel': 'Födelsedag',
|
||||
'onboarding.childBirthDateRequired': 'Ange barnets födelsedatum',
|
||||
'onboarding.childNameLabel': 'Barnets namn',
|
||||
'onboarding.childNameRequired': 'Ange barnets namn',
|
||||
'onboarding.continueButton': 'Fortsätt',
|
||||
'onboarding.createChildError': 'Kunde inte skapa barn',
|
||||
'onboarding.familyIntro': 'Det här styr hur planeraren fördelar föräldradagarna.',
|
||||
'onboarding.familyTitle': 'Planerar du ensam eller tillsammans med en partner?',
|
||||
'onboarding.deducedBadge': 'Härlett från din FK-hämtning',
|
||||
'onboarding.deducedPartnerPrompt': 'Försäkringskassan visar att den andra föräldern har {days} dagar kvar.',
|
||||
'onboarding.dismissDeducedPartner': 'Nej, jag är ensam förälder',
|
||||
'onboarding.enterManuallyButton': 'Ange själv',
|
||||
'onboarding.familyCoupleDescription': 'Dagarna delas 240/240 och ni kan spara 48 dagar var efter 4 år. Partnern behöver inte skapa konto.',
|
||||
'onboarding.familyCoupleTitle': 'Vi är två föräldrar',
|
||||
'onboarding.familySoloDescription': 'Jag har ensam vårdnad. Alla 480 dagar och 96 sparade dagar efter 4 år är mina.',
|
||||
'onboarding.familySoloTitle': 'Bara jag',
|
||||
'onboarding.familyTitle': 'Hur ser er familj ut?',
|
||||
'onboarding.fillAllFields': 'Fyll i alla fält',
|
||||
'onboarding.finishButton': 'Klar',
|
||||
'onboarding.finishError': 'Något gick fel. Försök igen.',
|
||||
'onboarding.manualFetchDescription': 'Ange dina saldon manuellt om du redan vet dem.',
|
||||
'onboarding.manualFetchTitle': 'Ange manuellt',
|
||||
'onboarding.finishingButton': 'Sparar...',
|
||||
'onboarding.namePlaceholder': 'Namn',
|
||||
'onboarding.partnerAddedStatus': 'Partner tillagd: {name}',
|
||||
'onboarding.partnerIntro': 'Lägg till din partner nu, eller gör det senare under Inställningar.',
|
||||
'onboarding.partnerNameLabel': 'Partnerns namn',
|
||||
'onboarding.savingFamilyError': 'Kunde inte spara planeringsläget',
|
||||
'onboarding.scrapeFetchDescription': 'Snabbast och säkrast — hämtar dina exakta saldon automatiskt via BankID.',
|
||||
'onboarding.scrapeFetchTitle': 'Hämta från Försäkringskassan',
|
||||
'onboarding.skipButton': 'Hoppa över för nu',
|
||||
'onboarding.skipHint': 'Vi använder det lagstadgade antagandet (480 dagar, inget uttaget) tills du fyller i dina egna uppgifter.',
|
||||
'onboarding.stepBalancesIntro': 'Så vet vi hur många dagar som finns kvar att planera. Du kan alltid uppdatera detta senare.',
|
||||
'onboarding.stepBalancesTitle': 'Hämta dina föräldradagar',
|
||||
'onboarding.partnerAutoFillHint': 'Fylls i automatiskt om du hämtar från FK, eller om {name} loggar in och hämtar.',
|
||||
'onboarding.partnerNameLabel': 'Den andra förälderns namn',
|
||||
'onboarding.partnerNameRequired': 'Ange den andra förälderns namn',
|
||||
'onboarding.stepBalancesIntro': 'Du kan hoppa över och fylla i senare — vi antar då att inga dagar är uttagna.',
|
||||
'onboarding.stepBalancesTitle': 'Hur många dagar finns kvar?',
|
||||
'onboarding.stepChildIntro': 'Lägg till ditt första barn för att börja planera föräldraledigheten.',
|
||||
'onboarding.stepChildTitle': 'Välkommen! Låt oss lägga till ditt barn',
|
||||
'onboarding.stepIndicator': 'Steg {step} av {total}',
|
||||
'onboarding.youBadge': 'du',
|
||||
} as const
|
||||
|
||||
@@ -3,9 +3,7 @@
|
||||
// Översikt carries the headline figures — see PLANNING_ENGINE_SPEC.md's
|
||||
// superseding note). What's left here is the subset `planResults.*`
|
||||
// `PlanFold.tsx` (the read-only plan-proposal fold on Översikt) and
|
||||
// `frontend/src/utils/rejectionMessages.ts` still render, plus
|
||||
// `planningModeSelector.*` (`PlanningModeSelector.tsx`, used by both
|
||||
// Settings and Onboarding).
|
||||
// `frontend/src/utils/rejectionMessages.ts` still render.
|
||||
export const plan = {
|
||||
'planResults.balancesTitle': 'Kvarvarande saldon efter planen',
|
||||
'planResults.dubbeldagarLeftHeader': 'Dubbeldagar kvar',
|
||||
@@ -40,7 +38,4 @@ export const plan = {
|
||||
'planResults.weeksUnit': 'veckor',
|
||||
'planResults.yearHeader': 'År',
|
||||
'planResults.yearOverviewTitle': 'Översikt över åren',
|
||||
'planningModeSelector.couple': 'Jag och min partner',
|
||||
'planningModeSelector.legend': 'Planerar du själv eller tillsammans med en partner?',
|
||||
'planningModeSelector.solo': 'Bara jag',
|
||||
} as const
|
||||
|
||||
@@ -14,24 +14,27 @@ export const settings = {
|
||||
'dayOverridesInput.offStatus': 'Jag är ledig den här dagen',
|
||||
'dayOverridesInput.statusLegend': 'Status',
|
||||
'dayOverridesInput.workingStatus': 'Jag jobbar den här dagen',
|
||||
'manualFetchModal.cancelButton': 'Avbryt',
|
||||
'manualFetchModal.closeAria': 'Stäng',
|
||||
'manualFetchModal.daysRemaining': 'Kvarvarande dagar:',
|
||||
'manualFetchModal.daysUsedLabel': 'Använda dagar',
|
||||
'manualFetchModal.description': 'Ange dina uppgifter om föräldrapenning från Försäkringskassan manuellt om automatisk hämtning inte är tillgänglig.',
|
||||
'manualFetchModal.dubbeldagarLabel': 'Dubbeldagar kvar (0–60)',
|
||||
'manualFetchModal.lagstaUsedLabel': 'Använda dagar på lägstanivå (90-nivån)',
|
||||
'manualFetchModal.remainingBreakdownTitle': 'Fördelning av kvarvarande dagar',
|
||||
'manualFetchModal.reservedDaysLabel': 'Reserverade dagar kvar',
|
||||
'manualFetchModal.saveButton': 'Spara',
|
||||
'manualFetchModal.saveError': 'Det gick inte att spara de manuella uppgifterna',
|
||||
'manualFetchModal.savingButton': 'Sparar…',
|
||||
'manualFetchModal.sjukpenningUsedLabel': 'Använda dagar på sjukpenningnivå (390-nivån)',
|
||||
'manualFetchModal.tierBreakdownTitle': 'Fördelning per nivå',
|
||||
'manualFetchModal.title': 'Ange föräldrapenninguppgifter',
|
||||
'manualFetchModal.totalDaysLabel': 'Totalt antal dagar (0–480)',
|
||||
'manualFetchModal.totalDaysSectionTitle': 'Totalt antal dagar',
|
||||
'manualFetchModal.transferableDaysLabel': 'Överlåtbara dagar kvar',
|
||||
'parentBalance.advancedToggle': 'Avancerat',
|
||||
'parentBalance.cancelButton': 'Avbryt',
|
||||
'parentBalance.closeAria': 'Stäng',
|
||||
'parentBalance.description': 'Siffrorna finns på Mina sidor hos Försäkringskassan under Föräldrapenning.',
|
||||
'parentBalance.dubbeldagarHelper': 'Gäller båda föräldrarna tillsammans, de första 15 månaderna.',
|
||||
'parentBalance.dubbeldagarLeftLabel': 'Dubbeldagar kvar (0–60)',
|
||||
'parentBalance.invalid': 'Summan (sjukpenningnivå + lägstanivå) kan inte överstiga {total} dagar.',
|
||||
'parentBalance.lagstaLeftLabel': 'Lägstanivå kvar (0–90)',
|
||||
'parentBalance.loadingBalance': 'Laddar saldo…',
|
||||
'parentBalance.presetButton': 'Inga dagar uttagna',
|
||||
'parentBalance.rangeError': 'Ange ett tal mellan {min} och {max}.',
|
||||
'parentBalance.reservedExceedsError': 'Reserverade dagar kan inte överstiga sjukpenningnivå + lägstanivå kvar.',
|
||||
'parentBalance.reservedLeftHelper': 'Lämna tomt så räknar vi ut det.',
|
||||
'parentBalance.reservedLeftLabel': 'Reserverade dagar kvar (0–90)',
|
||||
'parentBalance.saveButton': 'Spara',
|
||||
'parentBalance.saveError': 'Det gick inte att spara dagarna kvar',
|
||||
'parentBalance.savingButton': 'Sparar…',
|
||||
'parentBalance.sjukpenningLeftLabel': 'Sjukpenningnivå kvar (0–390)',
|
||||
'parentBalance.summary': '= {left} av {total} dagar kvar',
|
||||
'parentBalance.title': '{name}s dagar kvar',
|
||||
'parentBalance.titleSelf': 'Dina dagar kvar',
|
||||
'parentProfileInput.employed': 'Anställd',
|
||||
'parentProfileInput.employmentStatusLabel': 'Sysselsättning',
|
||||
'parentProfileInput.hourly': 'Timlön',
|
||||
@@ -57,6 +60,7 @@ export const settings = {
|
||||
'settings.addPartnerError': 'Kunde inte lägga till partner',
|
||||
'settings.addPartnerSuccess': 'Partner tillagd!',
|
||||
'settings.addingPartner': 'Lägger till...',
|
||||
'settings.balanceButton': 'Dagar kvar',
|
||||
'settings.calendarSectionTitle': 'Kalender',
|
||||
'settings.cancelButton': 'Avbryt',
|
||||
'settings.childBirthDateLabel': 'Barnets födelsedatum',
|
||||
@@ -78,8 +82,6 @@ export const settings = {
|
||||
'settings.partnerNamePlaceholder': 'Partnerns namn',
|
||||
'settings.partnerNameRequired': 'Ange ett namn för partnern',
|
||||
'settings.partnerSectionTitle': 'Partner',
|
||||
'settings.planningHelp': 'Ditt planeringsmål och om du planerar själv eller tillsammans med en partner styr hur planeraren föreslår fördelning av dagar.',
|
||||
'settings.planningSectionTitle': 'Planering',
|
||||
'settings.preschoolHelp': 'Förskolor stänger oftast ca 6 dagar per år för planering. Ange hur många dagar din förskola har, så reserveras de i planeringen.',
|
||||
'settings.preschoolPlanningDaysLabel': 'Förskolans planeringsdagar per år',
|
||||
'settings.profileHelp': 'Din lönetyp och sysselsättning används för att uppskatta din SGI och planera din ledighet.',
|
||||
@@ -102,9 +104,6 @@ export const settings = {
|
||||
'settings.saveChildButton': 'Spara barnuppgifter',
|
||||
'settings.saveChildError': 'Kunde inte spara barnets uppgifter',
|
||||
'settings.saveChildSuccess': 'Barnets uppgifter sparade!',
|
||||
'settings.savePlanningButton': 'Spara planering',
|
||||
'settings.savePlanningError': 'Kunde inte spara planeringsinställningar',
|
||||
'settings.savePlanningSuccess': 'Planeringsinställningar sparade!',
|
||||
'settings.saveProfileButton': 'Spara din profil',
|
||||
'settings.saveProfileError': 'Kunde inte spara din profil',
|
||||
'settings.saveProfileSuccess': 'Din profil sparades!',
|
||||
|
||||
Reference in New Issue
Block a user