2618 Commits

Author SHA1 Message Date
Hosted Weblate
9034e707bf
🌐 Merge branch 'origin/develop' into Weblate. 2026-11-09 11:09:57 +01:00
Alexis Morin
968edc6a55
🌐 Add translations for: French (Canada)
Currently translated at 96.7% (2285 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-09 11:07:01 +01:00
AntonPalmqvist
a2dfcb8669
🌐 Add translations for: Swedish
Currently translated at 95.9% (2266 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/sv/
2026-11-09 11:06:59 +01:00
Alexis Morin
5b9bf3cbba
🌐 Add translations for: French (Canada)
Currently translated at 96.5% (2279 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-08 10:51:26 +01:00
Danial Shirali
44a0cc7147
🌐 Add translations for: Persian
Currently translated at 94.5% (2233 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fa/
2026-11-08 10:51:22 +01:00
Alexis Morin
dac470cc94
🌐 Add translations for: French (Canada)
Currently translated at 94.4% (2231 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-07 08:51:35 +01:00
Stephan Paternotte
da8cdb734b
🌐 Add translations for: Dutch
Currently translated at 100.0% (2361 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/
2026-11-07 08:51:32 +01:00
alonso.torres
88416d2542 ✨ Label the copy kept before a repair in the History panel
Before it repairs a damaged file, the backend keeps a copy of it as a
system snapshot, and the repair notice points to the version history to
find it. The History panel listed that copy among the autosaves, so it
could not be told apart.

The History panel lists the copies kept before a repair as their own
entry per day, "Before automatic repair, <date>", above that day's
autosaves, and the preview of such a copy uses the same label.
2026-11-05 23:59:32 +01:00
alonso.torres
61bf66342b ✨ Tell repairs, damaged data and other files apart in save notices
The notice of a rejected save always said the same thing. It did not
name the file when the user had moved to another one, gave no hint when
the page held data that was already invalid, and replaced the notice of
a backend repair still on screen, since the store holds one toast.

The backend flags a rejection whose first commit touches pages or
components that failed validation before it (:preexisting-damage). The
rejection notice names a file other than the open one, says when the
data was damaged before, and folds into a repair notice still on
screen; a later repair notice folds a rejection notice in the same way.
The notice says that the latest changes were undone, no longer that the
rest of the work is saved.
2026-11-05 23:59:32 +01:00
alonso.torres
6426b17c9c 🐛 Fix small save bugs found by the rollback test plan
- Ending a drag inside the frame the shapes already belong to sent an
  empty reparent save and bumped the revision. The move commits only
  when some shape changes parent.
- When a user restored a version, other sessions reloaded the file with
  no notice. They now see a dialog naming who restored which version
  (by its name, else its date), saying that later changes are no longer
  in the file and, when they had changes not saved yet, that those were
  lost.
- Exports drawn in the browser (PDF, SVG, and PNG when the WASM renderer
  draws it) and duplicating a file from the dashboard started at once,
  so an export could show changes a pending save then rejected, and a
  copy could miss queued edits. Both wait for the file's pending saves.
  A client export warns that it includes unsaved changes; a copy warns
  that it misses them.
2026-11-05 23:59:32 +01:00
alonso.torres
cb26e8a39b ✨ Keep autosave and the workspace alive when saves fail
- A save that failed on a short platform failure (a lost or refused
  database connection, lack of resources, a server shutting down, a
  serialization failure or deadlock, a socket or HTTP timeout, a host
  that did not resolve, an interruption) answered 500, which stops
  autosave. It now answers 503, which the frontend retries. Other I/O
  and database errors keep answering 500, timeouts 504.
- A save answered not-found no longer replaces the workspace with the
  access page. It is a terminal save error: the workspace stays open
  with the failed save notice, report and reload link. When edit rights
  are lost, the notice says how many changes could not be saved.
- A library sync marked the library synced three seconds later,
  whatever happened to its save. A rejected sync was undone but stayed
  marked: copies stayed out of date and the "updates available" notice
  never came back. The mark now waits for the save, a rollback of the
  sync brings the notice back, and a failed mark (e.g. the user just
  became a viewer) is logged instead of leaving the workspace.
- While saves fail the workspace is read-only. The view-mode banner
  says editing is disabled because changes can't be saved, with the
  Inspect banner's size and bold lead and no Done button. Users can
  still switch pages, pan, zoom and inspect. The lock lifts when a save
  lands and brings back the mode the user had or picked meanwhile; the
  WebGL context lock keeps the workspace read-only if it lasts longer.
  The lock lives in app.main.data.persistence.lock.
- A viewer is never locked. A role change that leaves the user a viewer
  keeps the edits that lost permission, queued and on screen, and shows
  the count notice again. The role change that brings edit rights back
  releases them and rolls them back on screen, as a rejected save would.
  Any other terminal failure is released by the next role change or file
  opened.

The debug faults `io` (socket timeout, 503) and `eof` (500) cover both
sides of the I/O rule.
2026-11-05 23:59:32 +01:00
alonso.torres
4f42ab1d2d ✨ Keep the valid commits of a save that fails validation
A save whose changes failed validation was rejected as a whole: autosave
stopped, the edits made after it piled up unsent, and a reload lost
them all, the valid ones included.

The frontend now sends each commit of a save as its own group with its
commit id (:changes-with-metadata). When applying and validating all of
them at once fails, the backend searches by bisection for the first
commit that fails, keeps the commits before it and answers with
:rejected (that commit and every later one). Only the kept changes are
stored, snapshotted and broadcast, so other users never see the rejected
ones. Flat :changes and groups without ids stay all-or-nothing; database
and network errors still fail the whole request. A rejection without an
error type is reported as an internal error.

The frontend rolls the file back to what the server holds: it undoes
every pending commit of that file, applies again the remote changes that
arrived meanwhile, and redoes the kept commits. Undoing only the
rejected commits would write stale values over a peer's later change to
the same attribute. The rejected and later commits leave the queue, the
buffer and the undo history, and a warning that hides after ten seconds
tells the user. The pure bookkeeping lives in
app.main.data.persistence.commits.

The pending notice of a commit the rollback dropped no longer leaves the
save status at pending, which made "Pin this version" hang and fail.

Debug tools drive these cases by hand: debug.commitInvalidChange() makes a
save fail validation, holdSaves() delays the answers, failNextSave() and
failNextRollback() fail them on purpose (backend flag debug-save-faults),
and persistenceState() shows the queue.
2026-11-05 23:59:32 +01:00
Andrey Antukh
45721bd836 🌐 Rehash and validate translations 2026-11-05 23:21:26 +01:00
Andrey Antukh
7d596f8197
🌐 Add translations for: French (Canada)
Currently translated at 92.5% (2185 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-05 22:20:21 +00:00
Andrey Antukh
fb49a992b0
🌐 Add translations for: Hindi
Currently translated at 73.3% (1731 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/hi/
2026-11-05 22:20:19 +00:00
Andrey Antukh
ebedd604e8
🌐 Add translations for: Swedish
Currently translated at 94.7% (2238 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/sv/
2026-11-05 22:20:18 +00:00
Andrey Antukh
c5a29c69e8
🌐 Add translations for: Serbian
Currently translated at 48.0% (1135 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/sr/
2026-11-05 22:20:16 +00:00
Andrey Antukh
5fcc1e375e
🌐 Add translations for: Yoruba
Currently translated at 41.1% (972 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/yo/
2026-11-05 22:20:14 +00:00
Andrey Antukh
dda0445314
🌐 Add translations for: Malay
Currently translated at 22.4% (530 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ms/
2026-11-05 22:20:12 +00:00
Andrey Antukh
3576248fb0
🌐 Add translations for: Hausa
Currently translated at 43.7% (1032 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ha/
2026-11-05 22:20:11 +00:00
Andrey Antukh
79b1e6e8ab
🌐 Add translations for: Dutch
Currently translated at 94.7% (2238 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nl/
2026-11-05 22:20:09 +00:00
Andrey Antukh
21172c4f0e
🌐 Add translations for: Latvian
Currently translated at 67.8% (1603 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/lv/
2026-11-05 22:20:07 +00:00
Andrey Antukh
fa7834c508
🌐 Add translations for: Korean
Currently translated at 73.3% (1731 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ko/
2026-11-05 22:20:05 +00:00
Andrey Antukh
cd2c4332f3
🌐 Add translations for: Ukrainian (ukr_UA)
Currently translated at 75.3% (1779 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ukr_UA/
2026-11-05 22:20:04 +00:00
Andrey Antukh
0d80598ada
🌐 Add translations for: Croatian
Currently translated at 57.0% (1348 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/hr/
2026-11-05 22:20:02 +00:00
Andrey Antukh
24a191edd7
🌐 Add translations for: Portuguese (Portugal)
Currently translated at 56.2% (1327 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/pt_PT/
2026-11-05 22:20:00 +00:00
Andrey Antukh
f5fce6c5c5
🌐 Add translations for: Czech
Currently translated at 56.8% (1342 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/cs/
2026-11-05 22:19:59 +00:00
Andrey Antukh
0b72372e5d
🌐 Add translations for: Basque
Currently translated at 41.6% (984 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/eu/
2026-11-05 22:19:57 +00:00
Andrey Antukh
855352743a
🌐 Add translations for: Japanese
Currently translated at 94.6% (2235 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ja/
2026-11-05 22:19:56 +00:00
Andrey Antukh
50d58566cb
🌐 Add translations for: Polish
Currently translated at 40.9% (967 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/pl/
2026-11-05 22:19:54 +00:00
Andrey Antukh
8651e58aed
🌐 Add translations for: Italian
Currently translated at 79.2% (1870 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/it/
2026-11-05 22:19:52 +00:00
Andrey Antukh
50c716a0ae
🌐 Add translations for: Persian
Currently translated at 93.3% (2205 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fa/
2026-11-05 22:19:50 +00:00
Andrey Antukh
5fa7edb8e3
🌐 Add translations for: Chinese (Traditional Han script)
Currently translated at 92.9% (2194 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hant/
2026-11-05 22:19:48 +00:00
Andrey Antukh
fae5036252
🌐 Add translations for: Hebrew
Currently translated at 80.0% (1889 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/
2026-11-05 22:19:47 +00:00
Andrey Antukh
cd95407035
🌐 Add translations for: Indonesian
Currently translated at 61.0% (1441 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/id/
2026-11-05 22:19:45 +00:00
Andrey Antukh
82be9680b2
🌐 Add translations for: Arabic
Currently translated at 40.7% (961 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ar/
2026-11-05 22:19:44 +00:00
Andrey Antukh
b27df30e36
🌐 Add translations for: Romanian
Currently translated at 70.5% (1666 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ro/
2026-11-05 22:19:42 +00:00
Andrey Antukh
bca9dfe906
🌐 Add translations for: German
Currently translated at 79.6% (1880 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/de/
2026-11-05 22:19:40 +00:00
Andrey Antukh
7351bac796
🌐 Add translations for: Portuguese (Brazil)
Currently translated at 50.3% (1188 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/pt_BR/
2026-11-05 22:19:39 +00:00
Andrey Antukh
3df670f291
🌐 Add translations for: Chinese (Simplified Han script)
Currently translated at 85.9% (2030 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hans/
2026-11-05 22:19:36 +00:00
Andrey Antukh
8292320e30
🌐 Add translations for: Turkish
Currently translated at 94.7% (2238 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/tr/
2026-11-05 22:19:35 +00:00
Andrey Antukh
5c6f3ddb8b
🌐 Add translations for: Russian
Currently translated at 95.4% (2254 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ru/
2026-11-05 22:19:33 +00:00
Andrey Antukh
b58fa9b1bd
🌐 Add translations for: French
Currently translated at 94.7% (2238 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-11-05 22:19:31 +00:00
Andrey Antukh
0032642399
🌐 Add translations for: Spanish
Currently translated at 99.6% (2352 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/es/
2026-11-05 22:19:29 +00:00
Andrey Antukh
2f19f68296
🌐 Add translations for: Catalan
Currently translated at 93.2% (2201 of 2361 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ca/
2026-11-05 22:19:27 +00:00
Hosted Weblate
8a59ffd886
🌐 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/
2026-11-05 22:45:28 +01:00
Hosted Weblate
0c3a5de957
🌐 Merge branch 'origin/develop' into Weblate. 2026-11-05 22:45:23 +01:00
Alexis Morin
d685163260
🌐 Add translations for: French (Canada)
Currently translated at 97.6% (2222 of 2275 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-05 14:51:23 +00:00
Alexis Morin
48cb2a83b4
🌐 Add translations for: French (Canada)
Currently translated at 96.9% (2205 of 2275 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-11-04 14:51:22 +01:00
andrés gonzález
4ee2a812be
🔥 Remove Beta badge from MCP server in Integrations (#12813)
The Integrations settings page labelled the MCP server as Beta, while
the MCP docs give no maturity status. Drop the badge, its style and the
unused translation key so the UI no longer presents it as beta.

Closes #12800

AI-assisted-by: claude-opus-5-5
2026-11-04 11:30:53 +01:00