From a0535de30cd538b9e7458290e5e9d16f36a1bedd Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 21 Jun 2023 12:53:47 +0200 Subject: [PATCH 1/9] :paperclip: Update CHANGES.md file --- CHANGES.md | 12 ++++++++++++ version.txt | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index d19caccbc..111502588 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,18 @@ ### :boom: Breaking changes & Deprecations +### :sparkles: New features + +### :bug: Bugs fixed + +### :arrow_up: Deps updates + +### :heart: Community contributions by (Thank you!) + +## :rocket: 1.19.0 + +### :boom: Breaking changes & Deprecations + ### :sparkles: New features - Default naming of text layers [Taiga #2836](https://tree.taiga.io/project/penpot/us/2836) - Create typography style from a selected text layer[Taiga #3041](https://tree.taiga.io/project/penpot/us/3041) diff --git a/version.txt b/version.txt index 815d5ca06..398935591 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.19.0 +1.20.0 From 6242c62bcb056ecdbb13851315dfa63444452112 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 21 Jun 2023 17:05:09 +0200 Subject: [PATCH 2/9] :paperclip: Update CHANGES.md file --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 97cc72973..ddffb7079 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,6 @@ # CHANGELOG -## :rocket: 1.19.0 +## :rocket: 1.20.0 ### :boom: Breaking changes & Deprecations @@ -12,7 +12,7 @@ ### :heart: Community contributions by (Thank you!) -## :rocket: 1.19.0 +## 1.19.0 ### :boom: Breaking changes & Deprecations From 8f0a4e8333ca21e999e3b1e65b9be0017e31fb99 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 22 Jun 2023 15:14:16 +0200 Subject: [PATCH 3/9] :tada: Add local caching of gfonts styles --- CHANGES.md | 4 +++ docker/devenv/files/nginx.conf | 52 ++++++++++++++++++++++++++- docker/images/files/nginx.conf | 52 +++++++++++++++++++++++++++ frontend/src/app/main/fonts.cljs | 62 ++++++++++++++------------------ 4 files changed, 133 insertions(+), 37 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 29ac5024f..f923a9262 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,10 @@ ### :sparkles: New features +- Add support for local caching of google fonts (this avoids exposing + the final user IP to goolge and reduces the amount of request sent + to google) + ### :bug: Bugs fixed ### :arrow_up: Deps updates diff --git a/docker/devenv/files/nginx.conf b/docker/devenv/files/nginx.conf index 0086018b3..169706e23 100644 --- a/docker/devenv/files/nginx.conf +++ b/docker/devenv/files/nginx.conf @@ -40,7 +40,10 @@ http { '' close; } - # include /etc/nginx/sites-enabled/*; + proxy_cache_path /tmp/cache/ levels=2:2 keys_zone=penpot:20m; + proxy_cache_methods GET HEAD; + proxy_cache_valid any 48h; + proxy_cache_key "$host$request_uri"; server { listen 3449 default_server; @@ -99,6 +102,53 @@ http { proxy_buffering off; } + location /internal/gfonts/css { + proxy_pass https://fonts.googleapis.com/css?$args; + proxy_hide_header Access-Control-Allow-Origin; + proxy_hide_header Cross-Origin-Resource-Policy; + proxy_hide_header Link; + proxy_hide_header Alt-Svc; + proxy_hide_header Cache-Control; + proxy_hide_header Expires; + + proxy_ignore_headers Set-Cookie Vary Cache-Control Expires; + + proxy_set_header User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"; + proxy_set_header Host "fonts.googleapis.com"; + proxy_set_header Accept "*/*"; + + proxy_cache penpot; + + add_header Access-Control-Allow-Origin $http_origin; + add_header Cache-Control max-age=86400; + add_header X-Cache-Status $upstream_cache_status; + } + + location ~ ^/internal/gfonts/font/(?.+) { + proxy_pass https://fonts.gstatic.com/s/$font_file; + + proxy_hide_header Access-Control-Allow-Origin; + proxy_hide_header Cross-Origin-Resource-Policy; + proxy_hide_header Link; + proxy_hide_header Alt-Svc; + proxy_hide_header Cache-Control; + proxy_hide_header Expires; + proxy_hide_header Cross-Origin-Opener-Policy; + proxy_hide_header Report-To; + + proxy_ignore_headers Set-Cookie Vary Cache-Control Expires; + + proxy_set_header User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"; + proxy_set_header Host "fonts.gstatic.com"; + proxy_set_header Accept "*/*"; + + proxy_cache penpot; + + add_header Access-Control-Allow-Origin $http_origin; + add_header Cache-Control max-age=86400; + add_header X-Cache-Status $upstream_cache_status; + } + location /internal/assets { internal; alias /home/penpot/penpot/backend/assets; diff --git a/docker/images/files/nginx.conf b/docker/images/files/nginx.conf index 35b06e731..b79a07022 100644 --- a/docker/images/files/nginx.conf +++ b/docker/images/files/nginx.conf @@ -45,6 +45,11 @@ http { '' close; } + proxy_cache_path /tmp/cache/ levels=2:2 keys_zone=penpot:20m; + proxy_cache_methods GET HEAD; + proxy_cache_valid any 48h; + proxy_cache_key "$host$request_uri"; + server { listen 80 default_server; server_name _; @@ -88,6 +93,53 @@ http { error_page 301 302 307 = @handle_redirect; } + location /internal/gfonts/css { + proxy_pass https://fonts.googleapis.com/css?$args; + proxy_hide_header Access-Control-Allow-Origin; + proxy_hide_header Cross-Origin-Resource-Policy; + proxy_hide_header Link; + proxy_hide_header Alt-Svc; + proxy_hide_header Cache-Control; + proxy_hide_header Expires; + + proxy_ignore_headers Set-Cookie Vary Cache-Control Expires; + + proxy_set_header User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"; + proxy_set_header Host "fonts.googleapis.com"; + proxy_set_header Accept "*/*"; + + proxy_cache penpot; + + add_header Access-Control-Allow-Origin $http_origin; + add_header Cache-Control max-age=86400; + add_header X-Cache-Status $upstream_cache_status; + } + + location ~ ^/internal/gfonts/font/(?.+) { + proxy_pass https://fonts.gstatic.com/s/$font_file; + + proxy_hide_header Access-Control-Allow-Origin; + proxy_hide_header Cross-Origin-Resource-Policy; + proxy_hide_header Link; + proxy_hide_header Alt-Svc; + proxy_hide_header Cache-Control; + proxy_hide_header Expires; + proxy_hide_header Cross-Origin-Opener-Policy; + proxy_hide_header Report-To; + + proxy_ignore_headers Set-Cookie Vary Cache-Control Expires; + + proxy_set_header User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"; + proxy_set_header Host "fonts.gstatic.com"; + proxy_set_header Accept "*/*"; + + proxy_cache penpot; + + add_header Access-Control-Allow-Origin $http_origin; + add_header Cache-Control max-age=86400; + add_header X-Cache-Status $upstream_cache_status; + } + location /internal/assets { internal; alias /opt/data/assets; diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs index b04190463..0094c6be4 100644 --- a/frontend/src/app/main/fonts.cljs +++ b/frontend/src/app/main/fonts.cljs @@ -14,12 +14,12 @@ [app.common.text :as txt] [app.config :as cf] [app.util.dom :as dom] + [app.util.globals :as globals] [app.util.http :as http] [app.util.object :as obj] [beicon.core :as rx] [clojure.set :as set] [cuerdas.core :as str] - [goog.events :as gev] [lambdaisland.uri :as u] [okulary.core :as l] [promesa.core :as p])) @@ -91,37 +91,14 @@ ;; only know if the font is needed or not (defonce ^:dynamic loaded-hints (l/atom #{})) -(defn- create-link-element - [uri] - (let [node (.createElement js/document "link")] - (unchecked-set node "href" uri) - (unchecked-set node "rel" "stylesheet") - (unchecked-set node "type" "text/css") - node)) - -(defn- create-style-element - [css] - (let [node (.createElement js/document "style")] - (unchecked-set node "innerHTML" css) - node)) - -(defn- load-font-css! - "Creates a link element and attaches it to the dom for correctly - load external css resource." - [url on-loaded] - (let [node (create-link-element url) - head (.-head ^js js/document)] - (gev/listenOnce node "load" (fn [_] - (when (fn? on-loaded) - (on-loaded)))) - (dom/append-child! head node))) - (defn- add-font-css! "Creates a style element and attaches it to the dom." - [css] - (let [head (.-head ^js js/document)] - (->> (create-style-element css) - (dom/append-child! head)))) + [id css] + (let [node (dom/create-element "style")] + (dom/set-attribute! node "id" id) + (dom/set-html! node css) + (when-let [head (unchecked-get globals/document "head")] + (dom/append-child! head node)))) ;; --- LOADER: BUILTIN @@ -139,18 +116,31 @@ ;; --- LOADER: GOOGLE -(defn generate-gfonts-url +(defn- generate-gfonts-url [{:keys [family variants]}] - (let [base (str "https://fonts.googleapis.com/css?family=" family) - variants (str/join "," (map :id variants))] - (str base ":" variants "&display=block"))) + (let [query (dm/str "family=" family ":" + (str/join "," (map :id variants)) + "&display=block")] + (dm/str + (-> cf/public-uri + (assoc :path "/internal/gfonts/css") + (assoc :query query))))) + +(defn- fetch-and-process-gfont-css + [url] + (let [base (dm/str (assoc cf/public-uri :path "/internal/gfonts/font"))] + (->> (http/send! {:method :get :uri url :mode :cors :response-type :text}) + (rx/map :body) + (rx/map #(str/replace % "https://fonts.gstatic.com/s" base))))) (defmethod load-font :google [{:keys [id ::on-loaded] :as font}] (when (exists? js/window) (log/info :hint "load-font" :font-id id :backend "google") (let [url (generate-gfonts-url font)] - (load-font-css! url (partial on-loaded id)) + (->> (fetch-and-process-gfont-css url) + (rx/tap #(on-loaded id)) + (rx/subs (partial add-font-css! id))) nil))) ;; --- LOADER: CUSTOM @@ -187,7 +177,7 @@ (when (exists? js/window) (log/info :hint "load-font" :font-id id :backend "custom") (let [css (generate-custom-font-css font)] - (add-font-css! css) + (add-font-css! id css) (when (fn? on-loaded) (on-loaded))))) From cacaf2bf95ea94ae8b92097659c26edf197b1776 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 23 Jun 2023 14:40:13 +0200 Subject: [PATCH 4/9] :arrow_up: Update devenv dockerfile --- docker/devenv/Dockerfile | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile index 0e7d54725..a57957549 100644 --- a/docker/devenv/Dockerfile +++ b/docker/devenv/Dockerfile @@ -3,10 +3,10 @@ LABEL maintainer="Andrey Antukh " ARG DEBIAN_FRONTEND=noninteractive -ENV NODE_VERSION=v18.15.0 \ - CLOJURE_VERSION=1.11.1.1257 \ - CLJKONDO_VERSION=2023.03.17 \ - BABASHKA_VERSION=1.3.176 \ +ENV NODE_VERSION=v18.16.1 \ + CLOJURE_VERSION=1.11.1.1347 \ + CLJKONDO_VERSION=2023.05.26 \ + BABASHKA_VERSION=1.3.181 \ LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 @@ -104,16 +104,12 @@ RUN set -eux; \ ARCH="$(dpkg --print-architecture)"; \ case "${ARCH}" in \ aarch64|arm64) \ - ESUM='1c4be9aa173cb0deb0d215643d9509c8900e5497290b29eee4bee335fa57984f'; \ - BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_aarch64_linux_hotspot_19.0.2_7.tar.gz'; \ - ;; \ - armhf|armv7l) \ - ESUM='6a51cb3868b5a3b81848a0d276267230ff3f8639f20ba9ae9ef1d386440bf1fd'; \ - BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_arm_linux_hotspot_19.0.2_7.tar.gz'; \ + ESUM='b16c0271899de1f0e277dc0398bfff11b54511765f104fa938929ac484dc926d'; \ + BINARY_URL='https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.1%2B9/OpenJDK20U-jdk_aarch64_linux_hotspot_20.0.1_9.tar.gz'; \ ;; \ amd64|x86_64) \ - ESUM='3a3ba7a3f8c3a5999e2c91ea1dca843435a0d1c43737bd2f6822b2f02fc52165'; \ - BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_x64_linux_hotspot_19.0.2_7.tar.gz'; \ + ESUM='43ad054f135a7894dc87ad5d10ad45d8e82846186515892acdbc17c2c5cd27e4'; \ + BINARY_URL='https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.1%2B9/OpenJDK20U-jdk_x64_linux_hotspot_20.0.1_9.tar.gz'; \ ;; \ *) \ echo "Unsupported arch: ${ARCH}"; \ From 840801ea15d9ecf7cac43e7db499350ef4246836 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 23 Jun 2023 16:24:20 +0200 Subject: [PATCH 5/9] :bug: Don't update modified_at field on applying components migration --- backend/src/app/rpc/commands/files.clj | 3 --- 1 file changed, 3 deletions(-) diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj index 2bcf8ddf0..bc34c69b7 100644 --- a/backend/src/app/rpc/commands/files.clj +++ b/backend/src/app/rpc/commands/files.clj @@ -273,16 +273,13 @@ (binding [pmap/*tracked* (atom {})] (let [data (ctf/migrate-to-components-v2 data) features (conj features "components/v2") - modified-at (dt/now) features' (db/create-array conn "text" features)] (db/update! conn :file {:data (blob/encode data) - :modified-at modified-at :features features'} {:id id}) (persist-pointers! conn id) (-> file - (assoc :modified-at modified-at) (assoc :features features) (assoc :data data)))) file)] From 7746649eb8b17d8b472551fbd52a2d496bb7b79c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 23 Jun 2023 16:27:36 +0200 Subject: [PATCH 6/9] :bug: Fix minor issues with fonts caching --- frontend/src/app/main/fonts.cljs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs index 0094c6be4..3bd444d32 100644 --- a/frontend/src/app/main/fonts.cljs +++ b/frontend/src/app/main/fonts.cljs @@ -126,19 +126,23 @@ (assoc :path "/internal/gfonts/css") (assoc :query query))))) -(defn- fetch-and-process-gfont-css - [url] +(defn- process-gfont-css + [css] (let [base (dm/str (assoc cf/public-uri :path "/internal/gfonts/font"))] - (->> (http/send! {:method :get :uri url :mode :cors :response-type :text}) - (rx/map :body) - (rx/map #(str/replace % "https://fonts.gstatic.com/s" base))))) + (str/replace css "https://fonts.gstatic.com/s" base))) + +(defn- fetch-gfont-css + [url] + (->> (http/send! {:method :get :uri url :mode :cors :response-type :text}) + (rx/map :body))) (defmethod load-font :google [{:keys [id ::on-loaded] :as font}] (when (exists? js/window) (log/info :hint "load-font" :font-id id :backend "google") (let [url (generate-gfonts-url font)] - (->> (fetch-and-process-gfont-css url) + (->> (fetch-gfont-css url) + (rx/map process-gfont-css) (rx/tap #(on-loaded id)) (rx/subs (partial add-font-css! id))) nil))) @@ -257,7 +261,6 @@ "Given a font and the variant-id, retrieves the fontface CSS" [{:keys [font-id font-variant-id] :or {font-variant-id "regular"}}] - (let [{:keys [backend family] :as font} (get @fontsdb font-id)] (cond (nil? font) @@ -265,10 +268,9 @@ (= :google backend) (let [variant (get-variant font font-variant-id)] - (-> (generate-gfonts-url - {:family family - :variants [variant]}) - (http/fetch-text))) + (->> (rx/of (generate-gfonts-url {:family family :variants [variant]})) + (rx/mapcat fetch-gfont-css) + (rx/map process-gfont-css))) (= :custom backend) (let [variant (get-variant font font-variant-id) From 7977d75e3d3f066c3d1d48c081d506e69df321bb Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 23 Jun 2023 16:28:11 +0200 Subject: [PATCH 7/9] :sparkles: Reduce the dashboard thumbnail size --- frontend/src/app/main/thumbnail_renderer.cljs | 4 ++-- frontend/src/app/main/ui/dashboard/grid.cljs | 4 +++- frontend/src/app/thumbnail_renderer.cljs | 13 +++++++------ frontend/src/app/util/webapi.cljs | 10 ++++++---- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/main/thumbnail_renderer.cljs b/frontend/src/app/main/thumbnail_renderer.cljs index 54c668af7..7680d4f53 100644 --- a/frontend/src/app/main/thumbnail_renderer.cljs +++ b/frontend/src/app/main/thumbnail_renderer.cljs @@ -62,9 +62,9 @@ (defn render "Renders a thumbnail." - [{:keys [data styles] :as params}] + [{:keys [data styles width] :as params}] (let [id (dm/str (uuid/next)) - payload #js {:data data :styles styles} + payload #js {:data data :styles styles :width width} message #js {:id id :scope "penpot/thumbnail-renderer" :payload payload}] diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index 27fc812ad..4da4f7255 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -62,7 +62,9 @@ (rx/mapcat (fn [{:keys [fonts] :as result}] (->> (fonts/render-font-styles fonts) (rx/map (fn [styles] - (assoc result :styles styles)))))) + (assoc result + :styles styles + :width 250)))))) (rx/mapcat thr/render) (rx/mapcat (partial persist-thumbnail file-id revn))))) diff --git a/frontend/src/app/thumbnail_renderer.cljs b/frontend/src/app/thumbnail_renderer.cljs index aa6dab25a..3b09fcca3 100644 --- a/frontend/src/app/thumbnail_renderer.cljs +++ b/frontend/src/app/thumbnail_renderer.cljs @@ -40,7 +40,6 @@ (obj/set! image "onload" #(do (rx/push! subs image) (rx/end! subs))) - (obj/set! image "crossOrigin" "anonymous") (obj/set! image "onerror" #(rx/error! subs %)) (obj/set! image "onabort" #(rx/error! subs (ex/error :type :internal @@ -157,10 +156,10 @@ (defn- svg-prepare "Prepares an SVG for rendering (resolves images to Data URIs and adds intrinsic size)." - [data styles] + [data styles width] (let [svg (svg-parse data)] (->> (svg-resolve-all! svg styles) - (rx/map #(svg-set-intrinsic-size! % 300)) + (rx/map #(svg-set-intrinsic-size! % width)) (rx/map svg-stringify)))) (defn- bitmap->blob @@ -182,13 +181,15 @@ "Renders a thumbnail using it's SVG and returns an ArrayBuffer of the image." [payload] (let [data (unchecked-get payload "data") - styles (unchecked-get payload "styles")] - (->> (svg-prepare data styles) + styles (unchecked-get payload "styles") + width (d/nilv (unchecked-get payload "width") 300)] + (->> (svg-prepare data styles width) (rx/map #(wapi/create-blob % "image/svg+xml")) (rx/map wapi/create-uri) (rx/mapcat (fn [uri] (->> (create-image uri) - (rx/mapcat wapi/create-image-bitmap) + (rx/mapcat #(wapi/create-image-bitmap % #js {:resizeWidth width + :resizeQuality "medium"})) (rx/tap #(wapi/revoke-uri uri))))) (rx/mapcat bitmap->blob)))) diff --git a/frontend/src/app/util/webapi.cljs b/frontend/src/app/util/webapi.cljs index 96ca465bc..183573c13 100644 --- a/frontend/src/app/util/webapi.cljs +++ b/frontend/src/app/util/webapi.cljs @@ -126,13 +126,15 @@ [clipboard-data] (when clipboard-data (let [file-list (-> (.-files ^js clipboard-data))] - (->> (range (.-length file-list)) - (map #(.item file-list %)) + (->> (range (.-length ^js file-list)) + (map #(.item ^js file-list %)) (filter #(str/starts-with? (.-type %) "image/")))))) (defn create-image-bitmap - [image] - (js/createImageBitmap image)) + ([image] + (js/createImageBitmap image)) + ([image options] + (js/createImageBitmap image options))) (defn request-fullscreen [el] From c3c6112ade621d8b0f1de64ce9e2734f68207bdf Mon Sep 17 00:00:00 2001 From: astudentinearth Date: Wed, 21 Jun 2023 18:09:26 +0300 Subject: [PATCH 8/9] :bug: Change independent corner radius input tooltips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make the inputs show a tooltip for the relevant corner(e.g. "Top left") instead of "Radius" Signed-off-by: Burak Yeniçeri --- .../sidebar/options/menus/measures.cljs | 8 ++++---- frontend/translations/ca.po | 16 ++++++++++++++++ frontend/translations/cs.po | 16 ++++++++++++++++ frontend/translations/de.po | 16 ++++++++++++++++ frontend/translations/en.po | 16 ++++++++++++++++ frontend/translations/es.po | 16 ++++++++++++++++ frontend/translations/eu.po | 16 ++++++++++++++++ frontend/translations/fr.po | 16 ++++++++++++++++ frontend/translations/he.po | 16 ++++++++++++++++ frontend/translations/hr.po | 16 ++++++++++++++++ frontend/translations/id.po | 16 ++++++++++++++++ frontend/translations/lv.po | 16 ++++++++++++++++ frontend/translations/pl.po | 16 ++++++++++++++++ frontend/translations/pt_BR.po | 16 ++++++++++++++++ frontend/translations/pt_PT.po | 16 ++++++++++++++++ frontend/translations/ro.po | 16 ++++++++++++++++ frontend/translations/tr.po | 16 ++++++++++++++++ frontend/translations/zh_CN.po | 16 ++++++++++++++++ 18 files changed, 276 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs index 3169f5aef..4cb7c0e92 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/menus/measures.cljs @@ -412,7 +412,7 @@ (= radius-mode :radius-4) [:* - [:div.input-element.mini {:title (tr "workspace.options.radius")} + [:div.input-element.mini {:title (tr "workspace.options.radius-top-left")} [:> numeric-input {:placeholder "--" :min 0 @@ -420,7 +420,7 @@ :on-change on-radius-r1-change :value (:r1 values)}]] - [:div.input-element.mini {:title (tr "workspace.options.radius")} + [:div.input-element.mini {:title (tr "workspace.options.radius-top-right")} [:> numeric-input {:placeholder "--" :min 0 @@ -428,7 +428,7 @@ :on-change on-radius-r2-change :value (:r2 values)}]] - [:div.input-element.mini {:title (tr "workspace.options.radius")} + [:div.input-element.mini {:title (tr "workspace.options.radius-bottom-right")} [:> numeric-input {:placeholder "--" :min 0 @@ -436,7 +436,7 @@ :on-change on-radius-r3-change :value (:r3 values)}]] - [:div.input-element.mini {:title (tr "workspace.options.radius")} + [:div.input-element.mini {:title (tr "workspace.options.radius-bottom-left")} [:> numeric-input {:placeholder "--" :min 0 diff --git a/frontend/translations/ca.po b/frontend/translations/ca.po index 67fcae713..ecbceee5c 100644 --- a/frontend/translations/ca.po +++ b/frontend/translations/ca.po @@ -3458,6 +3458,22 @@ msgstr "Tots els cantons" msgid "workspace.options.radius.single-corners" msgstr "Cantons individuals" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Superior esquerra" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Superior dreta" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Inferior esquerra" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Inferior dreta" + msgid "workspace.options.recent-fonts" msgstr "Recent" diff --git a/frontend/translations/cs.po b/frontend/translations/cs.po index edcd97ad8..6737bd477 100644 --- a/frontend/translations/cs.po +++ b/frontend/translations/cs.po @@ -3525,6 +3525,22 @@ msgstr "Všechny rohy" msgid "workspace.options.radius.single-corners" msgstr "Jednotlivé rohy" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Nahoře vlevo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Nahoře vpravo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Dole vlevo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Dole vpravo" + msgid "workspace.options.recent-fonts" msgstr "Nedávné" diff --git a/frontend/translations/de.po b/frontend/translations/de.po index 0c6625e02..81a5bce6d 100644 --- a/frontend/translations/de.po +++ b/frontend/translations/de.po @@ -3893,6 +3893,22 @@ msgstr "Alle Ecken" msgid "workspace.options.radius.single-corners" msgstr "Individuelle Ecken" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Oben links" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Oben rechts" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Unten links" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Unten rechts" + msgid "workspace.options.recent-fonts" msgstr "Aktuell" diff --git a/frontend/translations/en.po b/frontend/translations/en.po index caac63b6d..e8dd59406 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -4025,6 +4025,22 @@ msgstr "All corners" msgid "workspace.options.radius.single-corners" msgstr "Independent corners" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Top left" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Top right" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Bottom left" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Bottom right" + msgid "workspace.options.recent-fonts" msgstr "Recent" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index acc2519f4..42f40e5fc 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -4122,6 +4122,22 @@ msgstr "Todas las esquinas" msgid "workspace.options.radius.single-corners" msgstr "Esquinas individuales" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Arriba izquierda" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Arriba derecha" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Abajo izquierda" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Abajo derecha" + msgid "workspace.options.recent-fonts" msgstr "Recientes" diff --git a/frontend/translations/eu.po b/frontend/translations/eu.po index 897b0d95f..8938050d2 100644 --- a/frontend/translations/eu.po +++ b/frontend/translations/eu.po @@ -3635,6 +3635,22 @@ msgstr "Ertz guztiak" msgid "workspace.options.radius.single-corners" msgstr "Ertz bakarrak" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Goian ezkerrean" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Goian eskuman" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Behean ezkerrean" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Behean eskuman" + msgid "workspace.options.recent-fonts" msgstr "Azkenak" diff --git a/frontend/translations/fr.po b/frontend/translations/fr.po index c59627fe0..4071992f1 100644 --- a/frontend/translations/fr.po +++ b/frontend/translations/fr.po @@ -3479,6 +3479,22 @@ msgstr "Tous les coins" msgid "workspace.options.radius.single-corners" msgstr "Coins individuels" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "En haut à gauche" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "En haut à droite" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "En bas à gauche" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "En bas à droite" + #: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs, src/app/main/ui/inspect/exports.cljs, src/app/main/ui/workspace/header.cljs msgid "workspace.options.retry" msgstr "Réessayer" diff --git a/frontend/translations/he.po b/frontend/translations/he.po index d344dad20..e58d6cfd3 100644 --- a/frontend/translations/he.po +++ b/frontend/translations/he.po @@ -3830,6 +3830,22 @@ msgstr "כל הפינות" msgid "workspace.options.radius.single-corners" msgstr "פינות עצמאיות" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "בראש משמאל" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "בראש מימין" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "בתחתית משמאל" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "בתחתית מימין" + msgid "workspace.options.recent-fonts" msgstr "אחרונים" diff --git a/frontend/translations/hr.po b/frontend/translations/hr.po index 949abeb3d..30e166fcc 100644 --- a/frontend/translations/hr.po +++ b/frontend/translations/hr.po @@ -3645,6 +3645,22 @@ msgstr "Svi kutevi" msgid "workspace.options.radius.single-corners" msgstr "Jednostruki kutovi" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Gore lijevo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Gore desno" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Dolje lijevo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Dolje desno" + msgid "workspace.options.recent-fonts" msgstr "Nedavni" diff --git a/frontend/translations/id.po b/frontend/translations/id.po index a06544c58..b54da37bb 100644 --- a/frontend/translations/id.po +++ b/frontend/translations/id.po @@ -3780,6 +3780,22 @@ msgstr "Semua sudut" msgid "workspace.options.radius.single-corners" msgstr "Sudut individu" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Kiri atas" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Kanan atas" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Kiri bawah" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Kanan bawah" + msgid "workspace.options.recent-fonts" msgstr "Terkini" diff --git a/frontend/translations/lv.po b/frontend/translations/lv.po index 1b16662ee..b798f414d 100644 --- a/frontend/translations/lv.po +++ b/frontend/translations/lv.po @@ -3815,6 +3815,22 @@ msgstr "Visi stūri" msgid "workspace.options.radius.single-corners" msgstr "Atsevišķie stūri" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Augšā pa kreisi" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Augšā pa labi" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Apakšā pa kreisi" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Apakšā pa labi" + msgid "workspace.options.recent-fonts" msgstr "Pēdējie" diff --git a/frontend/translations/pl.po b/frontend/translations/pl.po index c714d38c5..bfe0c4581 100644 --- a/frontend/translations/pl.po +++ b/frontend/translations/pl.po @@ -3842,6 +3842,22 @@ msgstr "Wszystkie rogi" msgid "workspace.options.radius.single-corners" msgstr "Poszczególne narożniki" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Górne lewo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Górne prawo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Dolne lewo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Dolne prawo" + msgid "workspace.options.recent-fonts" msgstr "Bieżące" diff --git a/frontend/translations/pt_BR.po b/frontend/translations/pt_BR.po index 55ae08452..d6f75a8ca 100644 --- a/frontend/translations/pt_BR.po +++ b/frontend/translations/pt_BR.po @@ -3782,6 +3782,22 @@ msgstr "Todos os cantos" msgid "workspace.options.radius.single-corners" msgstr "Cantos individuais" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Superior (a esquerda)" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Superior (a direita)" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Inferior esquerdo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Inferior direito" + msgid "workspace.options.recent-fonts" msgstr "Recente" diff --git a/frontend/translations/pt_PT.po b/frontend/translations/pt_PT.po index 848f722a3..7d04a6f48 100644 --- a/frontend/translations/pt_PT.po +++ b/frontend/translations/pt_PT.po @@ -3632,6 +3632,22 @@ msgstr "Todos os cantos" msgid "workspace.options.radius.single-corners" msgstr "Cantos individuais" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Superior esquerdo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Superior direito" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Inferior esquerdo" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Inferior direito" + msgid "workspace.options.recent-fonts" msgstr "Recente" diff --git a/frontend/translations/ro.po b/frontend/translations/ro.po index f1848b5f6..f16de1870 100644 --- a/frontend/translations/ro.po +++ b/frontend/translations/ro.po @@ -3807,6 +3807,22 @@ msgstr "Toate colţurile" msgid "workspace.options.radius.single-corners" msgstr "Colțuri individuale" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Stânga sus" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Dreapta sus" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Stânga jos" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Dreapta jos" + msgid "workspace.options.recent-fonts" msgstr "Recente" diff --git a/frontend/translations/tr.po b/frontend/translations/tr.po index 61b3bf1e2..31300fe2b 100644 --- a/frontend/translations/tr.po +++ b/frontend/translations/tr.po @@ -3957,6 +3957,22 @@ msgstr "Tüm köşeler" msgid "workspace.options.radius.single-corners" msgstr "Bireysel köşeler" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "Sol üst" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "Sağ üst" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "Sol alt" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "Sağ alt" + msgid "workspace.options.recent-fonts" msgstr "Son kullanılanlar" diff --git a/frontend/translations/zh_CN.po b/frontend/translations/zh_CN.po index daa5634f0..f227f41e3 100644 --- a/frontend/translations/zh_CN.po +++ b/frontend/translations/zh_CN.po @@ -3668,6 +3668,22 @@ msgstr "所有角" msgid "workspace.options.radius.single-corners" msgstr "单个角" +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-left" +msgstr "左上角" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-top-right" +msgstr "右上角" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-left" +msgstr "左下角" + +#: src/app/main/ui/workspace/sidebar/options/menus/measures.cljs +msgid "workspace.options.radius-bottom-right" +msgstr "右下角" + msgid "workspace.options.recent-fonts" msgstr "最近的" From 2249bf974573c8022b57e3f6b032e5368ccde16e Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 27 Jun 2023 10:50:58 +0200 Subject: [PATCH 9/9] :paperclip: Update CHANGES.md file --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index f923a9262..8cbfa8652 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -55,6 +55,7 @@ - Open project in new tab from workspace (by @akshay-gupta7) [Github #3246](https://github.com/penpot/penpot/pull/3246) - Distribute fix enabled when two elements were selected (by @dfelinto) [Github #3266](https://github.com/penpot/penpot/pull/3266) - Distribute vertical spacing failing for overlapped text (by @dfelinto) [Github #3267](https://github.com/penpot/penpot/pull/3267) +- bug Change independent corner radius input tooltips #3332 (by @astudentinearth) [Github #3332](https://github.com/penpot/penpot/pull/3332) ## 1.18.6