feat: enhance user input and rules panel components

- Updated dark-light mode button styles for improved responsiveness.
- Enhanced rules panel with additional buttons for moving rules up and down, and updated styles for better layout.
- Added active rule count display in the rules panel header.
- Improved user input component layout with section headings and updated button styles.
- Refactored day input component to use grid layout for better alignment and responsiveness.
- Added new translations for user input and rules panel features.
- Implemented tests for new functionality in rules panel and day input components.
- Added application routes test to ensure correct routing configuration.
This commit is contained in:
nessar committed 2026-08-30 19:16:36 +02:00
1 parent 31314f3969
commit 609b3dece9
30 files changed
+870 -382

No files matched your search

+16 -4
View File
@@ -5,13 +5,17 @@
"description": "Optimieren Sie Ihre Urlaubstage basierend auf Feiertagen und Wochenenden!"
},
"userInput": {
"addVacationDay": "Urlaubstag hinzufügen",
"calculate": "Berechnen",
"title": "Urlaub konfigurieren",
"description": "Fügen Sie jedes Urlaubskonto und seinen Gültigkeitszeitraum hinzu.",
"addVacationDay": "Urlaubskonto hinzufügen",
"calculate": "Plan berechnen",
"remainingDaysWarning": "{count} nicht platziert:",
"remainingDaysManualPlace": "Bitte manuell platzieren.",
"deleteEntry": "Eintrag löschen",
"chooseDate": "Datum auswählen",
"chooseDate": "Gültig bis",
"availableDate": "Verfügbar ab",
"days": "Tage",
"type": "Urlaubsart",
"daySuffix": "Tag",
"daysSuffix": "Tage",
"expires": "abl.",
@@ -43,8 +47,11 @@
"selectLanguage": "Sprache auswählen"
},
"rules": {
"title": "Regeln",
"title": "Planungsregeln",
"subtitle": "Urlaubsregeln konfigurieren",
"active": "aktiv",
"moveRuleUp": "Regel nach oben verschieben",
"moveRuleDown": "Regel nach unten verschieben",
"priorityInfo": "Regeln werden von oben nach unten angewendet",
"ifThenTemplate": "Wenn {type} dann {placement}",
"timeWindowTemplate": "Zeitfenster {startDate} bis {endDate}",
@@ -88,6 +95,11 @@
}
},
"planning": {
"title": "Ihr optimiertes Jahr",
"daysPlaced": "Eingeplante Urlaubstage",
"daysGained": "Gewonnene arbeitsfreie Tage",
"longestWorkSequence": "Längste Arbeitsphase",
"legend": "Kalenderlegende",
"invalidInput": "Die Planungsdaten sind ungültig.",
"conflict": "Die Verpflichtungen können nicht gemeinsam erfüllt werden.",
"incomplete": "Die Berechnung wurde vor Abschluss aller Qualitätsstufen beendet.",
+16 -4
View File
@@ -5,13 +5,17 @@
"description": "Optimize your vacation days based on holidays and weekends!"
},
"userInput": {
"addVacationDay": "Add a vacation day",
"calculate": "Calculate",
"title": "Configure your leave",
"description": "Add each leave balance and its validity period.",
"addVacationDay": "Add leave balance",
"calculate": "Calculate plan",
"remainingDaysWarning": "{count} vacation day{plural} not placed:",
"remainingDaysManualPlace": "Please place them manually.",
"deleteEntry": "Delete entry",
"chooseDate": "Choose a date",
"chooseDate": "Expires on",
"availableDate": "Available from",
"days": "Days",
"type": "Leave type",
"daySuffix": "day",
"daysSuffix": "days",
"expires": "exp.",
@@ -43,8 +47,11 @@
"selectLanguage": "Language"
},
"rules": {
"title": "Custom Rules",
"title": "Planning rules",
"subtitle": "Manage optimization rules",
"active": "active",
"moveRuleUp": "Move rule up",
"moveRuleDown": "Move rule down",
"priorityInfo": "The order of rules defines their execution priority (from top to bottom). Drag and drop to reorder.",
"ifThenTemplate": "If a holiday falls on a <strong>{day}</strong>, place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> <strong>{placement}</strong> and get <strong>{rewardDays}</strong> day(s) <strong>{rewardType}</strong> as a bonus.",
"timeWindowTemplate": "Place <strong>{placeDays}</strong> day(s) <strong>{placeType}</strong> between <strong>{startDate}</strong> and <strong>{endDate}</strong>.",
@@ -88,6 +95,11 @@
}
},
"planning": {
"title": "Your optimized year",
"daysPlaced": "Leave days placed",
"daysGained": "Non-working days gained",
"longestWorkSequence": "Longest work sequence",
"legend": "Calendar legend",
"invalidInput": "The planning input is invalid.",
"conflict": "The obligations cannot be satisfied together.",
"incomplete": "Calculation stopped before all quality stages completed.",
+16 -4
View File
@@ -5,13 +5,17 @@
"description": "¡Optimice sus días de vacaciones según los días festivos y los fines de semana!"
},
"userInput": {
"addVacationDay": "Añadir un día de vacaciones",
"calculate": "Calcular",
"title": "Configura tus vacaciones",
"description": "Añade cada saldo de vacaciones y su periodo de validez.",
"addVacationDay": "Añadir saldo de vacaciones",
"calculate": "Calcular plan",
"remainingDaysWarning": "{count} día{plural} de vacaciones no colocado{plural}:",
"remainingDaysManualPlace": "Por favor, colóquelos manualmente.",
"deleteEntry": "Eliminar entrada",
"chooseDate": "Elija una fecha",
"chooseDate": "Caduca el",
"availableDate": "Disponible desde",
"days": "Días",
"type": "Tipo de permiso",
"daySuffix": "día",
"daysSuffix": "días",
"expires": "exp.",
@@ -43,8 +47,11 @@
"selectLanguage": "Idioma"
},
"rules": {
"title": "Reglas personalizadas",
"title": "Reglas de planificación",
"subtitle": "Gestionar reglas de optimización",
"active": "activas",
"moveRuleUp": "Subir regla",
"moveRuleDown": "Bajar regla",
"priorityInfo": "El orden de las reglas define su prioridad de ejecución (de arriba a abajo). Arrastre y suelte para reorganizar.",
"ifThenTemplate": "Si un día festivo cae en <strong>{day}</strong>, colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> <strong>{placement}</strong> y obtener <strong>{rewardDays}</strong> día(s) <strong>{rewardType}</strong> de bonificación.",
"timeWindowTemplate": "Colocar <strong>{placeDays}</strong> día(s) <strong>{placeType}</strong> entre el <strong>{startDate}</strong> y el <strong>{endDate}</strong>.",
@@ -88,6 +95,11 @@
}
},
"planning": {
"title": "Tu año optimizado",
"daysPlaced": "Días de vacaciones asignados",
"daysGained": "Días no laborables ganados",
"longestWorkSequence": "Período de trabajo más largo",
"legend": "Leyenda del calendario",
"invalidInput": "Los datos de planificación no son válidos.",
"conflict": "Las obligaciones no se pueden satisfacer juntas.",
"incomplete": "El cálculo se detuvo antes de completar todas las etapas de calidad.",
+16 -4
View File
@@ -5,13 +5,17 @@
"description": "Optimisez vos jours de vacances en fonction des jours fériés et des week-ends !"
},
"userInput": {
"addVacationDay": "Ajouter un jour de vacances",
"calculate": "Calculer",
"title": "Configurez vos congés",
"description": "Ajoutez chaque solde de congés et sa période de validité.",
"addVacationDay": "Ajouter un solde de congés",
"calculate": "Calculer le planning",
"remainingDaysWarning": "{count} jour{plural} de vacances non placé{plural}:",
"remainingDaysManualPlace": "Veuillez les placer manuellement.",
"deleteEntry": "Supprimer l’entrée",
"chooseDate": "Choisissez une date",
"chooseDate": "Expire le",
"availableDate": "Disponible à partir du",
"days": "Jours",
"type": "Type de congé",
"daySuffix": "jour",
"daysSuffix": "jours",
"expires": "exp.",
@@ -43,8 +47,11 @@
"selectLanguage": "Langue"
},
"rules": {
"title": "Règles Personnalisées",
"title": "Règles de planification",
"subtitle": "Gérer les règles d'optimisation",
"active": "actives",
"moveRuleUp": "Monter la règle",
"moveRuleDown": "Descendre la règle",
"priorityInfo": "L'ordre des règles définit leur priorité d'exécution (de haut en bas). Glissez-déposez pour réorganiser.",
"ifThenTemplate": "Si un jour férié tombe un <strong>{day}</strong>, placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> <strong>{placement}</strong> et obtenir <strong>{rewardDays}</strong> jour(s) <strong>{rewardType}</strong> en bonus.",
"timeWindowTemplate": "Placer <strong>{placeDays}</strong> jour(s) <strong>{placeType}</strong> entre le <strong>{startDate}</strong> et le <strong>{endDate}</strong>.",
@@ -88,6 +95,11 @@
}
},
"planning": {
"title": "Votre année optimisée",
"daysPlaced": "Jours de congé placés",
"daysGained": "Jours non travaillés gagnés",
"longestWorkSequence": "Plus longue période travaillée",
"legend": "Légende du calendrier",
"invalidInput": "Les données de planification sont invalides.",
"conflict": "Les obligations ne peuvent pas être satisfaites ensemble.",
"incomplete": "Le calcul s’est arrêté avant la fin des critères de qualité.",