feat: Improve rolling tasks logic, UI polish, and fix profile settings persistence

- Relocated 'Now Do This' button and adjusted header alignment
- Hid scrollbars in All-Day Events section for cleaner UI
- Fixed 'Failed to update profile' error and ensured settings persistence
- Improved rolling task logic with collision detection and auto-reschedule
- Cleaned up duplicate code and resolved lint errors
- Updated documentation (task.md, walkthrough.md, implementation_plan.md)
This commit is contained in:
mARTin 2026-02-16 09:49:00 +01:00
parent b97230dcb4
commit 72e62ead4a
4 changed files with 686 additions and 462 deletions

View File

@ -39,6 +39,7 @@ model User {
showSchedule Boolean @default(true) showSchedule Boolean @default(true)
cellDuration Int @default(30) cellDuration Int @default(30)
viewStyle String @default("grid") viewStyle String @default("grid")
viewDays Int @default(7)
fontSize String @default("M") // "S", "M", "L" fontSize String @default("M") // "S", "M", "L"
headlineFont String @default("Inter") headlineFont String @default("Inter")
headlineFontSize String? @default("1.25rem") headlineFontSize String? @default("1.25rem")

View File

@ -32,6 +32,7 @@ export async function GET(request: NextRequest) {
showSchedule: true, showSchedule: true,
cellDuration: true, cellDuration: true,
viewStyle: true, viewStyle: true,
viewDays: true,
fontSize: true, fontSize: true,
headlineFont: true, headlineFont: true,
headlineFontSize: true, headlineFontSize: true,
@ -83,7 +84,7 @@ export async function PATCH(request: NextRequest) {
language, dateFormat, timeFormat, startHour, endHour, language, dateFormat, timeFormat, startHour, endHour,
showNextTask, calendarEditMode, focusTimerDuration, focusBreakDuration, showNextTask, calendarEditMode, focusTimerDuration, focusBreakDuration,
showTimeGrid, showSomeday, showAllDayEvents, showSchedule, showTimeGrid, showSomeday, showAllDayEvents, showSchedule,
cellDuration, viewStyle, fontSize, cellDuration, viewStyle, viewDays, fontSize,
headlineFont, headlineFontSize, headlineFontWeight, headlineFont, headlineFontSize, headlineFontWeight,
dateFontFamily, dateFontSize, dateFontWeight, dateFontFamily, dateFontSize, dateFontWeight,
timeTaskFontFamily, timeTaskFontSize, timeTaskFontWeight, timeTaskFontFamily, timeTaskFontSize, timeTaskFontWeight,
@ -114,6 +115,7 @@ export async function PATCH(request: NextRequest) {
...(showSchedule !== undefined && { showSchedule }), ...(showSchedule !== undefined && { showSchedule }),
...(cellDuration !== undefined && !isNaN(cellDuration) && { cellDuration }), ...(cellDuration !== undefined && !isNaN(cellDuration) && { cellDuration }),
...(viewStyle !== undefined && { viewStyle }), ...(viewStyle !== undefined && { viewStyle }),
...(viewDays !== undefined && !isNaN(viewDays) && { viewDays }),
...(fontSize !== undefined && { fontSize }), ...(fontSize !== undefined && { fontSize }),
...(headlineFont !== undefined && { headlineFont }), ...(headlineFont !== undefined && { headlineFont }),
...(headlineFontSize !== undefined && { headlineFontSize }), ...(headlineFontSize !== undefined && { headlineFontSize }),
@ -169,6 +171,7 @@ export async function PATCH(request: NextRequest) {
showSchedule: true, showSchedule: true,
cellDuration: true, cellDuration: true,
viewStyle: true, viewStyle: true,
viewDays: true,
fontSize: true, fontSize: true,
headlineFont: true, headlineFont: true,
headlineFontSize: true, headlineFontSize: true,

View File

@ -1013,12 +1013,20 @@ h3 {
} }
.weekly-someday-lists-grid::-webkit-scrollbar-thumb { .weekly-someday-lists-grid::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.1); background-color: rgba(0, 0, 0, 0.2);
border-radius: 4px; border-radius: 4px;
} }
.dark-mode .weekly-someday-lists-grid::-webkit-scrollbar-thumb {
background-color: rgba(255, 255, 255, 0.2);
}
.weekly-someday-lists-grid::-webkit-scrollbar-thumb:hover { .weekly-someday-lists-grid::-webkit-scrollbar-thumb:hover {
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0, 0, 0, 0.3);
}
.dark-mode .weekly-someday-lists-grid::-webkit-scrollbar-thumb:hover {
background-color: rgba(255, 255, 255, 0.3);
} }
/* Remove grid column classes as we are using flex now */ /* Remove grid column classes as we are using flex now */
@ -1060,6 +1068,36 @@ h3 {
background-position: 0 40px; /* Offset for the header */ background-position: 0 40px; /* Offset for the header */
} }
.someday-drag-handle {
cursor: grab;
color: #ccc;
padding: 2px;
margin-right: 4px;
display: flex;
align-items: center;
border-radius: 3px;
transition: background-color 0.2s, color 0.2s;
}
.someday-drag-handle:hover {
background: rgba(0, 0, 0, 0.05);
color: #888;
}
.dark-mode .someday-drag-handle:hover {
background: rgba(255, 255, 255, 0.1);
color: #fff;
}
.someday-list-delete-btn {
opacity: 0;
transition: opacity 0.2s;
}
.weekly-someday-list-title-header:hover .someday-list-delete-btn {
opacity: 1;
}
/* Placeholder styling */ /* Placeholder styling */
.weekly-someday-list.placeholder-list { .weekly-someday-list.placeholder-list {
background-image: repeating-linear-gradient( background-image: repeating-linear-gradient(
@ -1626,6 +1664,8 @@ h3 {
border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0;
margin: 1px 0; margin: 1px 0;
overflow: hidden; overflow: hidden;
left: -10px;
right: -15px;
} }
.time-slot-event .event-title-row { .time-slot-event .event-title-row {
@ -1738,6 +1778,13 @@ h3 {
padding: 0 0.25rem; padding: 0 0.25rem;
min-height: 28px; min-height: 28px;
border-right: 1px solid var(--weekly-border); border-right: 1px solid var(--weekly-border);
overflow-y: auto;
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE/Edge */
}
.all-day-events-column::-webkit-scrollbar {
display: none; /* Chrome/Safari */
} }
.all-day-events-column:last-child { .all-day-events-column:last-child {

File diff suppressed because it is too large Load Diff