From 328b7739e084c1d2119379fc86395006cc7363c3 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 13 Mar 2026 13:07:24 +0100 Subject: [PATCH] :paperclip: Prepare changes and flags for next release (#8624) --- CHANGES.md | 28 +++++++++++++------ common/src/app/common/flags.cljc | 9 +++++- frontend/src/app/main/ui/dashboard/fonts.cljs | 7 +++-- .../app/main/ui/workspace/context_menu.cljs | 3 +- .../ui/workspace/sidebar/assets/colors.cljs | 4 ++- .../sidebar/assets/typographies.cljs | 4 ++- .../main/ui/workspace/sidebar/layer_item.cljs | 28 ++++++++++--------- 7 files changed, 54 insertions(+), 29 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 10962457e0..da8dcab15f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,28 +1,38 @@ # CHANGELOG +## 2.16.0 (Unreleased) + +### :boom: Breaking changes & Deprecations + +### :rocket: Epics and highlights + +### :sparkles: New features & Enhancements + +- Allow duplicating color and typography styles (by @MkDev11) [Github #2912](https://github.com/penpot/penpot/issues/2912) +- Import Tokens from linked library [Github #8391](https://github.com/penpot/penpot/pull/8391) +- Option to download custom fonts (by @dfelinto) [Github #8320](https://github.com/penpot/penpot/issues/8320) +- Add woff2 support on user uploaded fonts (by @Nivl) [Github #8248](https://github.com/penpot/penpot/pull/8248) +- Add copy as image to clipboard option to workspace context menu (by @dfelinto) [Github #8313](https://github.com/penpot/penpot/pull/8313) +- Add Tab/Shift+Tab navigation to rename layers sequentially (by @bittoby) [Github #8474](https://github.com/penpot/penpot/pull/8474) + + +### :bug: Bugs fixed + + ## 2.15.0 (Unreleased) ### :boom: Breaking changes & Deprecations ### :rocket: Epics and highlights -### :heart: Community contributions (Thank you!) - ### :sparkles: New features & Enhancements -- Allow duplicating color and typography styles (by @MkDev11) [Github #2912](https://github.com/penpot/penpot/issues/2912) - Add MCP server integration [Taiga #13112](https://tree.taiga.io/project/penpot/us/13112), [Taiga #13114](https://tree.taiga.io/project/penpot/us/13114) -- Add woff2 support on user uploaded fonts (by @Nivl) [Github #8248](https://github.com/penpot/penpot/pull/8248) -- Option to download custom fonts (by @dfelinto) [Github #8320](https://github.com/penpot/penpot/issues/8320) -- Add copy as image to clipboard option to workspace context menu (by @dfelinto) [Github #8313](https://github.com/penpot/penpot/pull/8313) -- Import Tokens from linked library [Github #8391](https://github.com/penpot/penpot/pull/8391) -- Add Tab/Shift+Tab navigation to rename layers sequentially (by @bittoby) [Github #8474](https://github.com/penpot/penpot/pull/8474) ### :bug: Bugs fixed - Fix Alt/Option to draw shapes from center point (by @offreal) [Github #8361](https://github.com/penpot/penpot/pull/8361) - Add token name on broken token pill on sidebar [Taiga #13527](https://tree.taiga.io/project/penpot/issue/13527) -- Fix `penpot.openPage()` plugin API not navigating in the same tab; change default to same-tab navigation and allow passing a UUID string instead of a Page object [Github #8520](https://github.com/penpot/penpot/issues/8520) ## 2.14.0 (Unreleased) diff --git a/common/src/app/common/flags.cljc b/common/src/app/common/flags.cljc index 12398760b3..96b6764616 100644 --- a/common/src/app/common/flags.cljc +++ b/common/src/app/common/flags.cljc @@ -120,6 +120,8 @@ :telemetry :terms-and-privacy-checkbox :tiered-file-data-storage + + ;; Tokens :token-base-font-size :token-combobox :token-color @@ -141,6 +143,10 @@ ;; Enable performance logs in devconsole (disabled by default) :perf-logs + ;; Used for designate features that will be available in the next + ;; release + :canary + ;; Security layer middleware that filters request by fetch ;; metadata headers :sec-fetch-metadata-middleware @@ -183,7 +189,8 @@ :enable-token-shadow :enable-inspect-styles :enable-feature-fdata-objects-map - :enable-token-import-from-library]) + ;; Temporary deactivated + #_:enable-token-import-from-library]) (defn parse [& flags] diff --git a/frontend/src/app/main/ui/dashboard/fonts.cljs b/frontend/src/app/main/ui/dashboard/fonts.cljs index e1460623e8..ad90465c4e 100644 --- a/frontend/src/app/main/ui/dashboard/fonts.cljs +++ b/frontend/src/app/main/ui/dashboard/fonts.cljs @@ -267,9 +267,10 @@ [{:name (tr "labels.edit") :id "font-edit" :handler on-edit} - {:name (tr "labels.download-simple") - :id "font-download" - :handler on-download} + (when (contains? cf/flags :canary) + {:name (tr "labels.download-simple") + :id "font-download" + :handler on-download}) {:name (tr "labels.delete") :id "font-delete" :handler on-delete}])] diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index edc090f426..1fedf00e64 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -227,7 +227,8 @@ [:> menu-entry* {:title (tr "workspace.shape.menu.copy-svg") :on-click handle-copy-svg}] - (when (some cfh/frame-shape? shapes) + (when (and (some cfh/frame-shape? shapes) + (contains? cf/flags :canary)) [:> menu-entry* {:title (tr "workspace.shape.menu.copy-as-image") :disabled multiple? :on-click handle-copy-as-image}]) diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs index d6516d5f56..b2dc3e8e5b 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/assets/colors.cljs @@ -10,6 +10,7 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.common.path-names :as cpn] + [app.config :as cf] [app.main.constants :refer [max-input-length]] [app.main.data.event :as ev] [app.main.data.modal :as modal] @@ -253,7 +254,8 @@ {:name (tr "workspace.assets.edit") :id "assets-edit-color" :handler edit-color-clicked}) - (when-not (or multi-colors? multi-assets?) + (when (and (not (or multi-colors? multi-assets?)) + (contains? cf/flags :canary)) {:name (tr "workspace.assets.duplicate") :id "assets-duplicate-color" :handler duplicate-color}) diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs index 21eac432f2..d222ffafd0 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/assets/typographies.cljs @@ -10,6 +10,7 @@ [app.common.data :as d] [app.common.data.macros :as dm] [app.common.path-names :as cpn] + [app.config :as cf] [app.main.data.event :as ev] [app.main.data.modal :as modal] [app.main.data.workspace :as dw] @@ -446,7 +447,8 @@ :id "assets-edit-typography" :handler handle-edit-typography-clicked}) - (when-not (or multi-typographies? multi-assets?) + (when (and (not (or multi-typographies? multi-assets?)) + (contains? cf/flags :canary)) {:name (tr "workspace.assets.duplicate") :id "assets-duplicate-typography" :handler handle-duplicate-typography}) diff --git a/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs b/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs index 1a8e5cb43c..4c88be68d5 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/layer_item.cljs @@ -16,6 +16,7 @@ [app.common.types.container :as ctn] [app.common.types.shape.layout :as ctl] [app.common.uuid :as uuid] + [app.config :as cf] [app.main.data.workspace :as dw] [app.main.data.workspace.collapse :as dwc] [app.main.refs :as refs] @@ -424,19 +425,20 @@ (mf/use-fn (mf/deps id objects) (fn [event] - (let [shift? (kbd/shift? event) - shape (get objects id) - parent (get objects (:parent-id shape)) - siblings (:shapes parent) - pos (d/index-of siblings id)] - (when (some? pos) - (let [;; Layers render in reverse: Tab (visually down) = dec index, - ;; Shift+Tab (visually up) = inc index - target-id (if shift? - (get siblings (inc pos)) - (get siblings (dec pos)))] - (when (some? target-id) - (st/emit! (dw/start-rename-shape target-id))))))))] + (when (contains? cf/flags :canary) + (let [shift? (kbd/shift? event) + shape (get objects id) + parent (get objects (:parent-id shape)) + siblings (:shapes parent) + pos (d/index-of siblings id)] + (when (some? pos) + (let [;; Layers render in reverse: Tab (visually down) = dec index, + ;; Shift+Tab (visually up) = inc index + target-id (if shift? + (get siblings (inc pos)) + (get siblings (dec pos)))] + (when (some? target-id) + (st/emit! (dw/start-rename-shape target-id)))))))))] (mf/with-effect [is-selected selected] (let [single? (= (count selected) 1)