Commit Graph

302 Commits

Author SHA1 Message Date
530006060a feat: add jump-to-date button to hiding top toolbar left section
v1.111.6
2026-05-29 11:51:54 +02:00
5ebdf6d751 Refine sidebar header controls and resize handles 2026-05-13 00:43:19 +02:00
07401d3dfa fix: restore Printer icon to collapsed desktop rail
Print button was accidentally dropped when the history flyout was
slimmed to undo/redo only. Restored next to Refresh in the rail.

v1.111.5
2026-05-11 15:52:04 +02:00
cf504846da feat: merge visibility+appearance flyout, slim history, nav stays open
- Eye icon now opens a combined vis-display flyout (visibility toggles
  + appearance settings in one panel, with divider)
- History flyout reduced to undo+redo only; Refresh moved back to
  standalone rail icon
- Navigation flyout stays open when clicking prev/next day/week
  (removed setFlyoutSection(null) from all nav button handlers,
  both desktop and mobile)
- Mobile rail mirrors desktop flyout structure (vis-display, history,
  nav, refresh standalone)

v1.110.7
2026-05-11 14:43:16 +02:00
75bb3301f9 fix(rail): collapse left rail icons to fit screens < 960px height
- Nav arrows (5 icons) → single ArrowLeftRight flyout with prev/next week/day + today
- Undo/Redo/Refresh/Print (4 icons) → single Undo2 history flyout
- Removed duplicate standalone dark mode toggle (already in Appearance flyout)
- Same flyout sections added to mobile icon rail
- Nav flyout also added to mobile rail

v1.110.6
2026-05-11 14:33:23 +02:00
73a657ebff style: remove inline min-height: 24px from task-list-slot divs
v1.110.5
2026-05-11 14:10:53 +02:00
27756e5bf5 fix: :15/:30/:45 toggle now works in left rail flyout and all sidebar panels
Was calling setShowSubHourSlots (local state) + saveSetting, but effectiveShowSubHourSlots
reads from profile via getEffective — so the toggle had no visible effect. Fixed all 5
occurrences to use saveViewSetting("showSubHourSlots", ..., true) matching the Settings
sidebar behavior.

v1.110.3
2026-05-11 14:06:51 +02:00
ab8d96a810 fix(mobile): header icon toggles icon rail; remove redundant nav arrows from rail
- PanelLeftOpen in header now toggles the icon rail open/close
- Close button in rail uses same PanelLeftOpen icon for visual consistency
- Removed nav arrows (prev/next day/week, today) from rail — available in Quick Settings
- Removed Printer from rail (rarely used on mobile)
- Added SlidersHorizontal (Quick Settings) to bottom of rail

v1.110.2
2026-05-11 13:41:41 +02:00
671c91c3d7 fix(mobile): top-left button opens Quick Settings; icon rail mirrors desktop
- PanelLeftOpen in mobile header now opens Quick Settings (left panel)
- Added "Icon Rail" link at bottom of Quick Settings to open the icon sidebar
- Mobile icon sidebar now matches collapsed desktop left rail: View, Columns,
  Slot, Plus, Repeat, Goal, Visibility, Appearance flyouts (tap-to-toggle),
  Undo, Redo, Refresh, Print, dark mode, Settings, Sign out

v1.110.1
2026-05-11 13:32:33 +02:00
81f3a42620 feat: task edit alignment + settings tabs + mobile sidebar
- Someday task edit: add icon/checkbox column spacers before the
  textarea so the edit field aligns exactly with the task text column
- Settings tabs: remove outer padding, use space-around + nowrap so all
  9 icons fit in a single row without wrapping
- Mobile: left sidebar rail (PanelLeftOpen button) — slides in from
  left with nav controls (prev/next day/week, today), actions (search,
  calendar jump, projects, focus, quick settings), and bottom controls
  (dark mode, settings, sign out). CSS class .mobile-left-sidebar and
  .mobile-rail-btn added for easy customization.

v1.110.0
2026-05-11 12:51:17 +02:00
74268edb85 fix: align Add task input with task text column
SomedayAddTask now accepts showProjectIcons and showTaskCheckboxes props.
The bottom add-task row renders as a flex layout with matching spacers
for the icon column (18px) and checkbox column (16px), so the input
field left-edge exactly aligns with the task name column. Right-padding
keeps the input from extending into the provider icon column.

v1.109.1
2026-05-11 12:40:23 +02:00
b53eff9fd1 feat: sort completed tasks to bottom + align Add task input
- Completed tasks in someday lists now always render below all active
  tasks. Slot system builds from incomplete tasks only; done tasks get
  their own section at the bottom outside the droppable slots.
- "Add task..." input right margin increased to 24px so its right edge
  stops before the provider icon (G) column, matching task row layout.

v1.109.0
2026-05-11 12:29:01 +02:00
6325e07912 fix: align ANY DAY toggle with tab buttons in tab bar
The ANY DAY label/icon div sits at the flex-end of the tab bar but
appeared misaligned with the tab buttons. margin-bottom: 6px brings
it to the correct visual baseline.

v1.108.4
2026-05-11 12:25:52 +02:00
aa322dfac3 fix: list style popover no longer clipped by card overflow:hidden
ListVisualsPopover used position:absolute which was clipped by the
weekly-someday-list card's overflow:hidden. Now uses position:fixed
anchored to the card's bounding rect. IconPicker sub-panel also
updated to position:fixed. Stabilized mousedown listener (onCloseRef
pattern, empty deps).

v1.108.3
2026-05-11 12:19:55 +02:00
5d55beeb55 fix: unify someday task icon column — all icons before checkbox
The  priority and delegation icons were still rendering inside the
text span (after the checkbox). Now ALL task icons (project, priority,
delegation) are consolidated into the single fixed-width 18px column
before the checkbox for someday tasks. Tasks with no icon get an empty
placeholder so checkboxes and task names stay column-aligned.

v1.108.1
2026-05-11 12:05:34 +02:00
55ef3614d1 feat: fix tab edit popover + align someday task items
- Fix tab double-click popover not showing: tab bar overflow-x:auto was
  clipping the position:absolute popover. Now uses position:fixed anchored
  to the button's bounding rect, captured on dblclick. Also stabilizes
  the outside-click listener (onCloseRef pattern, empty deps).
- Restructure someday task item order to: [project icon column] [checkbox]
  [task name]. Fixed-width 18px icon column (placeholder when no project)
  keeps all checkboxes and task names vertically aligned.

v1.108.0
2026-05-11 11:43:40 +02:00
6ccf61f09a feat: AnyDay tab edit via double-click; remove pencil icons; fix active tab style
CSS:
- Active tab no longer shows accent underline; instead border-bottom matches
  the someday area bg (#f9f9f9 / #1a1a1b dark), creating a raised browser-tab
  look where the active tab visually merges with the content below
- margin-bottom: -1px to cover the tab bar border-bottom on active tab

JSX:
- Double-click on any tab now opens TabVisualsPopover (edit tab)
- Pencil icon and dissolve-X button removed from tab wrappers
- TabVisualsPopover extended with: rename input, dissolve button
  (dissolve removes the tab grouping; lists are kept)
- onRename and onDissolve props added to TabVisualsPopover

v1.107.3
2026-05-11 10:49:43 +02:00
50aa310a2d feat(design): AnyDay area polish — tabs, cards, flyout menu
CSS:
- .weekly-someday padding: 0 (no left/right border bleed)
- .someday-tabs-bar: removed border-bottom + bg, padding 0 12px
- Tabs: underline-style (border-bottom: 3px accent on active), transparent
  bg — active tab visually merges with someday area
- Active count badge: accent-tinted instead of white-on-blue
- .weekly-someday-list: 300px wide (restored from 240px)
- .task-list-slot: min-height instead of fixed height + top/bottom padding
  so two-line tasks expand properly instead of being clipped

JSX:
- Combined provider icon + tab-assign + edit-style + delete into a single
  flyout menu per card header (trigger = provider icon if synced, else pencil)
- Flyout: "Open in Google/Apple/…", "Assign to tab", "Edit style", "Delete"
- Added menuOpenListId state to track open flyout

v1.107.1
2026-05-11 10:16:21 +02:00
f0df18c853 feat(design): redesign AnyDay/Someday area — pill tabs + card layout
Tabs:
- Pill-shaped tabs (border-radius: 20px) with proper background on inactive
- Inactive tabs now use readable dark text (--weekly-text) instead of
  barely-visible --weekly-text-light
- Active tab: accent color + white text + glow shadow (box-shadow)
- Count badges: larger, higher contrast, 700 font-weight
- Tab bar: taller padding (8px), thicker bottom border (2px)

Cards:
- Rounded corners (10px), border + subtle drop shadow
- Cards now 240px wide (was 300px) for better density
- Grid padding changed from padding-bottom only to full 12px padding
- List header has subtle tinted background + reduced height (48px)
- Title font tweaked to 0.85rem/700 (was 1.15rem/800) to match card size
- Add-task button padding aligned to card edges (12px horizontal)
- Removed p-2 Tailwind class that was double-padding the card

v1.107.0
2026-05-11 09:45:16 +02:00
16e51be26d fix: restore hover-fade on left header toolbar when in top-menu mode
Left section was missing opacity-0 group-hover:opacity-100 Tailwind classes
after the useLeftRail display:none change. Restored fade-in-on-hover
conditionally when top-toolbar mode is active.

v1.106.6
2026-05-11 09:36:11 +02:00
1bfbe4582f style: use FolderOpen icon for Projects in left rail and settings tab
v1.106.5
2026-05-11 09:33:24 +02:00
2f29355bb9 fix: header readability, icon consistency, settings menu position toggle, account tab
- Remove hover blur/opacity on header center section when left rail is active
  (group-hover:opacity-20 blur only applies in top-toolbar mode)
- Add min-height to desktop header so it doesn't collapse when both left/right
  sections are hidden in left-rail mode
- User icon in left rail now opens Settings on the Account tab directly
- Add Menu Position toggle (Left/Top) to Settings > General tab so users
  can find and change toolbar layout from the settings menu
- Replace FolderPlus with Briefcase icon for Projects in left rail to match
  the Settings sidebar's Projects tab icon

v1.106.4
2026-05-11 09:22:43 +02:00
9ef2b9fe5f fix: hide full header toolbar when left rail is active; fix user menu in left rail
- Right header section now also gets display:none when useLeftRail is true,
  so neither the left nor right header controls are visible in left-rail mode
- Replaced UserMenu (which positions from the right edge) with an inline
  dropdown in the left rail that opens to the right of the rail at left:52px,
  correctly positioned and functional
- Added LogOut icon to lucide imports

v1.106.3
2026-05-11 09:10:26 +02:00
9104625353 fix: true mutual exclusion for left rail vs header toolbar; fix rail bottom icons
1. Header left-section (view switcher, days, slot) is now display:none when
   in left-rail mode — previously it was opacity-0 on hover so both were
   visible simultaneously.

2. Left rail bottom now has two distinct buttons:
   - ⚙ Settings (cogwheel) → opens full SettingsSidebar
   - 👤 User → opens UserMenu (same as header avatar, with profile/sign-out)
   Previously a single User icon opened the settings instead.

v1.106.2
2026-05-11 08:56:31 +02:00
0e09711432 feat: menu position setting — left rail or top toolbar, not both
Add a "Menüposition / Menu position" segmented toggle (Left / Top) in
the expanded left-rail preferences panel and in the top-mode overlay.

- "Left" (default): persistent left rail; header toolbar controls are
  de-emphasised (fade in on hover only since they are duplicated).
- "Top": left rail hidden entirely; header controls always visible;
  PanelLeftOpen button in header opens the full settings overlay.

Persisted via saveSetting("menuPosition", …) so the choice survives
page reloads.

v1.106.1
2026-05-11 08:44:44 +02:00
c3dd70a438 feat(design): collapsible left rail toolbar with flyout menus
Replace the overlay quick-settings panel with a persistent fixed-left
toolbar on desktop. Collapsed (44 px) shows icon-only buttons; expanded
(240 px) shows the full labelled panel. Hovering a settings icon in
collapsed mode opens a flyout panel (view, columns, slot, visibility,
appearance). Mobile overlay behaviour is unchanged.

v1.106.0
2026-05-11 08:37:09 +02:00
754fa6ad25 feat(design): left rail (quick settings panel)
Switch panel background to --paper, all dividers to --line, section
labels to --ink-3, active view/days/slot buttons to --accent/--ink.
Soften panel shadow to 4% opacity. No logic, structure, or API changes.

v1.105.2
2026-05-10 14:10:18 +02:00
6f610ac669 feat(design): app shell + header + corner buttons
Trim desktop header height (py-2 → py-1.5) and switch border to --line
token. Update .weekly-header CSS class to use --line. Add baseline
letter-spacing: -0.005em to body. No logic, structure, or API changes.

v1.105.1
2026-05-10 14:08:26 +02:00
ac19e13714 style: AnyDay "Add task..." reads as a real input field
Give the bottom-of-list "Add task..." input a framed background (white
with a subtle border in light mode, slate-800 with a darker border in
night mode) plus a small radius and padding, so it visually matches user
expectations of an input. The inline slot-editor that appears when you
click on an empty slot keeps the transparent look so it blends with the
surrounding task rows.

v1.104.1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 22:58:48 +02:00
8958df03ce feat: focus-triggered MS To-Do delta sync for near-instant change reflection
Pull-sync now runs on visibilitychange + window focus (in addition to mount
and the slow 15-min safety-net interval), throttled to one call per 5s. The
moment the user returns to the tab the app reconciles, so an Outlook-side
checkbox/star/title change shows up within a second of refocusing the tab
instead of after a 15-minute wait.

To keep this cheap, the Microsoft Graph delta endpoint
(/me/todo/lists/{id}/tasks/delta) is used when we have a stored deltaToken
for a synced list — typically a few hundred bytes per call when nothing
changed. Tokens are persisted on SomedayList.syncDeltaToken (new column,
migration applied) and refreshed each call. On 410 Gone (token expired
>30 days) we fall back to a full fetch and prime a new chain. Delta also
brings remote deletions (@removed) so they propagate locally without
needing a full list scan.

v1.104.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 21:58:00 +02:00
f61f5ddb7a fix: pull-sync now reconciles per-field so Outlook star reflects locally
The previous timestamp gate (`if (remoteUpdated <= localUpdated) continue`)
hid genuine remote-side changes because every prior no-op pull bumped
lastSyncedAt to "now", making it newer than the Outlook lastModifiedDateTime
of a subsequent star toggle. Now the pull does a per-field comparison and
only writes lastSyncedAt when at least one field actually changed. Same fix
applied to the Google Tasks pull branch for consistency.

Also run a pull-sync once on mount instead of waiting up to 15 min, so
remote-side changes show up immediately on next page load.

v1.103.2

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 21:27:22 +02:00
bf2819ce67 fix: clear all cached series rows on recurring delete + render star for any important task
- deleteCachedEvent now removes every cached row that belongs to the same
  recurring series (master id + all "<masterId>::*" instances + rows whose
  recurringEventId matches the master), so deleting "all occurrences" no
  longer leaves orphan rows that resurface on the next read.
- getPriorityBadge: surface the yellow star whenever a task is marked
  important (e.g. a starred Outlook To-Do task pulled in via sync), even
  when the active priority style is Eisenhower / ABCDE / Ivy Lee.

v1.103.1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 20:08:59 +02:00
42905641cd feat: bidirectional Outlook/MS To-Do sync, busyStatus + star, list-delete dialog
- Outlook recurring delete: also delete the specific instance after the master
  to clean up orphaned first occurrences.
- CachedCalendarEvent gains busyStatus column (migration applied) so showAs
  changes from Outlook flow back into the weekly view.
- Outlook create/update now round-trip the full event (busyStatus, visibility,
  attendees, reminders, recurrence link) via a shared response mapper.
- MS To-Do importance ('high' star) ⇄ local importance flag in pull-sync,
  push-sync, initial import, and local-task POST/PATCH; dueDateTime ⇄
  scheduledDate added to pull-sync.
- Local task PATCH now fires a best-effort push to Outlook/Google/Synology so
  any field change keeps both sides aligned.
- AnyDay list delete dialog now offers Cancel / hide locally / delete on both
  sides; new deleteMsTodoList + deleteGoogleTaskList helpers.

v1.103.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-03 19:53:09 +02:00
9ce9f4484a feat: priority icons toggle, projects sidebar overhaul, intro hints
- Add Show/Hide Priority Icons toggle in left settings panel under Project Icons
- Projects sidebar: move Add Project form to the top, add per-project
  filter button (filters tasks across all views), expand/collapse to show
  tasks underneath each project name, active-filter banner with clear
- Intro hints on first load: briefly reveal hidden header controls then
  fade out, and bounce-scroll the main grid to reveal off-screen tasks

v1.102.0
2026-05-02 09:50:26 +02:00
ffe2f46c64 feat: flag icons, real timezone picker, multi-timezone display
Wave-2 user feedback (points 4–6):
- Language picker: replace emoji flags (which don't render reliably on
  Windows) with inline-SVG flag components for GB/DE/FR/ES/IT. Used
  in both the Settings localisation tab and the onboarding wizard.
- Timezone: replace the read-only Intl.DateTimeFormat display with a
  real <select> over a curated list of major IANA zones. Each option
  shows "(UTC±hh:mm) CODE — Region" and the list is sorted by current
  offset, then code, then IANA name.
- Multi-timezone: new ExtraTimezonesEditor in the localisation tab lets
  users pin additional zones (stored in user.viewSettings.extraTimezones
  to avoid a migration). The time-grid axis now renders the equivalent
  hour for each pinned zone next to the local label, helpful for
  scheduling across regions.

v1.100.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-01 20:00:53 +02:00
291ff23859 icons for priority and colors for someday lists 2026-05-01 14:49:54 +02:00
d3fedc4d0d fix: someday list color tints background + apply pending migration
- color now renders as a tinted background (alpha 0x1f) plus a 4px
  accent border, matching the user's "background colorcoded" request.
- Migration 20260501 was unapplied locally; mark prior failed
  20260403_add_task_url as applied and deploy 20260501. Without it
  the API silently dropped color/icon and the SSE refetch wiped the
  optimistic update, so visuals never appeared.

v1.99.1

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-01 14:34:23 +02:00
52d160ccea feat: projects tab, priority icons, list/tab visuals
Wave-1 user feedback (points 7–10):
- Settings: new Projects tab with full CRUD (name, color, icon picker)
- Priority Icons render in simple/calendar/list views with style-specific
  visuals (Eisenhower icons, ABCDE letters, Ivy Lee 1–6, Pareto star).
  Toggle + style selector in Settings; Ivy Lee ranks now persist to
  task.priority so cross-view badges stay consistent.
- Someday Lists gain optional icon (left of title) and color (left
  border tint), edited via a pencil-popup with IconPicker + color picker.
- Tabs gain optional icon and color, stored in user.viewSettings JSON
  and edited via the same popup pattern.

Schema: SomedayList.color/icon, User.showPriorityIcons/priorityStyle.

v1.99.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-01 14:23:56 +02:00
38462c50f7 fix: PDF export style and header fixes
- Fix weather toggle disabled when lat/lon set but weatherEnabled=false:
  now enabled whenever a weather location is configured
- Default task duration: no-endTime tasks default to 30min (not 60min)
- Tasks without a project: remove left border entirely — only project-
  assigned tasks show a colored left border; this matches the user's
  explicit request that only calendar events have background/indicators
- Header order: show date first (top), then weekday name below — matches
  webapp "above" date layout setting
- Lighten grid lines (#ececec) and stripes (#fafafa/#f0f7ff) to reduce
  the heavy calendar-grid appearance; remove half-hour separator lines
- Lighten outer grid border and time-column border/bg to match

v1.96.1
2026-04-13 12:41:15 +02:00
27ccd275f6 fix: S/M/L font size buttons now take effect immediately
saveSetting() for DEVICE_SETTINGS_KEYS (viewDays, cellDuration, startHour,
endHour, fontSize, showSubHourSlots) was saving to the cookie but returning
early before calling setProfile — so profile.fontSize never changed and the
CSS class font-size-s/m/l was never applied. Adding setProfile() to the
device-settings path fixes all of these keys at once while still keeping
the setting out of the DB.

v1.95.6
2026-04-13 09:56:19 +02:00
f75bd6ebe5 feat: add week view PDF/print export with live preview
Adds a print/export modal (WeekPrintModal) accessible via a Printer icon
in the header toolbar. Users can configure date range, time window (startHour–endHour),
number of days, and toggle all-day, no-time, and weather sections. A live
CSS-grid preview updates as settings change. The PDF is generated server-side
via @react-pdf/renderer on the /api/user/export-week-view route:
- Landscape A4 with absolute-positioned time-spanning task blocks
- Day headers use the user's weekdayColor/dateColor/headlineFontWeight from DB
- Oswald font loaded dynamically from Google Fonts (falls back to Helvetica-Bold)
- Timezone-aware task grouping (±1 day query buffer + local date key)
- Optional weather line (Open-Meteo) and all-day strip
- Footer with date range, username, and page numbers

v1.95.0
2026-04-09 10:26:06 +02:00
075ccdba04 feat: persist view style and start-on preference per device
viewStyle, showTimeGrid, and startDayOffset now also write to a device
cookie so each device remembers its own view independently. Cookie
wins over DB on load, giving phone/desktop their own default view
without losing the cross-device DB fallback.

- DEVICE_ALSO_COOKIE_KEYS: viewStyle, showTimeGrid, startDayOffset
- saveSetting writes cookie for these in addition to DB
- viewStyle and showTimeGrid lazy-init from cookie on first render
- Both fetchProfile and fetchUserInfo apply cookie overrides last

v1.94.1
2026-04-07 23:29:35 +02:00
0b40974b88 feat: persist sidebar toggle settings per-device via cookies
The sidebar eye-toggles (Someday, All-day, Checkboxes, Project Icons,
Weather) and the sub-hour slots toggle now save to a device-local
cookie instead of the DB, so phone and desktop can have independent
display preferences.

- DEVICE_SETTINGS_KEYS extended with showSubHourSlots
- New DEVICE_VIEW_SETTINGS_KEYS for per-view sidebar toggles
  (showSomeday, showAllDayEvents, showTaskCheckboxes, showProjectIcons, weatherEnabled)
- saveViewSetting writes cookie-only for device keys; DB untouched
- getEffective checks device cookie before DB per-view overrides
- Cookie restores applied after DB load in both fetchProfile and
  fetchUserInfo so device preference always wins

v1.94.0
2026-04-07 10:10:37 +02:00
36744d0e09 fix: save font size per-device in cookie instead of DB
Font size (S/M/L) is now stored in the browser cookie
'setting_fontSize' alongside the other per-device settings
(viewDays, cellDuration, startHour, endHour).

This means mobile and desktop can each keep their own preferred font
size — changing it on your phone no longer overwrites the setting on
your desktop monitor and vice versa.

The cookie is read immediately at component init (before the DB load),
so there is no flash of the wrong size on page load. The DB value is
still written so that the setting has a reasonable default on new
devices before a local preference is set.

v1.93.1
2026-04-07 09:58:46 +02:00
0a84bf3114 feat: preserve tabs on sync disconnect/reconnect
Disconnecting a synced list (Google/Outlook/Synology) now uses a
soft-disconnect: tasks are soft-deleted and the external link is
cleared, but the SomedayList record is kept with its tab assignment
intact. When the user reconnects, the import route finds the list by
title, re-links the external provider, and restores tasks (clearing
deletedAt). Tabs survive the full disconnect/reconnect cycle without
the user needing to drag lists back to tabs.

Also clears deletedAt on task re-import so previously disconnected
tasks become visible again on reconnect.

v1.89.0
2026-04-06 18:07:03 +02:00
d8d1003e78 feat: show priority & delegation icons in all views
A small icon appears before each task title whenever priority has been set
in the Priority View. Works in simple, calendar, list, someday, and kanban.

Icon + color mapping
   Zap         red  #ef4444  Sofort erledigen  (urgent + important / ABCDE A)
  🕐 CalendarClock blue #3b82f6  Planen           (important, not urgent / B)
  ↗ CornerUpRight orange #f97316 Delegieren       (urgent, not important / D)
  📦 Archive     gray #9ca3af  Eliminieren       (neither / E)
  🕐 Clock       yellow #eab308 ABCDE C only

Delegation badge
  🤖 Bot   purple  task.delegatedTo === "AI"
  👤 User  purple  task.delegatedTo = person name

Hover tooltip shows the full label (e.g. "Sofort erledigen", "Planen").
Icons are 11–12 px so they sit inline without disrupting the task row.

v1.88.2
2026-04-06 16:03:16 +02:00
149f0cf021 feat: priority view resize handle + dense task cards with actions
Resize handle:
- Drag the divider between priority panel and calendar to resize it
- Height persists in cookie (priorityViewHeight)

Dense task cards:
- Single-row compact layout: [✓] date · title · action icons
- Date shown before the title
- Action icon bar: rename (✏), note (📝), link (🔗), project (📁), delegate (👤), remove (×)
- Inline title editing: double-click or click ✏ icon
- Inline note textarea: toggles on 📝 click, saves on blur
- Inline URL input with open-link button: toggles on 🔗 click
- Inline project selector: toggles on 📁 click
- Icons colored when field has a value (note, url, project, delegate)
- Export/import now round-trips url, kanbanStage, recurrenceDays fields

v1.88.0
2026-04-06 12:25:05 +02:00
46a05a87c3 feat: add Priority View — Eisenhower, ABCDE, Ivy Lee, Pareto, delegation
New "Priority View" (Target icon in toolbar) fusing four prioritization
frameworks into a single, filterable view:

- Eisenhower Matrix: 4 quadrants (Do/Schedule/Delegate/Delete) based on
  urgency × importance; unclassified tasks shown below for quick assignment
- ABCDE Method: five collapsible groups (A=Critical → E=Eliminate) with
  inline grade assignment buttons
- Ivy Lee Method: pick exactly 6 tasks for tomorrow, ordered by priority
- Pareto 80/20: highlights the important 20% of tasks with a progress bar
  and one-click "mark as important" for the rest

New DB fields: urgency (Boolean), importance (Boolean), priority (A–E),
delegatedTo, delegationNote — all persisted via Prisma + API.

Filters: by project, someday list (incl. scheduled / unscheduled), and
timespan (today / this week / next week / all).

Delegation modal: assign to a named person or to AI with optional
instruction notes; displayed as inline badge on task cards.

v1.87.0
2026-04-06 02:07:05 +02:00
8ffb6a0690 feat: accessibility follow-up — heading hierarchy, keyboard resize, contrast fix
- Fix heading hierarchy: modal titles h3→h2 (RecurrenceModal, two WeeklyView dialogs),
  SettingsSidebar h4→h3 for Localisation, Data Export, Backup & Restore sections
- Add keyboard resize handle: role=slider, tabIndex, aria-valuemin/max/now/text,
  ArrowUp/Down keys to adjust task duration in 15-min increments
- Add aria-label to CalendarEventModal notes textarea fallback
- Color contrast: raise --weekly-text-light from #a6a6a7 (~2.4:1) to #767676 (~4.5:1)
  on white background to meet WCAG AA

v1.86.0
2026-04-06 00:25:08 +02:00
5c01869444 feat: comprehensive accessibility pass — ARIA, focus traps, keyboard move, live regions
- Modals (SearchModal, ImportListModal, CalendarEventModal): role=dialog,
  aria-modal, aria-label, focus trap via keydown Tab handler, aria-hidden on backdrop
- OnboardingWizard: role=dialog on card, aria-hidden on overlay, aria-current=step
  on progress dots wrapped in <nav><ol>, aria-label on nav buttons
- GridTaskBlock: aria-label on all ~12 action buttons (complete, edit, add subtask,
  notes, rolling, recurrence, project, link, delete, move), aria-expanded/aria-pressed
  where applicable, aria-hidden on all decorative SVGs, aria-label on inline edit
  textarea and subtask inputs; note indicator div → button
- Keyboard task move: new "Move Task" dialog in GridTaskBlock with date+time
  inputs, routed via onMoveTask prop → moveTaskToSlot in WeeklyView
- WeeklyView: visually-hidden aria-live="polite" region with announce() helper;
  announces task add, complete/incomplete, delete, sync complete/failed
- Forms: aria-invalid + aria-describedby + role=alert on error paragraphs in
  TaskForm; auth error div gets id + role=alert; email input gets aria-describedby;
  show/hide password button gets aria-label + aria-pressed
- Spinners: role=status + aria-label on standalone spinners (TaskItem delete,
  WeeklyView sync); aria-hidden on inline button spinners (AuthForm, TaskForm,
  CalendarSettings, SettingsSidebar, EmailAuthForm)
- layout.tsx: Open Graph and Twitter Card meta tags added

v1.85.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 18:18:08 +02:00