0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-21 06:02:32 -05:00

Merge branch 'astudentinearth-astudentinearth-change-radius-tooltips' into staging

This commit is contained in:
Alejandro Alonso 2023-06-27 10:53:09 +02:00
commit af114ee9d0
29 changed files with 457 additions and 75 deletions

View file

@ -1,5 +1,22 @@
# CHANGELOG
## 1.20.0
### :boom: Breaking changes & Deprecations
### :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
### :heart: Community contributions by (Thank you!)
## 1.19.0
### :boom: Breaking changes & Deprecations
@ -39,6 +56,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

View file

@ -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)]

View file

@ -3,10 +3,10 @@ LABEL maintainer="Andrey Antukh <niwi@niwi.nz>"
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}"; \

View file

@ -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/(?<font_file>.+) {
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;

View file

@ -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/(?<font_file>.+) {
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;

View file

@ -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,35 @@
;; --- 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- process-gfont-css
[css]
(let [base (dm/str (assoc cf/public-uri :path "/internal/gfonts/font"))]
(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)]
(load-font-css! url (partial on-loaded id))
(->> (fetch-gfont-css url)
(rx/map process-gfont-css)
(rx/tap #(on-loaded id))
(rx/subs (partial add-font-css! id)))
nil)))
;; --- LOADER: CUSTOM
@ -187,7 +181,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)))))
@ -267,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)
@ -275,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)

View file

@ -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}]

View file

@ -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)))))

View file

@ -403,28 +403,28 @@
(= 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
: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
: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
: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

View file

@ -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))))

View file

@ -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]

View file

@ -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"

View file

@ -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é"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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 "אחרונים"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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 "最近的"

View file

@ -1 +1 @@
1.19.0
1.20.0