Commit Graph
3784 Commits
Author SHA1 Message Date
kolaente 976a14fb66 chore(frontend): regenerate API client for filter docs 2026-10-19 13:25:00 +02:00
renovate[bot]andkolaente 864f198ae7 chore(deps): lock file maintenance 2026-10-19 10:40:27 +02:00
renovate[bot]andkolaente 081b8c1dbf chore(deps): update dependency ip-address to v10.7.4 2026-10-19 10:06:00 +02:00
renovate[bot]andkolaente 8e746f2f57 chore(deps): update dependency launch-editor to v2.14.2 2026-10-19 10:05:40 +02:00
kolaente 96d80b6c40 fix(sentry): only report resource load failures from our own origin
Browser extensions inject third-party images (e.g. yahoo.co.jp favicons)
into the page, and their load failures were reported as ours.
Refs FRONTEND-OSS-263
2026-10-19 10:05:11 +02:00
kolaente 90cbc39c27 fix(sentry): handle cyclic objects when redacting events
Console breadcrumbs keep the raw logged arguments until Sentry normalizes
the event, which happens after event processors run. A cyclic object in
there, such as the Vue router internals a browser extension logged, sent
redactSensitiveParams into infinite recursion and the event was lost.

Fixes FRONTEND-OSS-2M2
2026-10-19 10:04:53 +02:00
Frederick [Bot] 523ed59b31 chore(i18n): update translations via Crowdin 2026-10-19 00:10:42 +00:00
kolaente f17b184d6b chore(frontend): regenerate API client for bulk task fields doc 2026-10-16 15:49:28 +02:00
busslinaandGitHub bbe3dbe0f7 fix(frontend): handle Escape on keydown in Quick Actions (#4129) 2026-10-16 11:44:45 +00:00
kolaente c8845dafc4 fix(kanban): allow auto-scrolling between buckets while dragging on mobile
Mandatory scroll snapping on narrow screens snapped the board back after
each small auto-scroll step from sortablejs, so tasks could only be
dropped into buckets already visible. Disable snapping while dragging.

Fixes #4163
2026-10-15 23:16:16 +02:00
kolaente 3ec925ef84 fix(frontend): stop color picker from echoing model changes as updates
The task detail view saves on every color picker update. The API returns
hex_color without '#', so the picker re-emitted the normalized value
after each save. While dragging, out-of-order save responses kept
flipping the color, each echo triggering another save in an endless loop.

Fixes #4156
2026-10-15 17:18:35 +02:00
kolaente 1368ee5c2e feat(datepicker): advance to minutes after typing the hour
Once the hour input holds a complete hour (two digits, or a single digit
that cannot start a valid two-digit hour in the current 12h/24h format),
the hour is committed and focus moves to the minutes input. Both inputs
select their content on focus so typing replaces the value.
2026-10-15 13:44:59 +02:00
kolaente f0d90b8d02 fix(datepicker): skip time step buttons when tabbing
Tab from the hours input now lands on minutes directly. The step buttons
stay mouse-clickable; ArrowUp/ArrowDown on the inputs remain the keyboard
path.
2026-10-15 13:44:59 +02:00
kolaente ae331e62f4 fix(time-tracking): start timer at chosen start time
Starting a timer always used the click time, discarding a start time the
user had picked in the form. Only an untouched start now falls back to
the click time.
2026-10-15 13:42:26 +02:00
Frederick [Bot] 3ae00e9ded chore(i18n): update translations via Crowdin 2026-10-15 00:09:51 +00:00
dependabot[bot]andkolaente 95f1f02ada build(deps): bump js-yaml from 3.15.1 to 3.15.2 in /frontend
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.15.1 to 3.15.2.
- [Changelog](https://github.com/nodeca/js-yaml/blob/3.15.2/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/3.15.1...3.15.2)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 3.15.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-14 12:08:28 +02:00
Frederick [Bot] 6f0477c8a2 chore(i18n): update translations via Crowdin 2026-10-14 00:09:55 +00:00
dependabot[bot]andkolaente 3dd166cbff build(deps): bump shell-quote from 1.10.0 to 1.12.0 in /frontend
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.10.0 to 1.12.0.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.10.0...v1.12.0)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.12.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-13 22:21:17 +02:00
kolaente b82574963e fix(client): throw failed responses as ApiError
Every non-2xx response now rejects with an ApiError carrying the problem
fields and the HTTP status. A thrown plain object reached Sentry with a
meaningless title and no stack, and the 4xx/5xx split relied on duck-typing
plain objects. 4xx are dropped as ordinary request failures, 5xx stay reported.

The token refresh and /info probe told HTTP failures from transport errors by
`instanceof Error`, so they now exclude ApiError explicitly.

Fixes FRONTEND-OSS-2K0
2026-10-13 21:43:30 +02:00
kolaente 4e40c8146c fix(kanban): show no cover when the cover image fails to load
A failed preview fetch escaped the watcher into Vue's error handler, which
toasted and reported it. Same handling as FilePreview: the card keeps working
without the decorative image.

Fixes FRONTEND-OSS-2KV
2026-10-13 21:43:30 +02:00
kolaente 533f5c36bf fix(client): turn non-JSON error bodies into problem bodies
The generated client throws the raw body text when an error response is not
JSON, e.g. a proxy's "Bad Gateway" or Go's "404 page not found". Sentry wrapped
the bare string as a synthetic Error and the request-failure filter could not
see its status, so ordinary 4xx failures were reported.

Fixes FRONTEND-OSS-2KT
2026-10-13 21:43:30 +02:00
renovate[bot]andkolaente 1414336e14 chore(deps): update dependency ip-address to v10.7.3 2026-10-13 21:34:47 +02:00
renovate[bot]andkolaente 728f7f2f7f chore(deps): update dependency basic-ftp to v6.2.3 2026-10-13 21:34:31 +02:00
renovate[bot]andkolaente c7f2adaf89 chore(deps): update dependency @babel/core to v8.0.7 2026-10-13 21:33:31 +02:00
dependabot[bot]andkolaente 00206347e2 build(deps): bump joi from 18.2.3 to 18.2.9 in /frontend
Bumps [joi](https://github.com/hapijs/joi) from 18.2.3 to 18.2.9.
- [Commits](https://github.com/hapijs/joi/compare/v18.2.3...v18.2.9)

---
updated-dependencies:
- dependency-name: joi
  dependency-version: 18.2.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-13 21:32:38 +02:00
dependabot[bot]andkolaente b8d6de9bc5 build(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /frontend
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 5.0.9 to 5.0.12.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.9...v5.0.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 5.0.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-13 21:31:33 +02:00
kolaente 2d92bf4b53 fix(frontend): apply the history fallback to the remaining route dialogs
About, project info, archive, background, new project and the saved
filter dialogs closed through router.back() as well.
2026-10-13 17:57:13 +02:00
kolaente 60793ac873 fix(frontend): close project settings dialogs opened without history
The edit and delete dialogs closed through router.back(), which does
nothing when the dialog is the tab's first history entry (new tab,
bookmark). Cancel, close and save then left the edit dialog open and
only "Delete" still navigated, leading users into deleting the project.

Fall back to the project, or home, when there is no entry to go back to.
2026-10-13 17:57:13 +02:00
kolaente fe20ccd21e test(e2e): cover closing directly opened project settings dialogs 2026-10-13 17:57:13 +02:00
kolaente 58f7cf47f4 fix(editor): keep restored comment draft in edit mode
Restoring a draft set the raw stored HTML as model value. When the editor
normalized it differently (collapsed whitespace, trailing paragraph after
lists), the modelValue watcher reset the editor into preview mode.
2026-10-13 12:20:57 +02:00
kolaente d8df83c43a fix(frontend): cache created tasks with their view position
Created cards were inserted into the board cache with position 0. Dropping
another card at the top of the bucket then sent position 0, which made the
server recalculate every position in the view behind the client's back.
2026-10-13 11:54:08 +02:00
kolaente 8729efa4fc feat(api): return per-view positions from task create
Create, bulk create and duplicate responses now carry the task's stored
position in every view, so clients can place the new card without
refetching the board.
2026-10-13 11:54:08 +02:00
kolaente afde279a6d fix(quick-actions): update the search query during IME composition
v-model skips input events while an IME composition is active. Android
keyboards compose every word, so the query lagged behind the input, the
results were not filtered, and tapping a result committed the composition
and re-rendered the list under the finger.

Resolves #4120
2026-10-13 11:45:00 +02:00
kolaente 18cdd717e9 fix(quick-add): apply default due time to dates without a time
Only the keyword expressions (today, tomorrow, ...) used the configured
default due time. Explicit dates, weekdays and ordinal days kept
whatever time the parser produced, e.g. 00:00 for 2026-10-13.

Fixes #4122
2026-10-13 11:43:07 +02:00
kolaente 2228064224 fix(quick-add-magic): do not parse date ranges as due date
A title like "31.12.2026 - 01.01.2027 Happy new year" had its first date
taken as the due date, leaving "- 01.01.2027 Happy new year" as title.

Resolves #4123
2026-10-13 11:13:10 +02:00
Frederick [Bot] 4e2a899395 chore(i18n): update translations via Crowdin 2026-10-12 00:13:01 +00:00
Frederick [Bot] 6263ff1295 chore(i18n): update translations via Crowdin 2026-10-10 00:11:17 +00:00
kolaente e7d7f173e4 fix(frontend): show 'just now' for timestamps within the last minute
The shared now ref ticks every 60s, so freshly created items lay in its future and rendered as 'in a few seconds'.
2026-10-06 13:06:08 +02:00
Frederick [Bot] 60fd10b24b chore(i18n): update translations via Crowdin 2026-10-06 00:10:52 +00:00
kolaente 0437395435 fix: use vite default build target
This allows us to support older browsers, based on vite's baseline-widely-available compile target
2026-10-04 17:03:31 +02:00
Frederick [Bot] f774c773c2 chore(i18n): update translations via Crowdin 2026-10-04 00:54:34 +00:00
Frederick [Bot] 6cff0514bc chore(i18n): update translations via Crowdin 2026-10-03 00:10:38 +00:00
kolaente a16be96aa4 chore: v2.7.0 release preparations 2026-10-02 19:10:44 +02:00
kolaente 435e198c42 test(e2e): cover websocket re-authentication
A second auth with the same session is accepted now; a token of another session is rejected.
2026-10-02 19:08:02 +02:00
kolaente 439877af42 test(e2e): expect the project wording in the remove share dialog 2026-10-02 19:08:02 +02:00
kolaente bc14035d9c chore(client): regenerate the frontend API client
The v2 link share descriptions changed.
2026-10-02 19:08:02 +02:00
kolaente e20862c234 fix(sharing): call the shared entity a project in the remove dialog
The dialog and success toast used the List view's name.
2026-10-02 19:08:02 +02:00
kolaente b5f27803b1 feat(websocket): re-authenticate open sockets with a renewed token
Sockets closed at their token's expiry even after the client renewed,
forcing a reconnect and losing events in the gap. A second auth on an
open socket must match its user and session and re-runs the session
check before the expiry timer moves. The client sends the renewed token
on the open socket after every refresh, schedules the proactive refresh
for a session that existed before mount, and refreshes a token expiring
within seconds before authenticating, since its server clock can lag by
up to a second.
2026-10-02 19:08:02 +02:00
kolaente 1e4fe4371a fix(websocket): refresh an expired token before reconnecting
The server closes the socket when its token expires. Reconnecting with that token failed auth and stopped the socket for good. A transient refresh failure now retries with backoff instead of sending the stale token, and backoff only resets after a successful auth.
2026-10-02 19:08:02 +02:00
kolaente 0e4a65de25 fix(sharing): list what is deleted when removing project access
Removing a user or team from a project, removing a team member, leaving a team and deleting a team now say that task assignments, subscriptions and webhooks of whoever loses access are deleted too.
2026-10-02 19:08:02 +02:00