Add a new settings page for managing user-level webhooks. Extract
webhook form into shared WebhookManager component used by both
project and user webhook settings. Add routing, translations,
and navigation entry.
Change e.key to e.code in global keyboard shortcut handlers for
consistency with the new event.code-based shortcut system:
- ProjectList.vue: 'j'/'k'/'Enter' -> 'KeyJ'/'KeyK'/'Enter'
- useGanttBar.ts: 'ArrowLeft'/'ArrowRight' (identical values, for consistency)
- Modal.vue: 'Escape' (identical value, for consistency)
- Replace tailwindcss v3 with tailwindcss v4 + @tailwindcss/vite plugin
- Create dedicated tailwind.css entry with granular imports (skip preflight)
- Use CSS-first config with prefix(tw) instead of JS config
- Switch from PostCSS plugin to Vite plugin for better performance
- Update class prefix from tw- (dash) to tw: (colon) in all Vue files
- Remove @tailwind directives from global.scss
- Delete tailwind.config.js (replaced by CSS directives)
- Update stylelint at-rules for v4 directives
Allow users to switch between oldest-first and newest-first comment
ordering via a toggle button in the comments heading. The preference is
persisted as a frontend setting (commentSortOrder) and passed to the API
as the order_by query parameter so pagination works correctly.
When all comments fit on a single page, toggling reverses them
client-side to avoid an extra API call. New comments are inserted at the
correct position based on the active sort order, and in newest-first
mode the view scrolls to the top after adding a comment.
Link-share users fall back to a local (non-persisted) sort order since
they cannot save user settings.
Use the `ignoreDuplicates` prop from vue3-notification to ignore duplicate notifications, show a count (×N) instead when notifications are merged.
Superseeds and closes https://github.com/go-vikunja/vikunja/pull/971
---------
Co-authored-by: Dominik Pschenitschni <6173598+dpschen@users.noreply.github.com>
This adds the following shortcuts:
- `.` to copy the task identifier
- `..` to copy the task identifier and title
- `...` to copy the task identifier, title, and url
- `Control + .` to copy the task url
I think showing the priority of a task regardless of its value can be useful, the option for the user to choose the minimum priority for visualization is exposed in the settings. The default value is `priority.HIGH`, that corresponds to the current behavior.
Co-authored-by: konrad <k@knt.li>
Reviewed-on: https://kolaente.dev/vikunja/vikunja/pulls/3075
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Leonardo Cossutta <leonardo.cossutta@gmail.com>
Co-committed-by: Leonardo Cossutta <leonardo.cossutta@gmail.com>