The absolute reminder form had its own chips-only calendar and confirm button. It now shows the same panel as the due, start and end date pickers. Clear only resets the selection; nothing is saved until Confirm.
The calendar, shortcuts and footer can now be reused outside the trigger-and-popup Datepicker. The bottom-sheet header action style moves to Modal so other sheets can use it.
Screen readers announced the due, start and end date buttons only by their value. Datepicker now accepts ariaLabelledby and combines it with the trigger's own id, like the repeat button.
Dismissing a native file picker fires a bubbling cancel on the file input, which the task modal's <dialog> treated as its own and closed. Escape still closes the modal, since the dialog's own cancel targets the dialog.
The row now only styles its own layout, label, remove button and hover reveal. Overrides for the controls slotted into it live in TaskDetailView, which renders them, so their root elements match without :deep.
Avatars overlap by the same proportion as in list and kanban and spread to the 4px gap on row hover or keyboard focus, so the remove buttons stay usable. Touch devices always show them spread.
Arrow keys still move into the list. The scrollable list itself is kept out too, and the results close when focus moves to another field, since the absolutely positioned list would otherwise cover it.
Renders the row wrapper, visibility rule and remove button once instead of in ten copies.
Address pr-swarm finding (maintainer decision): duplicated property rows.
The preload listened for focus on the Multiselect root, which only fires when
the root is focused programmatically. Clicking straight into the input showed
no suggestions until the user typed.
Value fields (assignees, labels, priority, progress, dates, reminders,
repeat, color) are now compact rows in the sidebar that show their current
state and are edited in place. One-shot actions (subscribe, attachments,
relation, time tracking, move, duplicate, delete) move into an ellipsis
menu next to the mark-done and favorite buttons.
Read-only users only see the rows that have a value. The sidebar stacks
label above value when its column gets narrow, and the properties render
above the description on mobile.
See https://community.vikunja.io/t/ux-proposal-task-detail-simplify-sidebar/4755
ReminderDetail ignored the disabled prop, so the popup opened and edited the
local draft even without write access. Reminders also kept showing the
"Add a reminder" trigger when disabled.
In filter bucket mode a bucket's search was written into the shared search options and never reset, so buckets processed afterwards (random map order) inherited it.
TaskCollection.ReadAll built the saved filter's collection but recursed with the request search only, so filters.s was never applied. The stored search now takes precedence, matching view and bucket filter searches.
Like the previous picker, detect the newest emoji version the OS font draws in colour with a canvas test and filter the shared catalog, so the picker and the editor autocomplete don't offer blank boxes.