2456 Commits

Author SHA1 Message Date
Allan Nordhøy
26879a0423
🌐 Add translations for: Norwegian Bokmål
Currently translated at 6.5% (163 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/nb_NO/
2026-09-15 17:18:00 +00:00
Stas Haas
d3a04c55dc
🌐 Add translations for: German
Currently translated at 77.5% (1933 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/de/
2026-09-15 17:17:58 +00:00
Pablo Alba
ab826031c6
🌐 Add translations for: German
Currently translated at 77.5% (1933 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/de/
2026-09-15 17:17:58 +00:00
Renan Mayrinck
2783b34991
🌐 Add translations for: Portuguese (Brazil)
Currently translated at 54.6% (1364 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/pt_BR/
2026-09-15 17:17:55 +00:00
DoubleCat
f3d86b10c2
🌐 Add translations for: Chinese (Simplified Han script)
Currently translated at 91.6% (2285 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/zh_Hans/
2026-09-15 17:17:53 +00:00
Oğuz Ersen
cfe1246f99
🌐 Add translations for: Turkish
Currently translated at 96.5% (2407 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/tr/
2026-09-15 17:17:51 +00:00
Anonymous
11ed5cc24a
🌐 Add translations for: Turkish
Currently translated at 96.5% (2407 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/tr/
2026-09-15 17:17:50 +00:00
Vint Prox
d2c68a2ade
🌐 Add translations for: Russian
Currently translated at 66.3% (1656 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ru/
2026-09-15 17:17:48 +00:00
Anonymous
f48a3b4204
🌐 Add translations for: Greek
Currently translated at 20.3% (508 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/el/
2026-09-15 17:17:46 +00:00
Corentin Noël
0f3a32e12c
🌐 Add translations for: French
Currently translated at 96.5% (2407 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-15 17:17:43 +00:00
Surfoo
f2f336b99a
🌐 Add translations for: French
Currently translated at 96.5% (2407 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-15 17:17:43 +00:00
Pablo Alba
4a62e9063e
🌐 Add translations for: French
Currently translated at 96.5% (2407 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-15 17:17:42 +00:00
Aryiu
4b04c05a53
🌐 Add translations for: Catalan
Currently translated at 42.3% (1057 of 2494 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/ca/
2026-09-15 17:17:39 +00:00
Hosted Weblate
dd4c92a4e0
🌐 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/
2026-09-15 19:12:42 +02:00
Hosted Weblate
b419efea54
🌐 Merge branch 'origin/develop' into Weblate. 2026-09-15 19:11:04 +02:00
Danial Shirali
8177022ffc
🌐 Add translations for: Persian
Currently translated at 99.8% (2429 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fa/
2026-09-15 17:09:26 +00:00
Alonso Torres
ff88a055fd
🐛 Fix stalled saving states (#11699) 2026-09-15 16:04:00 +02:00
María Valderrama
66876f16b2
Error page for instances without admin-console configuration (#11649)
*  Error page for instances without admin-console configuration

* 📎 Code review
2026-09-15 07:24:55 +02:00
Alexis Morin
c45bb130bf
🌐 Add translations for: French (Canada)
Currently translated at 100.0% (2432 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-09-14 17:51:41 +00:00
Yaron Shahrabani
ec996f08ac
🌐 Add translations for: Hebrew
Currently translated at 88.6% (2155 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/
2026-09-14 17:51:30 +00:00
Alexis Morin
0dbc8e1b55
🌐 Add translations for: French (Canada)
Currently translated at 97.3% (2368 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-09-11 14:51:30 +02:00
Andrey Antukh
37dab75e1a Merge remote-tracking branch 'origin/staging' into develop 2026-09-10 20:29:44 +02:00
Luis de Dios
c589563912
♻️ Replace digit with number in password validations (#11609) 2026-09-10 12:15:58 +02:00
Alexis Morin
bb6472a300
🌐 Add translations for: French (Canada)
Currently translated at 96.5% (2349 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr_CA/
2026-09-09 14:51:33 +02:00
Philippe Accorsi
6b113566f3
🌐 Add translations for: French
Currently translated at 99.8% (2429 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-03 11:51:27 +00:00
Surfoo
45b3bdf625
🌐 Add translations for: French
Currently translated at 99.8% (2429 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-03 11:51:26 +00:00
Surfoo
c0f5fc601c
🌐 Add translations for: French
Currently translated at 99.7% (2425 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-02 12:29:59 +02:00
Surfoo
9e66f5653e
🌐 Add translations for: French
Currently translated at 85.8% (2088 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/fr/
2026-09-02 10:54:29 +02:00
Pablo Alba
5b3a1d9360
Add check version menu entry (#11411)
*  Add check version menu entry

*  MR fixes

*  MR changes 2
2026-08-31 16:47:17 +02:00
Elena Torró
66b4a99ac3
🎉 Implement export jobs to process export requests (#11296)
*  Add export job model, store and scheduler to exporter

*  Render wasm exports on pooled worker threads

*  Add export job REST API to exporter

*  Use export job API and allow cancelling wasm exports

* 🔧 Show export jobs in the internal debug panel

* 🔧 Pass flags and export job settings to the exporter container

* 📚 Document the exporter job API and its redis layout
2026-08-31 14:42:51 +02:00
Andrey Antukh
292390f0eb Merge remote-tracking branch 'origin/staging' into develop 2026-08-31 11:52:26 +02:00
María Valderrama
c01306734a
🐛 Fix default team and UI labels to use Personal Projects (#11418)
* 🐛 Fix default team and UI labels to use Personal Projects

* 📎 Code review
2026-08-28 14:04:56 +02:00
Andrey Antukh
0a14a1f3db Merge remote-tracking branch 'origin/staging' into develop 2026-08-28 11:22:52 +02:00
María Valderrama
cdfdbf9adc
🐛 Fix labels for teams navigation and personal files section (#11398) 2026-08-28 09:49:13 +02:00
María Valderrama
6bedd5ac76
🐛 Fix move organization modal (#11390)
* 🐛 Fix move organization modal

* 📎 Code review
2026-08-27 12:41:32 +02:00
Alonso Torres
217284b1e1
Improve path operations and edition (#10807)
*  Improve path operations and edition

* 🐛 Fix floating-point equality issues in path editing

Replace exact equality checks with tolerance-based comparisons
in path editing functions to handle floating-point rounding
differences after transforms, rotations, or curve fitting.

Changes:
- distribute-content: Round coordinates to 0.1 precision before
  grouping to ensure coincident nodes move together
- separate-node: Use gpt/close? instead of exact equality to
  find nodes with floating-point imprecision
- collision-step: Use mth/close? for tolerance-based comparison
  to detect paste collisions correctly
- resolve-edit-fills: Add cycle detection to prevent infinite
  loops with corrupted parent chains

Made collision-step, available-offset-step, and resolve-edit-fills
public for better testability.

Added comprehensive tests for all fixes covering both exact and
floating-point coordinate scenarios.

AI-assisted-by: qwen3.7-plus

* 🐛 Fix path editor code review findings

Fix issues identified during code review of path editor enhancements:

- Fix unused binding lint warning in distribute-content that blocked CI
- Fix collision-step floor comparison to use round instead of floor,
  correctly detecting collisions when coordinates drift slightly below
  integer boundaries
- Fix resolve-edit-fills to recurse through empty parent groups when
  searching for inherited fills in nested group hierarchies
- Fix expand-coincident-node-indices to use fuzzy comparison (gpt/close?)
  instead of exact equality, handling floating-point divergence after
  transforms or rotations
- Remove unreachable dead code in path-point* on-pointer-down handler
- Add tests for collision-step boundary cases, nested group fill
  inheritance, and coincident node alignment/flipping

AI-assisted-by: mimo-v2.5-pro

---------

Co-authored-by: Andrey Antukh <niwi@niwi.nz>
2026-08-27 10:51:10 +02:00
Andrey Antukh
03cd3fa70f
♻️ Consolidate auto-link libraries with unified export-type and fix ref integrity (#9958)
*  Auto-link libraries during import based on slugified name

When a Penpot file is exported without bundled libraries and then
imported into a different environment, external library links are
broken because library UUIDs differ across environments.

This feature adds a heuristic to auto-relink libraries by matching
slugified library names against shared files in the target team:

- Export: embed external library metadata (id, name, slug, used-by)
  in the manifest when libraries are not included in the export.
- Import: resolve external libraries by slugifying shared file names
  in the destination team and matching against manifest slugs.
- Single match: auto-link silently (creates file-library-rel row).
- Multiple matches: emit SSE event so the frontend shows a selection
  dialog for the user to pick the correct library.
- No match: import continues without linking (current behavior).

Backend changes:
- Extended manifest schema with optional :external-libraries field
- Added slugify-name, get-files-names, get-shared-files-for-team,
  find-shared-files-by-slug helpers in app.binfile.common
- Threaded team-id into import cfg from RPC layer
- Added resolve-external-libraries and auto-link-libraries in v3
- Emit :library-candidates SSE event for multi-match cases

Frontend changes:
- Worker captures library-candidates SSE events and forwards them
- Import dialog shows auto-link notification and multi-match
  selection UI with select dropdowns
- Added link-files-to-library! RPC helper for user selections
- Added en/es translations for new UI strings

Closes #9263

Signed-off-by: Andrey Antukh <niwi@niwi.nz>

*  Add UI for the auto-link plumbing

* ♻️ Consolidate auto-link libraries with unified export-type and fix ref integrity

Consolidates the auto-link libraries feature into a single coherent implementation:

- Unify boolean flags (embed-assets, include-libraries, link-later)
  into single ::bfc/export-type parameter
- Fix critical reference-integrity bug: pre-resolution no longer remaps
  :component-file refs when no link is created (multi-match / no-permission)
- compute-link-decisions as single source of truth for auto-link logic
- 80+ backend tests covering round-trip, cross-team, permissions,
  edge cases, and reference integrity

AI-assisted-by: longcat-2.0

---------

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
Co-authored-by: Eva Marco <evamarcod@gmail.com>
2026-08-27 10:09:52 +02:00
María Valderrama
e93c419785
🐛 Fix wrong copy on disabled invite button tooltip (#11311) 2026-08-24 15:25:31 +02:00
María Valderrama
9f6878d118
🐛 Fix disabled invitation explanatory title (#11295) 2026-08-20 13:19:35 +02:00
Pablo Alba
5080a90f76
💄 Change nitrate activation code texts (#11237) 2026-08-19 12:33:33 +02:00
0xTHAC0
d745dc4a3c 🐛 Fix grid item date tooltip showing deletion text on non-deleted files (#11161)
The grid-item-metadata* component always used :will-be-deleted-at (falling
back to :modified-at) and always showed the "Will be deleted %s" tooltip,
even for files in the Recent tab that have no deletion date.

Now the component branches on the presence of :will-be-deleted-at:
- Deleted files: show the deletion timeago with the existing
  "Will be deleted %s" tooltip.
- Regular files: show :modified-at timeago with a new
  "Last modified %s" tooltip key (dashboard.grid.last-modified-at).

Closes #10873

Co-authored-by: Andrey Antukh <niwi@niwi.nz>
2026-08-18 12:44:53 +02:00
María Valderrama
57c9c3f6a4
🐛 Fix sso error message (#11252) 2026-08-17 12:26:49 +02:00
Pablo Alba
350dc14632
🐛 Show a specific error on nitrate reused activation code (#11236) 2026-08-14 09:33:58 +02:00
Yaron Shahrabani
bfe363adab
🌐 Add translations for: Hebrew
Currently translated at 88.4% (2151 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/
2026-08-13 13:53:41 +00:00
Pablo Alba
3db7548c19
💄 Change nitrate error message (#11232) 2026-08-13 13:06:26 +02:00
María Valderrama
985d219810
🐛 Fix confusing copy for feams in organizations (#11213) 2026-08-11 14:36:07 +02:00
María Valderrama
1e6d438257
🐛 Fix SSO failure logging user out instead of showing error page (#11129)
* 🐛 Fix SSO failure logging user out instead of showing error page

* 📎 Code review
2026-08-11 09:14:29 +02:00
Andrey Antukh
81e44afbe3
🐛 Add backend password validation with complexity rules and dictionary check (#11059)
* 🐛 Add backend password validation with complexity rules and dictionary check

Enforce minimum 8-character password length, require at least 1 lowercase
letter, 1 uppercase letter, 1 digit, and 1 special character, and reject
common passwords using Passay library with a 10k-entry wordlist from
SecLists during registration and password change flows.

AI-assisted-by: mimo-v2.5-pro

*  Improve user feedback

When the password is invalid, the user now gets extra indications to make it stronger, so it can be valid.

* 🐛 Fix remove unneeded common password check

The dictionary check is only relevant for passwords that meet all other requirements, but all 10,000 common passwords would fail the character requirements, so this check is not needed

---------

Co-authored-by: Luis de Dios <luis.dedios@kaleidos.net>
2026-08-06 10:17:14 +02:00
Edgars Andersons
dcd0f6456a
🌐 Add translations for: Latvian
Currently translated at 75.8% (1844 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/lv/
2026-08-05 20:01:57 +00:00
Yaron Shahrabani
723c007230
🌐 Add translations for: Hebrew
Currently translated at 88.1% (2143 of 2432 strings)

Translation: Penpot/frontend
Translate-URL: https://hosted.weblate.org/projects/penpot/frontend/he/
2026-08-05 20:01:55 +00:00