From 8a13ce5f9116e8990eec5069b6c3f985c650001d Mon Sep 17 00:00:00 2001 From: elhombretecla <delacruzgarciajuan@gmail.com> Date: Thu, 6 Feb 2025 14:17:32 +0100 Subject: [PATCH 01/12] :lipstick: Change email button styles (#5785) --- .../resources/app/email/comment-mention/en.html | 2 +- .../resources/app/email/invite-to-team/en.html | 8 ++++---- backend/resources/app/email/join-team/en.html | 8 ++++---- .../app/email/password-recovery/en.html | 8 ++++---- backend/resources/app/email/register/en.html | 8 ++++---- .../request-file-access-yourpenpot-view/en.html | 8 ++++---- .../email/request-file-access-yourpenpot/en.html | 8 ++++---- .../app/email/request-file-access/en.html | 16 ++++++++-------- .../app/email/request-team-access/en.html | 8 ++++---- 9 files changed, 37 insertions(+), 37 deletions(-) diff --git a/backend/resources/app/email/comment-mention/en.html b/backend/resources/app/email/comment-mention/en.html index fa45cab25..d628c9699 100644 --- a/backend/resources/app/email/comment-mention/en.html +++ b/backend/resources/app/email/comment-mention/en.html @@ -203,7 +203,7 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#6911d4#31EFB8" role="presentation" + <td align="center" bgcolor="#6911d4" role="presentation" style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ comment-url }}" diff --git a/backend/resources/app/email/invite-to-team/en.html b/backend/resources/app/email/invite-to-team/en.html index 43bcbde67..5e61f1f67 100644 --- a/backend/resources/app/email/invite-to-team/en.html +++ b/backend/resources/app/email/invite-to-team/en.html @@ -195,12 +195,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/auth/verify-token?token={{token}}" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Accept invite </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> ACCEPT INVITE </a> </td> </tr> </table> diff --git a/backend/resources/app/email/join-team/en.html b/backend/resources/app/email/join-team/en.html index 1a59e70ce..8f88a125b 100644 --- a/backend/resources/app/email/join-team/en.html +++ b/backend/resources/app/email/join-team/en.html @@ -196,12 +196,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/dashboard/team/{{team-id}}/projects" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Go to the Team </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> GO TO THE TEAM </a> </td> </tr> </table> diff --git a/backend/resources/app/email/password-recovery/en.html b/backend/resources/app/email/password-recovery/en.html index 7770402b7..37693942d 100644 --- a/backend/resources/app/email/password-recovery/en.html +++ b/backend/resources/app/email/password-recovery/en.html @@ -196,12 +196,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/auth/recovery?token={{token}}" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Reset password </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> RESET PASSWORD </a> </td> </tr> </table> diff --git a/backend/resources/app/email/register/en.html b/backend/resources/app/email/register/en.html index c5fb5bc3f..8ee3b855a 100644 --- a/backend/resources/app/email/register/en.html +++ b/backend/resources/app/email/register/en.html @@ -196,12 +196,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/auth/verify-token?token={{token}}" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Verify email </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> VERIFY EMAIL </a> </td> </tr> </table> diff --git a/backend/resources/app/email/request-file-access-yourpenpot-view/en.html b/backend/resources/app/email/request-file-access-yourpenpot-view/en.html index 3146665f0..11f8b8dea 100644 --- a/backend/resources/app/email/request-file-access-yourpenpot-view/en.html +++ b/backend/resources/app/email/request-file-access-yourpenpot-view/en.html @@ -204,12 +204,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/view/{{file-id}}?page-id={{page-id}}§ion=interactions&index=0&share=true" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Send a View-Only link </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> SEND A VIEW-ONLY LINK </a> </td> </tr> </table> diff --git a/backend/resources/app/email/request-file-access-yourpenpot/en.html b/backend/resources/app/email/request-file-access-yourpenpot/en.html index e32a1603f..72d8e4282 100644 --- a/backend/resources/app/email/request-file-access-yourpenpot/en.html +++ b/backend/resources/app/email/request-file-access-yourpenpot/en.html @@ -227,12 +227,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/view/{{file-id}}?page-id={{page-id}}§ion=interactions&index=0&share=true" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Send a View-Only link </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> SEND A VIEW-ONLY LINK </a> </td> </tr> </table> diff --git a/backend/resources/app/email/request-file-access/en.html b/backend/resources/app/email/request-file-access/en.html index 370687e3f..4ea4acfcc 100644 --- a/backend/resources/app/email/request-file-access/en.html +++ b/backend/resources/app/email/request-file-access/en.html @@ -211,12 +211,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/dashboard/team/{{team-id}}/members?invite-email={{requested-by-email|urlescape }}" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Give access to “{{team-name|abbreviate:25}}” Team </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> GIVE ACCESS TO “{{team-name|abbreviate:25}}” TEAM </a> </td> </tr> </table> @@ -244,12 +244,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/view/{{file-id}}?page-id={{page-id}}§ion=interactions&index=0&share=true" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Send a View-Only link </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> SEND A VIEW-ONLY LINK </a> </td> </tr> </table> diff --git a/backend/resources/app/email/request-team-access/en.html b/backend/resources/app/email/request-team-access/en.html index 54a7dcc2a..2d9e26648 100644 --- a/backend/resources/app/email/request-team-access/en.html +++ b/backend/resources/app/email/request-team-access/en.html @@ -202,12 +202,12 @@ <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border-collapse:separate;line-height:100%;"> <tr> - <td align="center" bgcolor="#31EFB8" role="presentation" - style="border:none;border-radius:3px;cursor:auto;mso-padding-alt:10px 25px;background:#31EFB8;" + <td align="center" bgcolor="#6911d4" role="presentation" + style="border:none;border-radius:8px;cursor:auto;mso-padding-alt:10px 25px;background:#6911d4;" valign="middle"> <a href="{{ public-uri }}/#/dashboard/team/{{team-id}}/members?invite-email={{requested-by-email|urlescape}}" - style="display:inline-block;background:#31EFB8;color:#1F1F1F;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:3px;" - target="_blank"> Give access to “{{team-name|abbreviate:25}}” </a> + style="display:inline-block;background:#6911d4;color:#FFFFFF;font-family:Source Sans Pro, sans-serif;font-size:16px;font-weight:normal;line-height:120%;margin:0;text-decoration:none;text-transform:none;padding:10px 25px;mso-padding-alt:0px;border-radius:8px;" + target="_blank"> GIVE ACCESS TO “{{team-name|abbreviate:25}}” TEAM </a> </td> </tr> </table> From 518ba0ebe789706c857c5d890d0fb2e03b59f7dc Mon Sep 17 00:00:00 2001 From: Andres Gonzalez <andres.gonzalez79@gmail.com> Date: Wed, 5 Feb 2025 17:14:20 +0100 Subject: [PATCH 02/12] :books: Add info about import size limit at the user guide --- docs/user-guide/import-export/index.njk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/import-export/index.njk b/docs/user-guide/import-export/index.njk index 98d66b8f0..3d1dcdf02 100644 --- a/docs/user-guide/import-export/index.njk +++ b/docs/user-guide/import-export/index.njk @@ -38,7 +38,7 @@ title: 14· Import/export files <figure><img src="/img/import-export/export-libraries.webp" alt="Export penpot file" /></figure> <h2 id="files-import">Import Penpot files</h2> -<p class="advice">Importing files from other tools and services is among the main priorities of the Penpot team. Related features are coming soon.</p> +<p class="advice">The maximum file import size is currently limited to 1GB.</p> <p>The import option is at the projects menu. Press “Import files” and then select one or more .penpot files to import. You can import a .zip file as well.</p> <figure><img src="/img/import-export/import-menu.webp" alt="Import penpot file" /></figure> @@ -50,7 +50,7 @@ title: 14· Import/export files <p>Unlike other design tools, <strong>Penpot's format is built on standard languages</strong>. The exported file is essentially a ZIP archive containing binary assets (such as bitmap and vector images) alongside a readable JSON structure. By avoiding proprietary formats, Penpot empowers users with autonomy from specific tools while enabling seamless third-party integrations.</p> <h3>Deprecated Penpot file formats</h3> -<p class="advice">These formats can only be exported from version 2.3 or earlier versions, but can be imported to any Penpot version</p> +<p class="advice">These formats can only be exported from version 2.3 or earlier versions, but can be imported to any Penpot version.</p> <p>There are two different deprecated Penpot file formats in which you can import/export Penpot files. A standard one and a binary one. You always have the chance to use both for any file.</p> <h4>[Deprecated] Penpot file (.penpot).</h4> <p>The fast one. Binary Penpot specific.</p> From 00b0a59868b6a85c18108c95192d3da5b44779eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?luis=CE=B4=CE=BC?= <luis.dedios@kaleidos.net> Date: Thu, 6 Feb 2025 14:24:30 +0100 Subject: [PATCH 03/12] :bug: Fix user unread comments appear in every workspace (#5786) --- frontend/src/app/main/data/comments.cljs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/app/main/data/comments.cljs b/frontend/src/app/main/data/comments.cljs index fd818b9a7..14f973af5 100644 --- a/frontend/src/app/main/data/comments.cljs +++ b/frontend/src/app/main/data/comments.cljs @@ -404,6 +404,10 @@ (defn retrieve-comment-threads [file-id] (ptk/reify ::retrieve-comment-threads + ptk/UpdateEvent + (update [_ state] + (dissoc state :comment-threads)) + ptk/WatchEvent (watch [_ state _] (let [share-id (-> state :viewer-local :share-id)] From ef9ead8072bbfebbaee92158c72bfc26530ba940 Mon Sep 17 00:00:00 2001 From: Eva Marco <eva.marco@kaleidos.net> Date: Thu, 6 Feb 2025 17:42:15 +0100 Subject: [PATCH 04/12] :bug: Fix typo on integration test docs (#5796) --- CHANGES.md | 2 +- docs/technical-guide/developer/frontend.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f7796dab3..97d2b8e78 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -50,7 +50,7 @@ is a number of cores) - [COMMENTS] Notifications in Backend, Profile Section, and Mention Email Notification [Taiga #9233](https://tree.taiga.io/project/penpot/us/9233) ### :bug: Bugs fixed - +- Fix typo on integration tests docs [Taiga #10112](https://tree.taiga.io/project/penpot/issue/10112) - Fix problem with alt key measures being stuck [Taiga #9348](https://tree.taiga.io/project/penpot/issue/9348) - Fix error when reseting stroke cap - Fix problem with strokes not refreshing in Safari [Taiga #9040](https://tree.taiga.io/project/penpot/issue/9040) diff --git a/docs/technical-guide/developer/frontend.md b/docs/technical-guide/developer/frontend.md index 129105976..cfd87ad79 100644 --- a/docs/technical-guide/developer/frontend.md +++ b/docs/technical-guide/developer/frontend.md @@ -319,14 +319,14 @@ cd penpot/frontend 3. Run the tests with <code class="language-bash">yarn</code>: ```bash -yarn e2e:test +yarn test:e2e ``` > 💡 **TIP:** By default, the tests will _not_ run in parallel. You can set the amount of workers to run the tests with <code class="language-bash">--workers</code>. Note that, depending on your machine, this might make some tests flaky. ```bash # run in parallel with 4 workers -yarn e2e:test --workers 4 +yarn test:e2e --workers 4 ``` #### Running the tests in Chromium From 028a5ba596b93679fddc1937d0c2769a81d599bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?andr=C3=A9s=20gonz=C3=A1lez?= <andres.gonzalez79@gmail.com> Date: Fri, 7 Feb 2025 09:04:56 +0100 Subject: [PATCH 05/12] :books: Remove the permissions table (#5795) --- docs/user-guide/teams/index.njk | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/user-guide/teams/index.njk b/docs/user-guide/teams/index.njk index 47920629d..ce9cb1e78 100644 --- a/docs/user-guide/teams/index.njk +++ b/docs/user-guide/teams/index.njk @@ -41,8 +41,6 @@ member is allowed to do depends on their permissions.</p> <li><strong>Admin:</strong> Admins have the same permissions as editors, with the added ability to change every other member's role except owners. They can invite members and update team settings.</strong></li> <li><strong>Owner:</strong> There's only one owner per team, the role is automatically assigned to the team creator. Owners have all the permissions of admins, with the additional ability to change any member's role, including transferring ownership. Owners can update team settings, invite members and delete teams.</strong></li> </ul> -<figure><img src="/img/teams/teams-permissions.webp" alt="Team members" /></figure> -<p class="advice">More team roles will be eventually available, as well as fine grained permissions management to control members access and actions.</p> <h3>Transfer ownership</h3> <p>An owner can transfer their ownership to another team member anytime and is requested to transfer it before leaving the team.</p> From 87295eab76fd72b50d656f6cc61ded35118e1ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?andr=C3=A9s=20gonz=C3=A1lez?= <andres.gonzalez79@gmail.com> Date: Fri, 7 Feb 2025 09:05:12 +0100 Subject: [PATCH 06/12] :books: Add info about boards renaming (#5797) --- docs/img/objects/board-rename.webm | Bin 0 -> 21903 bytes docs/img/objects/board-rename.webp | Bin 0 -> 1104 bytes docs/user-guide/objects/index.njk | 15 ++++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 docs/img/objects/board-rename.webm create mode 100644 docs/img/objects/board-rename.webp diff --git a/docs/img/objects/board-rename.webm b/docs/img/objects/board-rename.webm new file mode 100644 index 0000000000000000000000000000000000000000..dfcd8a7476dd5569c49077a3bb6434d08a8e443e GIT binary patch literal 21903 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 IV-sT*0M9BHOaK4? literal 0 HcmV?d00001 diff --git a/docs/img/objects/board-rename.webp b/docs/img/objects/board-rename.webp new file mode 100644 index 0000000000000000000000000000000000000000..2e4d4f863a8095ad248032f96ffb8498002687f3 GIT binary patch literal 1104 zcmWIYbaV4yVPFV%bqWXzu!!JdU|>)H;xmj4f{YBF&dvcR7=c^{#uFft#ejh!H?O29 z$lXaHA~H&W{Q(0b5Q0Hsa&ZBKg_Q)V`gRSX_OdQk75D`?Q&NkQfl59Au}Trpa-f?; zfNYU;2wMZhPJ*y)K<x68f)b#b01&$<B*+=aP64tt(vjFnNbKZ-B9QtXpc<RpoKlco zAOP|mPikIhFp%Z|Vi|^Fh9Cxa1}BjJfqWpyU&O#*@s)vrc>+Q#X(j{1_ErW4iCYLU zl?4n8{4ER&+s-4z5Mfe~Sd<7h4j3B@OlfHh44;-WFz`k)FbH2@VBm@d%K-@-Zc_kC z$pGDz4}|FqISi=`3JjhMc?`)6dO(&Dg8_pfgBdV}6{46J7y`5y<}zxXWfWqx%Qczl zsiL%Kp;EyOj|Se(%)EzX8zm<H-In%}?Yr#PAIXgtBELV|{W-ti`287j8MZz3hB@-v z_$>?9|F28GKlA%V8-sqQ$9KQ~Gim5QdPF0t`;5fP8M9xP{_ip<-Sz*dc=+#&3ZJJ- z{ST>#*{R{motUHBx?!8xp&QX4W^9qqiED4N|KH9w<t{V*|9(OB$N4~0CmoLb(0nc? z`!R3&A)rmG`s=_h)_$v8vL|tm>TDUA?Em*?z7EPb`<VBk>#vmpx;L)>-*)FizC=Ek zLpsaCykq<Se&Gje`V^6ECs291w<dAT569<vrh)H|)&87cms-0dZ+ee;%jV?f-umC4 zZL@qOfhKG04^?8_E%pD~?RmV9fpPcm|Ne{r%4`q*ifjNz34{8@hFOu9=FD__rNCSl zvt718Ep`8s%p~3&vhs#42QyPrOqupv_t?AZ0owuP`7akVEmTu~Y`ZM|eEN^z+3TnC zu8|0tAYS)%@2|g)WETHC#Inl4<m*@W<dB6^-fUcvU1qkkRbp5DhR?s2ZjmhMym)zO z-pQE1cb(&0rc`v^`^C>4{!ZdP$By`R`J6QeKTR<B#$4EFyRA6p>m`q%d%2=Nu6`Bw z&pW;TY(;GHxnr}LD@3JKPVhKPX8+@}gDruZ@weMHXPKv4D?`q@um3gW`h`*!iAuF^ a-YeJUzn=HvKowVjdW49@5(flczyJUciiUUq literal 0 HcmV?d00001 diff --git a/docs/user-guide/objects/index.njk b/docs/user-guide/objects/index.njk index b8392712f..4ed50ca66 100644 --- a/docs/user-guide/objects/index.njk +++ b/docs/user-guide/objects/index.njk @@ -33,6 +33,20 @@ are shown by default at the <a href="/user-guide/view-mode">View mode</a>, actin </video> </figure> +<h3>Rename boards</h3> +<p>There several ways to rename boards:</p> +<ul> + <li>Double click on the board name at the workspace viewport.</li> + <li>Double click on the board name at the layers panel.</li> + <li>Press <kbd>Alt/⌥</kbd> + <kbd>N</kbd> to rename the board at the layers panel.</li> + <li>Right click to show the menu and select "Rename".</li> +</ul> +<figure> + <video title="Rename board" muted="" playsinline="" controls="" width="auto" poster="/img/objects/board-rename.webp" height="auto"> + <source src="/img/objects/board-rename.webm" type="video/webm"> + </video> +</figure> + <h3>Set board as thumbnail</h3> <p>Select a specific board to be the file thumbnail that will be shown at <a href="/user-guide/the-interface/#dashboard-interface" target="_blank">the dashboard</a> in the file card.</p> <p>To set a custom thumbnail:</p> @@ -171,7 +185,6 @@ You can choose to edit individual nodes or create new ones. Press <kbd>Esc</kbd> </video> </figure> - <h2 id="images">Images</h2> <h3>Insert images</h3> <p>There are several options for inserting an image into a Penpot file:</p> From a4e35ec713bfe149d16401ace8bd760e757dc63f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?andr=C3=A9s=20gonz=C3=A1lez?= <andres.gonzalez79@gmail.com> Date: Fri, 7 Feb 2025 09:05:29 +0100 Subject: [PATCH 07/12] :books: Update FAQ about sharing plugins (#5794) --- docs/plugins/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins/faq.md b/docs/plugins/faq.md index 471818555..d883b39d6 100644 --- a/docs/plugins/faq.md +++ b/docs/plugins/faq.md @@ -61,7 +61,7 @@ Take a look at the Penpot Library methods in the <a target="_blank" href="https: ### Is there a place where I can share my plugin? -You will be able to share your plugin with the <a target="_blank" href="https://community.penpot.app/">Penpot community</a>. In the future, we plan to create a place where we will publish the plugins we know about, but this is still something we have to define. +<a target="_blank" href="https://penpot.app/penpothub">Penpot Hub</a> is where you can share plugins, templates and libraries all made possible through open-source collaboration. To add your plugin to our catalog, simply fill out <a target="_blank" href="https://penpot.app/penpothub/plugins/create-plugin">this form</a> with your plugin's details. ### My plugin works on my local machine, but I couldn’t install it on Penpot. What could be the problem? From 5fa96315e39841ec67d56aa08d0a2a0060aa2357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= <marina.lopez.yap@gmail.com> Date: Fri, 7 Feb 2025 09:51:25 +0100 Subject: [PATCH 08/12] :sparkles: Add event for A/B test first state project (#5791) --- frontend/src/app/main/ui/dashboard/placeholder.cljs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/dashboard/placeholder.cljs b/frontend/src/app/main/ui/dashboard/placeholder.cljs index 8af3d723b..d836fcf24 100644 --- a/frontend/src/app/main/ui/dashboard/placeholder.cljs +++ b/frontend/src/app/main/ui/dashboard/placeholder.cljs @@ -8,19 +8,29 @@ (:require-macros [app.main.style :as stl]) (:require [app.config :as cf] + [app.main.data.event :as ev] + [app.main.store :as st] [app.main.ui.dashboard.import :as udi] [app.main.ui.ds.product.empty-placeholder :refer [empty-placeholder*]] [app.main.ui.ds.product.loader :refer [loader*]] [app.main.ui.icons :as i] [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] + [potok.v2.core :as ptk] [rumext.v2 :as mf])) (mf/defc empty-placeholder-projects* {::mf/wrap-props false} [{:keys [on-create on-finish-import project-id] :as props}] (let [file-input (mf/use-ref nil) - on-add-library (mf/use-fn #(dom/open-new-window "https://penpot.app/penpothub/libraries-templates")) + on-add-library (mf/use-fn + (fn [event] + (dom/prevent-default event) + (dom/stop-propagation event) + (st/emit! (ptk/event ::ev/event {::ev/name "explore-libraries-click" + ::ev/origin "dashboard" + :section "empty-placeholder-projects"})) + (dom/open-new-window "https://penpot.app/penpothub/libraries-templates"))) on-import-files (mf/use-fn #(dom/click (mf/ref-val file-input)))] [:div {:class (stl/css :empty-project-container)} From a98111f68d69c78308150e53ff010ab4ae2a3e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20L=C3=B3pez?= <marina.lopez.yap@gmail.com> Date: Fri, 7 Feb 2025 11:07:47 +0100 Subject: [PATCH 09/12] :fire: Remove unnecessary prevent and stop (#5799) --- frontend/src/app/main/ui/dashboard/placeholder.cljs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/app/main/ui/dashboard/placeholder.cljs b/frontend/src/app/main/ui/dashboard/placeholder.cljs index d836fcf24..042c0815a 100644 --- a/frontend/src/app/main/ui/dashboard/placeholder.cljs +++ b/frontend/src/app/main/ui/dashboard/placeholder.cljs @@ -24,9 +24,7 @@ [{:keys [on-create on-finish-import project-id] :as props}] (let [file-input (mf/use-ref nil) on-add-library (mf/use-fn - (fn [event] - (dom/prevent-default event) - (dom/stop-propagation event) + (fn [_] (st/emit! (ptk/event ::ev/event {::ev/name "explore-libraries-click" ::ev/origin "dashboard" :section "empty-placeholder-projects"})) From b991a946857c7b2de5dbae6e8efe2ea6a15c0e18 Mon Sep 17 00:00:00 2001 From: Eva Marco <eva.marco@kaleidos.net> Date: Fri, 7 Feb 2025 12:32:44 +0100 Subject: [PATCH 10/12] :bug: Fix icon visualization on select component (#5801) --- CHANGES.md | 1 + frontend/src/app/main/ui/ds/controls/select.cljs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 97d2b8e78..db26b4238 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -50,6 +50,7 @@ is a number of cores) - [COMMENTS] Notifications in Backend, Profile Section, and Mention Email Notification [Taiga #9233](https://tree.taiga.io/project/penpot/us/9233) ### :bug: Bugs fixed +- Fix icon visualization on select component [Taiga #8889](https://tree.taiga.io/project/penpot/issue/8889) - Fix typo on integration tests docs [Taiga #10112](https://tree.taiga.io/project/penpot/issue/10112) - Fix problem with alt key measures being stuck [Taiga #9348](https://tree.taiga.io/project/penpot/issue/9348) - Fix error when reseting stroke cap diff --git a/frontend/src/app/main/ui/ds/controls/select.cljs b/frontend/src/app/main/ui/ds/controls/select.cljs index 38222441c..b74ac575d 100644 --- a/frontend/src/app/main/ui/ds/controls/select.cljs +++ b/frontend/src/app/main/ui/ds/controls/select.cljs @@ -198,7 +198,7 @@ label]] [:> icon* {:icon-id i/arrow :class (stl/css :arrow) - :size "s" + :size "m" :aria-hidden true}]] (when open [:> options-dropdown* {:on-click on-option-click From 92aa615da409595c8db7755c0d4073a4b26013bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?luis=CE=B4=CE=BC?= <luis.dedios@kaleidos.net> Date: Fri, 7 Feb 2025 12:33:29 +0100 Subject: [PATCH 11/12] :bug: Fix users from another teams appear in mentions (#5789) --- frontend/src/app/main/ui/comments.cljs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/ui/comments.cljs b/frontend/src/app/main/ui/comments.cljs index aa5e0045e..ff93524e4 100644 --- a/frontend/src/app/main/ui/comments.cljs +++ b/frontend/src/app/main/ui/comments.cljs @@ -425,7 +425,9 @@ [] (let [mentions-s (mf/use-ctx mentions-context) profile (mf/deref refs/profile) - profiles (mf/deref refs/profiles) + + team (mf/deref refs/team) + members (:members team) state* (mf/use-state @@ -437,10 +439,8 @@ (deref state*) mentions-users - (mf/with-memo [mention-filter] - - - (->> (vals profiles) + (mf/with-memo [mention-filter members] + (->> members (filter (fn [{:keys [id fullname email]}] (and (not= id (:id profile)) @@ -461,9 +461,12 @@ (dom/stop-propagation event) (let [id (-> (dom/get-current-target event) (dom/get-data "user-id") - (uuid/uuid))] + (uuid/uuid)) + + user (d/seek #(= (:id %) id) members)] + (rx/push! mentions-s {:type :insert-mention - :data {:user (get profiles id)}}))))] + :data {:user user}}))))] (mf/with-effect [mentions-users selected] (let [sub From debad85d6dc9b3fd79062c7e3dd684977bceb0c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?andr=C3=A9s=20gonz=C3=A1lez?= <andres.gonzalez79@gmail.com> Date: Fri, 7 Feb 2025 16:41:04 +0100 Subject: [PATCH 12/12] :books: Add info about fit board to content (#5800) --- docs/img/objects/board-fit.webp | Bin 0 -> 7346 bytes docs/user-guide/objects/index.njk | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 docs/img/objects/board-fit.webp diff --git a/docs/img/objects/board-fit.webp b/docs/img/objects/board-fit.webp new file mode 100644 index 0000000000000000000000000000000000000000..561b819a6aeff6dc245153328041ef1b8f258958 GIT binary patch literal 7346 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 literal 0 HcmV?d00001 diff --git a/docs/user-guide/objects/index.njk b/docs/user-guide/objects/index.njk index 4ed50ca66..7946dd9f3 100644 --- a/docs/user-guide/objects/index.njk +++ b/docs/user-guide/objects/index.njk @@ -87,6 +87,12 @@ Penpot allows you to decide if the fill of an artboard will be shown in exports, <img src="/img/objects/board-fill.webp" alt="show board fill in exports"> </figure> +<h3>Resize board to fit to content</h3> +<p>You can adjust the board size to fit its content by clicking the icon in the design sidebar.</p> +<figure> + <img src="/img/objects/board-fit.webp" alt="Resize board to fit to content button"> +</figure> + <h3>Board guides</h3> <p>You can set guides on boards that will assist with aligning objects.</p> <p>Read more about <a href="/user-guide/workspace-basics/#guides">guides</a>.</p>