From 8b0ead68320d1a52d2c150af6bb9f10dbae0e03f Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Jun 2025 13:56:30 +0200 Subject: [PATCH 1/7] :bug: Fix regression on singup flow Move all params handling to prepare-register, just for consistency --- backend/src/app/rpc/commands/auth.clj | 20 ++++----- .../test/backend_tests/rpc_profile_test.clj | 42 +++++++++---------- frontend/src/app/main/ui/auth/register.cljs | 34 ++++++++------- 3 files changed, 47 insertions(+), 49 deletions(-) diff --git a/backend/src/app/rpc/commands/auth.clj b/backend/src/app/rpc/commands/auth.clj index 04c28dc02f..301582a2f9 100644 --- a/backend/src/app/rpc/commands/auth.clj +++ b/backend/src/app/rpc/commands/auth.clj @@ -231,13 +231,14 @@ :hint "email has complaint reports"))) (defn prepare-register - [{:keys [::db/pool] :as cfg} {:keys [email accept-newsletter-updates] :as params}] + [{:keys [::db/pool] :as cfg} {:keys [fullname email accept-newsletter-updates] :as params}] (validate-register-attempt! cfg params) (let [email (profile/clean-email email) profile (profile/get-profile-by-email pool email) params {:email email + :fullname fullname :password (:password params) :invitation-token (:invitation-token params) :backend "penpot" @@ -254,8 +255,10 @@ (def schema:prepare-register-profile [:map {:title "prepare-register-profile"} + [:fullname ::sm/text] [:email ::sm/email] [:password schema:password] + [:create-welcome-file {:optional true} :boolean] [:invitation-token {:optional true} schema:token]]) (sv/defmethod ::prepare-register-profile @@ -359,13 +362,9 @@ :extra-data ptoken}))) (defn register-profile - [{:keys [::db/conn ::wrk/executor] :as cfg} {:keys [token fullname theme] :as params}] - (let [theme (when (= theme "light") theme) - claims (tokens/verify (::setup/props cfg) {:token token :iss :prepared-register}) - params (-> claims - (into params) - (assoc :fullname fullname) - (assoc :theme theme)) + [{:keys [::db/conn ::wrk/executor] :as cfg} {:keys [token] :as params}] + (let [claims (tokens/verify (::setup/props cfg) {:token token :iss :prepared-register}) + params (into claims params) profile (if-let [profile-id (:profile-id claims)] (profile/get-profile conn profile-id) @@ -479,10 +478,7 @@ (def schema:register-profile [:map {:title "register-profile"} - [:token schema:token] - [:fullname [::sm/word-string {:max 100}]] - [:theme {:optional true} [:string {:max 10}]] - [:create-welcome-file {:optional true} :boolean]]) + [:token schema:token]]) (sv/defmethod ::register-profile {::rpc/auth false diff --git a/backend/test/backend_tests/rpc_profile_test.clj b/backend/test/backend_tests/rpc_profile_test.clj index 7e4645f678..8327d510c5 100644 --- a/backend/test/backend_tests/rpc_profile_test.clj +++ b/backend/test/backend_tests/rpc_profile_test.clj @@ -379,15 +379,14 @@ (t/deftest prepare-register-and-register-profile-1 (let [data {::th/type :prepare-register-profile :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] (t/is (string? token)) ;; try register without token - (let [data {::th/type :register-profile - :fullname "foobar" - :accept-terms-and-privacy true} + (let [data {::th/type :register-profile} out (th/command! data)] ;; (th/print-result! out) (let [error (:error out)] @@ -398,11 +397,8 @@ ;; try correct register (let [data {::th/type :register-profile :token token - :fullname "foobar" :utm_campaign "utma" - :mtm_campaign "mtma" - :accept-terms-and-privacy true - :accept-newsletter-subscription true}] + :mtm_campaign "mtma"}] (let [{:keys [result error]} (th/command! data)] (t/is (nil? error)))) @@ -424,6 +420,7 @@ ;; PREPARE REGISTER (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -432,10 +429,7 @@ ;; DO REGISTRATION (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 1 (:call-count @mock)))) @@ -445,6 +439,7 @@ ;; PREPARE REGISTER: second attempt (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -479,6 +474,7 @@ ;; PREPARE REGISTER (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -487,10 +483,7 @@ ;; DO REGISTRATION (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 1 (:call-count @mock)))) @@ -504,6 +497,7 @@ ;; PREPARE REGISTER: second attempt (let [data {::th/type :prepare-register-profile :email "hello@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data) token (get-in out [:result :token])] @@ -514,10 +508,7 @@ :return true}] ;; DO REGISTRATION: second attempt (let [data {::th/type :register-profile - :token @current-token - :fullname "foobar" - :accept-terms-and-privacy true - :accept-newsletter-subscription true} + :token @current-token} out (th/command! data)] (t/is (nil? (:error out))) (t/is (= 0 (:call-count @mock)))))))) @@ -532,6 +523,7 @@ :member-email "user@example.com"}) data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} @@ -542,8 +534,7 @@ (let [rtoken (:token result) data {::th/type :register-profile - :token rtoken - :fullname "foobar"} + :token rtoken} {:keys [result error] :as out} (th/command! data)] ;; (th/print-result! out) @@ -563,6 +554,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data)] @@ -582,6 +574,7 @@ :member-email "user@example.com"}) data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -604,6 +597,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken :email "user@example.com" + :fullname "foobar" :password "foobar"} out (th/command! data)] @@ -624,6 +618,7 @@ data {::th/type :prepare-register-profile :invitation-token itoken + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -636,6 +631,7 @@ (t/deftest prepare-register-with-registration-disabled (with-redefs [app.config/flags #{}] (let [data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"} out (th/command! data)] @@ -648,6 +644,7 @@ (t/deftest prepare-register-with-existing-user (let [profile (th/create-profile* 1) data {::th/type :prepare-register-profile + :fullname "foobar" :email (:email profile) :password "foobar"} out (th/command! data)] @@ -660,6 +657,7 @@ (let [pool (:app.db/pool th/*system*) data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"}] @@ -674,6 +672,7 @@ (t/deftest register-profile-with-complained-email (let [pool (:app.db/pool th/*system*) data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "foobar"}] @@ -688,6 +687,7 @@ (t/deftest register-profile-with-email-as-password (let [data {::th/type :prepare-register-profile + :fullname "foobar" :email "user@example.com" :password "USER@example.com"} out (th/command! data)] diff --git a/frontend/src/app/main/ui/auth/register.cljs b/frontend/src/app/main/ui/auth/register.cljs index 3cedef6c88..d066d1ecf3 100644 --- a/frontend/src/app/main/ui/auth/register.cljs +++ b/frontend/src/app/main/ui/auth/register.cljs @@ -82,7 +82,7 @@ on-error (mf/use-fn - (fn [form cause] + (fn [cause] (let [{:keys [type code] :as edata} (ex-data cause)] (condp = [type code] [:restriction :registration-disabled] @@ -101,7 +101,10 @@ (swap! form assoc-in [:errors :password] {:message (tr "errors.email-as-password")}) - (st/emit! (ntf/error (tr "errors.generic"))))))) + (do + (when-let [explain (get edata :explain)] + (println explain)) + (st/emit! (ntf/error (tr "errors.generic")))))))) on-success (mf/use-fn @@ -109,10 +112,9 @@ (fn [params] (if (fn? on-success-callback) (on-success-callback (:email params)) - (cond - (some? (:token params)) - (let [token (:token params)] + (some? (:invitation-token params)) + (let [token (:invitation-token params)] (st/emit! (rt/nav :auth-verify-token {:token token}))) (:is-active params) @@ -126,25 +128,25 @@ on-register-profile (mf/use-fn (mf/deps on-success on-error) - (fn [form] + (fn [params] (reset! submitted? true) - (let [create-welcome-file? - (cf/external-feature-flag "onboarding-03" "test") - - params - (cond-> form - create-welcome-file? (assoc :create-welcome-file true))] - (->> (rp/cmd! :register-profile params) - (rx/subs! on-success on-error #(reset! submitted? false)))))) + (->> (rp/cmd! :register-profile params) + (rx/subs! on-success on-error #(reset! submitted? false))))) on-submit (mf/use-fn (mf/deps on-success-callback) (fn [form _event] (reset! submitted? true) - (let [cdata (:clean-data @form)] + (let [create-welcome-file? + (cf/external-feature-flag "onboarding-03" "test") + + cdata + (cond-> (:clean-data @form) + create-welcome-file? + (assoc :create-welcome-file true))] + (->> (rp/cmd! :prepare-register-profile cdata) - (rx/map #(merge % cdata)) (rx/finalize #(reset! submitted? false)) (rx/subs! on-register-profile)))))] From 8cb42a63e579720a2f56df8cdd57d53bc7d543bb Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Jun 2025 15:05:29 +0200 Subject: [PATCH 2/7] :bug: Fix bad initial state on profile settings --- frontend/src/app/main/ui/settings/options.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/settings/options.cljs b/frontend/src/app/main/ui/settings/options.cljs index d855086816..fc5e9e14af 100644 --- a/frontend/src/app/main/ui/settings/options.cljs +++ b/frontend/src/app/main/ui/settings/options.cljs @@ -41,7 +41,7 @@ (update :lang #(or % "")) (update :theme #(if (= % "default") "dark" - %)))) + (or % "dark"))))) form (fm/use-form :schema schema:options-form :initial initial)] From 22ca1ab5f9ed07ee8b17389741182e83da394acb Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Jun 2025 16:56:44 +0200 Subject: [PATCH 3/7] :bug: Fix incorrect params handling on exporter that caused unexpected exception on multiple exports --- exporter/src/app/handlers/export_shapes.cljs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exporter/src/app/handlers/export_shapes.cljs b/exporter/src/app/handlers/export_shapes.cljs index 9327d29801..0acfda287c 100644 --- a/exporter/src/app/handlers/export_shapes.cljs +++ b/exporter/src/app/handlers/export_shapes.cljs @@ -141,8 +141,8 @@ proc (-> (p/do (p/loop [exports (seq exports)] - (when-let [export (-> (first exports) - (assoc :skip-children skip-children))] + (when-let [export (some-> (first exports) + (assoc :skip-children skip-children))] (p/do (rd/render export append) (p/recur (rest exports))))) From 332bbc71c365cd9e6c9be39b0ca0f86781e3fb89 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 17 Jun 2025 16:13:26 +0200 Subject: [PATCH 4/7] :bug: Fix incorrect handling of opacity change on gradient stop --- common/src/app/common/types/color.cljc | 7 +++++-- .../main/ui/workspace/sidebar/options/rows/color_row.cljs | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/common/src/app/common/types/color.cljc b/common/src/app/common/types/color.cljc index 9173af2437..89b84ea1e9 100644 --- a/common/src/app/common/types/color.cljc +++ b/common/src/app/common/types/color.cljc @@ -22,7 +22,7 @@ ;; SCHEMAS & TYPES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(def valid-color-attrs +(def ^:private required-color-attrs "A set used for proper check if color should contain only one of the attrs listed in this set." #{:image :gradient :color}) @@ -31,7 +31,7 @@ "Check if color has correct color attrs" [color] (let [attrs (set (keys color)) - result (set/intersection attrs valid-color-attrs)] + result (set/intersection attrs required-color-attrs)] (= 1 (count result)))) (def ^:private hex-color-rx @@ -126,6 +126,9 @@ (sm/optional-keys schema:image-color)] [:fn has-valid-color-attrs?]]) +(def color-attrs + (into required-color-attrs (sm/keys schema:color-attrs))) + (def schema:library-color-attrs [:map {:title "ColorAttrs" :closed true} [:id ::sm/uuid] diff --git a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs index 5b97445895..102be8180b 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs @@ -10,6 +10,7 @@ [app.common.colors :as cc] [app.common.data :as d] [app.common.data.macros :as dm] + [app.common.types.color :as types.color] [app.common.types.shape.attrs :refer [default-color]] [app.main.data.modal :as modal] [app.main.data.workspace.colors :as dwc] @@ -125,7 +126,8 @@ (fn [value] (let [color (-> color (assoc :opacity (/ value 100)) - (dissoc :ref-id :ref-file))] + (dissoc :ref-id :ref-file) + (select-keys types.color/color-attrs))] (st/emit! (dwc/add-recent-color color) (on-change color))))) From a772b442c87375db0d9ec296b285f12b8fde7af8 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 17 Jun 2025 17:34:13 +0200 Subject: [PATCH 5/7] :bug: Fix incorrect type handling on path join nodes operation --- common/src/app/common/types/path/segment.cljc | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/common/src/app/common/types/path/segment.cljc b/common/src/app/common/types/path/segment.cljc index 2f2e41bbf9..af0d6f68d9 100644 --- a/common/src/app/common/types/path/segment.cljc +++ b/common/src/app/common/types/path/segment.cljc @@ -628,27 +628,38 @@ (rest content)))))))) (defn join-nodes - "Creates new segments between points that weren't previously" + "Creates new segments between points that weren't previously. + Returns plain segments vector." [content points] - (let [segments-set (into #{} - (map (juxt :start :end)) - (get-segments-with-points content points)) + (let [;; Materialize the content to a vector (plain format) + content + (vec content) - create-line-command (fn [point other] - [(helpers/make-move-to point) - (helpers/make-line-to other)]) + segments-set + (into #{} + (map (juxt :start :end)) + (get-segments-with-points content points)) - not-segment? (fn [point other] (and (not (contains? segments-set [point other])) - (not (contains? segments-set [other point])))) + create-line-segment + (fn [point other] + [(helpers/make-move-to point) + (helpers/make-line-to other)]) - new-content (->> (d/map-perm create-line-command not-segment? points) - (flatten) - (into []))] + not-segment? + (fn [point other] + (and (not (contains? segments-set [point other])) + (not (contains? segments-set [other point])))) + + ;; FIXME: implement map-perm in terms of transducer, will + ;; improve performance and remove the need to use flatten + new-content + (->> (d/map-perm create-line-segment not-segment? points) + (flatten) + (into []))] (into content new-content))) - (defn separate-nodes "Removes the segments between the points given" [content points] From c3b306201dbc343a7a9d661f852ad4c3099bad8e Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 17 Jun 2025 23:17:44 +0200 Subject: [PATCH 6/7] :bug: Fix incorrect behavior of `make-curve-point` fn --- common/src/app/common/types/path/helpers.cljc | 2 +- common/src/app/common/types/path/segment.cljc | 130 +++++++++--------- 2 files changed, 64 insertions(+), 68 deletions(-) diff --git a/common/src/app/common/types/path/helpers.cljc b/common/src/app/common/types/path/helpers.cljc index 5ec125a0d4..389b6cf8e1 100644 --- a/common/src/app/common/types/path/helpers.cljc +++ b/common/src/app/common/types/path/helpers.cljc @@ -98,7 +98,7 @@ (defn segment->point ([segment] (segment->point segment :x)) ([segment coord] - (let [params (get segment :params)] + (when-let [params (get segment :params)] (case coord :c1 (gpt/point (get params :c1x) (get params :c1y)) diff --git a/common/src/app/common/types/path/segment.cljc b/common/src/app/common/types/path/segment.cljc index 2f2e41bbf9..9844c176ce 100644 --- a/common/src/app/common/types/path/segment.cljc +++ b/common/src/app/common/types/path/segment.cljc @@ -363,7 +363,7 @@ (defn make-curve-point "Changes the content to make the point a 'curve'. The handlers will be positioned in the same vector that results from the previous->next - points but with fixed length." + points but with fixed length; return a plain segments vector" [content point] (let [;; We perform this operation before because it can be @@ -372,17 +372,21 @@ indices (point-indices content point) + ;; We transform content to a plain format for execute the + ;; algorithm because right now is the only way to execute it + content + (vec content) + vectors (map (fn [index] - (let [segment (nth content index) - prev-i (dec index) - prev (when (not (= :move-to (:command segment))) - (get content prev-i)) - next-i (inc index) - next (get content next-i) - - next (when (not (= :move-to (:command next))) - next)] + (let [segment (get content index) + prev-i (dec index) + prev (when (not (= :move-to (:command segment))) + (get content prev-i)) + next-i (inc index) + next (get content next-i) + next (when (not (= :move-to (:command next))) + next)] {:index index :prev-i (when (some? prev) prev-i) :prev-c prev @@ -394,81 +398,73 @@ indices) points - (into #{} xf:mapcat-points vectors) + (into #{} xf:mapcat-points vectors)] - ;; We transform content to a plain format for execute the - ;; algorithm because right now is the only way to execute it - content - (vec content) + (if (= (count points) 2) + (let [[fpoint spoint] (vec points) + v1 (gpt/to-vec fpoint point) + v2 (gpt/to-vec fpoint spoint) + vp (gpt/project v1 v2) + vh (gpt/subtract v1 vp) - content - (if (= (count points) 2) - (let [[fpoint spoint] (vec points) - v1 (gpt/to-vec fpoint point) - v2 (gpt/to-vec fpoint spoint) - vp (gpt/project v1 v2) - vh (gpt/subtract v1 vp) + add-curve + (fn [content {:keys [index prev-p next-p next-i]}] + (let [curr-segment (get content index) + curr-command (get curr-segment :command) - add-curve - (fn [content {:keys [index prev-p next-p next-i]}] - (let [curr-segment (get content index) - curr-command (get curr-segment :command) + next-segment (get content next-i) + next-command (get next-segment :command) - next-segment (get content next-i) - next-command (get next-segment :command) + ;; New handlers for prev-point and next-point + prev-h + (when (some? prev-p) (gpt/add prev-p vh)) - ;; New handlers for prev-point and next-point - prev-h - (when (some? prev-p) (gpt/add prev-p vh)) + next-h + (when (some? next-p) (gpt/add next-p vh)) - next-h - (when (some? next-p) (gpt/add next-p vh)) + ;; Correct 1/3 to the point improves the curve + prev-correction + (when (some? prev-h) (gpt/scale (gpt/to-vec prev-h point) (/ 1 3))) - ;; Correct 1/3 to the point improves the curve - prev-correction - (when (some? prev-h) (gpt/scale (gpt/to-vec prev-h point) (/ 1 3))) + next-correction + (when (some? next-h) (gpt/scale (gpt/to-vec next-h point) (/ 1 3))) - next-correction - (when (some? next-h) (gpt/scale (gpt/to-vec next-h point) (/ 1 3))) + prev-h + (when (some? prev-h) (gpt/add prev-h prev-correction)) - prev-h - (when (some? prev-h) (gpt/add prev-h prev-correction)) + next-h + (when (some? next-h) (gpt/add next-h next-correction))] - next-h - (when (some? next-h) (gpt/add next-h next-correction))] + (cond-> content + (and (= :line-to curr-command) (some? prev-p)) + (update index helpers/update-curve-to prev-p prev-h) - (cond-> content - (and (= :line-to curr-command) (some? prev-p)) - (update index helpers/update-curve-to prev-p prev-h) + (and (= :line-to next-command) (some? next-p)) + (update next-i helpers/update-curve-to next-h next-p) - (and (= :line-to next-command) (some? next-p)) - (update next-i helpers/update-curve-to next-h next-p) + (and (= :curve-to curr-command) (some? prev-p)) + (update index update-handler :c2 prev-h) - (and (= :curve-to curr-command) (some? prev-p)) - (update index update-handler :c2 prev-h) + (and (= :curve-to next-command) (some? next-p)) + (update next-i update-handler :c1 next-h))))] - (and (= :curve-to next-command) (some? next-p)) - (update next-i update-handler :c1 next-h))))] + (reduce add-curve content vectors)) - (reduce add-curve content vectors)) + (let [add-curve + (fn [content {:keys [index segment prev-p next-c next-i]}] + (cond-> content + (= :line-to (:command segment)) + (update index #(line->curve prev-p %)) - (let [add-curve - (fn [content {:keys [index segment prev-p next-c next-i]}] - (cond-> content - (= :line-to (:command segment)) - (update index #(line->curve prev-p %)) + (= :curve-to (:command segment)) + (update index #(line->curve prev-p %)) - (= :curve-to (:command segment)) - (update index #(line->curve prev-p %)) + (= :line-to (:command next-c)) + (update next-i #(line->curve point %)) - (= :line-to (:command next-c)) - (update next-i #(line->curve point %)) - - (= :curve-to (:command next-c)) - (update next-i #(line->curve point %))))] - (reduce add-curve content vectors)))] - - (impl/from-plain content))) + (= :curve-to (:command next-c)) + (update next-i #(line->curve point %))))] + (reduce add-curve content vectors))))) (defn get-segments-with-points "Given a content and a set of points return all the segments in the path From f7c4bd77beb4b906bd713b7e7517ba72ccb76a4a Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Wed, 18 Jun 2025 09:08:30 +0200 Subject: [PATCH 7/7] :bug: Fix right-sidebar width overflow --- CHANGES.md | 1 + frontend/src/app/main/ui/inspect/right_sidebar.scss | 2 +- frontend/src/app/main/ui/workspace/sidebar.scss | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 31e97a26e0..210005ae78 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -51,6 +51,7 @@ on-premises instances** that want to keep up to date. - Misalignments at Create account [Taiga #11315](https://tree.taiga.io/project/penpot/issue/11315) - Fix issue with importing files where flex/grid is used [Taiga #11334](https://tree.taiga.io/project/penpot/issue/11334) - Fix wrong color in the export progress bar [Taiga #11299](https://tree.taiga.io/project/penpot/issue/11299) +- Fix right sidebar width overflow on long layer names [Taiga #11212](https://tree.taiga.io/project/penpot/issue/11212) ## 2.7.2 diff --git a/frontend/src/app/main/ui/inspect/right_sidebar.scss b/frontend/src/app/main/ui/inspect/right_sidebar.scss index 2ce156ce68..20d005480b 100644 --- a/frontend/src/app/main/ui/inspect/right_sidebar.scss +++ b/frontend/src/app/main/ui/inspect/right_sidebar.scss @@ -35,7 +35,7 @@ .shape-row { display: grid; - grid-template-columns: auto 1fr; + grid-template-columns: auto minmax(0, 1fr); gap: $s-8; align-items: center; height: $s-32; diff --git a/frontend/src/app/main/ui/workspace/sidebar.scss b/frontend/src/app/main/ui/workspace/sidebar.scss index faa1700dd5..880a2604ff 100644 --- a/frontend/src/app/main/ui/workspace/sidebar.scss +++ b/frontend/src/app/main/ui/workspace/sidebar.scss @@ -63,7 +63,7 @@ $width-settings-bar-max: $sz-500; .right-settings-bar { grid-area: right-sidebar; display: grid; - grid-template-rows: auto 1fr; + grid-template-rows: auto minmax(0, 1fr); height: 100vh; width: $width-settings-bar; background-color: var(--panel-background-color);