Files
vac-optimizer/src/app/components/user-input/user-input.scss
T
nessar 3dc601982a feat: enhance user input component with new styling and functionality
- Added informational styling to warning cards in user input component.
- Improved remaining days details and history display with new computed properties.
- Updated user input service to manage planning outcomes and traces more effectively.
- Enhanced leave planner service to classify remaining balances with detailed reasons.
- Expanded translation service to support new balance reasoning and suggestions.
- Updated translations for multiple languages to reflect new features and terminology.
2026-10-07 21:49:33 +02:00

292 lines
4.9 KiB
SCSS

.user-input {
display: grid;
grid-template-columns: minmax(0, 1fr);
align-items: start;
gap: 1rem;
min-width: 0;
}
.section-heading {
display: flex;
flex-direction: column;
gap: 0.375rem;
h2,
p {
margin: 0;
}
h2 {
font-size: 1.125rem;
font-weight: 700;
line-height: 1.2;
text-wrap: balance;
}
p {
max-width: 55ch;
font-size: 0.875rem;
color: var(--ui-text-secondary, #45464f);
line-height: 1.5;
}
}
.listOfDays {
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.declaration-controls {
display: grid;
container: declaration-controls / inline-size;
grid-column: 1 / -1;
border: 1px solid var(--ui-border);
border-radius: var(--ui-radius-sm);
background: var(--ui-panel-bg);
&.is-active {
border-color: var(--mat-sys-primary);
}
}
.declaration-entry-toggle {
justify-content: flex-start;
width: 100%;
height: auto;
min-height: 3.25rem;
padding: 0.75rem 1rem;
border-radius: calc(var(--ui-radius-sm) - 1px);
text-align: start;
line-height: 1.5;
transition:
background-color 150ms ease-out,
color 150ms ease-out;
&[aria-pressed='true'] {
background: var(--mat-sys-primary-container);
color: var(--mat-sys-on-primary-container);
}
}
.declaration-types {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0.5rem;
padding: 0.75rem;
button {
min-height: 2.75rem;
height: auto;
padding: 0.5rem;
border-radius: calc(var(--ui-radius-sm) - 1px);
background-color: var(--ui-card-bg);
color: var(--number-color);
line-height: 1.5;
&[data-declared-type='cp'] {
background-color: var(--cp-bg);
}
&[data-declared-type='rtt'] {
background-color: var(--rtt-bg);
}
&[data-declared-type='other'] {
background-color: var(--other-bg);
}
&[aria-pressed='true'] {
border-color: currentColor;
box-shadow: inset 0 0 0 1px currentColor;
}
&[data-declared-type][aria-pressed='true'] {
background-image: var(--declared-day-pattern);
}
&[aria-pressed='false'] .declaration-type-check {
visibility: hidden;
}
}
}
.day-input-wrapper {
animation: slide-fade-in 200ms ease-out;
@starting-style {
opacity: 0;
transform: translateX(-20px);
}
}
.day-enter {
animation: slide-fade-in 200ms ease-out;
}
.day-leave {
opacity: 0;
transform: translateX(20px);
transition:
opacity 200ms ease-in,
transform 200ms ease-in;
}
@keyframes slide-fade-in {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
form {
display: flex;
flex-direction: column;
}
.add-day-button,
.calculate-button {
width: 100%;
min-height: 3rem;
}
.duration-estimate {
grid-column: 1 / -1;
margin: 0 0 -0.5rem;
color: var(--ui-text-secondary);
font-size: 0.875rem;
line-height: 1.5;
}
.add-day-button {
display: flex;
justify-content: center;
border-style: dashed;
border-color: var(--mat-sys-outline);
border-radius: var(--ui-radius-sm);
}
.calculate-button {
min-height: 3.25rem;
border-radius: var(--ui-radius-sm);
font-weight: 600;
}
.warning-card {
background: var(--ui-warning-bg, #fff4d6);
color: var(--ui-warning-text, #4f3800);
&.is-informational {
background: var(--ui-panel-bg);
color: var(--mat-sys-on-surface);
}
}
.warning-content {
display: flex;
align-items: flex-start;
gap: 0.75rem;
mat-icon {
flex-shrink: 0;
}
}
.warning {
display: flex;
flex-direction: column;
gap: 0.25rem;
min-width: 0;
overflow-wrap: break-word;
line-height: 1.5;
p {
margin: 0.25rem 0;
}
}
.remaining-balances,
.remaining-history {
display: grid;
gap: 1rem;
margin: 0.5rem 0;
padding-inline-start: 1.25rem;
}
.remaining-day-detail summary {
min-height: 2.75rem;
align-content: center;
cursor: pointer;
text-decoration: underline;
text-underline-offset: 0.25em;
}
.decisive {
font-weight: 700;
}
.history-pagination {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
}
:host {
display: block;
container: user-input / inline-size;
max-width: 100%;
}
@container declaration-controls (min-width: 18rem) {
.declaration-types {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@container declaration-controls (min-width: 34rem) {
.declaration-types {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
}
@container user-input (min-width: 40rem) {
.listOfDays {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.add-day-button {
grid-column: 1 / -1;
}
}
@container user-input (min-width: 48rem) {
.user-input {
grid-template-columns: repeat(2, minmax(0, 1fr));
column-gap: 1.5rem;
}
.section-heading,
.calculate-button,
.warning-card {
grid-column: 1 / -1;
}
.listOfDays {
grid-template-columns: minmax(0, 1fr);
}
}
.jump-to-plan {
display: inline-flex;
align-items: center;
gap: 0.5rem;
width: fit-content;
min-height: 2.75rem;
color: var(--mat-sys-primary);
font-size: 0.875rem;
text-underline-offset: 0.25em;
}
@media (min-width: 75rem) {
.jump-to-plan {
display: none;
}
}