diff --git a/frontend/resources/images/features/2.9-font-size.gif b/frontend/resources/images/features/2.9-font-size.gif new file mode 100644 index 0000000000..08effe6bf2 Binary files /dev/null and b/frontend/resources/images/features/2.9-font-size.gif differ diff --git a/frontend/resources/images/features/2.9-overrides.gif b/frontend/resources/images/features/2.9-overrides.gif new file mode 100644 index 0000000000..93cfd6f377 Binary files /dev/null and b/frontend/resources/images/features/2.9-overrides.gif differ diff --git a/frontend/resources/images/features/2.9-qol.gif b/frontend/resources/images/features/2.9-qol.gif new file mode 100644 index 0000000000..46ccfc50e4 Binary files /dev/null and b/frontend/resources/images/features/2.9-qol.gif differ diff --git a/frontend/resources/images/features/2.9-slide-0.jpg b/frontend/resources/images/features/2.9-slide-0.jpg new file mode 100644 index 0000000000..88065072bc Binary files /dev/null and b/frontend/resources/images/features/2.9-slide-0.jpg differ diff --git a/frontend/src/app/main/ui/releases.cljs b/frontend/src/app/main/ui/releases.cljs index 6c8f035c9c..e5a45d5def 100644 --- a/frontend/src/app/main/ui/releases.cljs +++ b/frontend/src/app/main/ui/releases.cljs @@ -35,6 +35,7 @@ [app.main.ui.releases.v2-6] [app.main.ui.releases.v2-7] [app.main.ui.releases.v2-8] + [app.main.ui.releases.v2-9] [app.util.object :as obj] [app.util.timers :as tm] [rumext.v2 :as mf])) @@ -99,4 +100,4 @@ (defmethod rc/render-release-notes "0.0" [params] - (rc/render-release-notes (assoc params :version "2.8"))) + (rc/render-release-notes (assoc params :version "2.9"))) diff --git a/frontend/src/app/main/ui/releases/v2_9.cljs b/frontend/src/app/main/ui/releases/v2_9.cljs new file mode 100644 index 0000000000..1341105941 --- /dev/null +++ b/frontend/src/app/main/ui/releases/v2_9.cljs @@ -0,0 +1,142 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.main.ui.releases.v2-9 + (:require-macros [app.main.style :as stl]) + (:require + [app.common.data.macros :as dm] + [app.main.ui.releases.common :as c] + [rumext.v2 :as mf])) + +(defmethod c/render-release-notes "2.9" + [{:keys [slide klass next finish navigate version]}] + (mf/html + (case slide + :start + [:div {:class (stl/css-case :modal-overlay true)} + [:div.animated {:class klass} + [:div {:class (stl/css :modal-container)} + [:img {:src "images/features/2.9-slide-0.jpg" + :class (stl/css :start-image) + :border "0" + :alt "Penpot 2.9 is here!"}] + + [:div {:class (stl/css :modal-content)} + [:div {:class (stl/css :modal-header)} + [:h1 {:class (stl/css :modal-title)} + "What’s new in Penpot?"] + + [:div {:class (stl/css :version-tag)} + (dm/str "Version " version)]] + + [:div {:class (stl/css :features-block)} + [:span {:class (stl/css :feature-title)} + "Penpot 2.9 is out!"] + + [:p {:class (stl/css :feature-content)} + "We're keeping the momentum going with another exciting round of improvements and features!"] + + [:p {:class (stl/css :feature-content)} + "This release brings major progress in Design Token management (including our very first typography tokens!), smarter text overrides for components, and a rich collection of quality-of-life enhancements."] + + [:p {:class (stl/css :feature-content)} + "Let’s dive in!"]] + + [:div {:class (stl/css :navigation)} + [:button {:class (stl/css :next-btn) + :on-click next} "Continue"]]]]]] + + 0 + [:div {:class (stl/css-case :modal-overlay true)} + [:div.animated {:class klass} + [:div {:class (stl/css :modal-container)} + [:img {:src "images/features/2.9-font-size.gif" + :class (stl/css :start-image) + :border "0" + :alt "New typography token type"}] + + [:div {:class (stl/css :modal-content)} + [:div {:class (stl/css :modal-header)} + [:h1 {:class (stl/css :modal-title)} + "New typography token type"]] + + [:div {:class (stl/css :feature)} + [:p {:class (stl/css :feature-content)} + "You can now define and manage font size tokens right from the Design Tokens panel. This is just the first of many typography token types to come. Font weight token is next!"] + + [:p {:class (stl/css :feature-content)} + "And there’s more progress on Tokens, including support for importing multiple token files via .zip, and smarter token visibility, only showing the relevant tokens for each layer type."]] + + [:div {:class (stl/css :navigation)} + [:& c/navigation-bullets + {:slide slide + :navigate navigate + :total 3}] + + [:button {:on-click next + :class (stl/css :next-btn)} "Continue"]]]]]] + + 1 + [:div {:class (stl/css-case :modal-overlay true)} + [:div.animated {:class klass} + [:div {:class (stl/css :modal-container)} + [:img {:src "images/features/2.9-overrides.gif" + :class (stl/css :start-image) + :border "0" + :alt "Component text overrides"}] + + [:div {:class (stl/css :modal-content)} + [:div {:class (stl/css :modal-header)} + [:h1 {:class (stl/css :modal-title)} + "Component text overrides"]] + + [:div {:class (stl/css :feature)} + [:p {:class (stl/css :feature-content)} + "When overriding text inside components, you can now tweak and preserve individual properties like color, effects, font size or font weight."] + + [:p {:class (stl/css :feature-content)} + "Now you can confidently apply different tokens to copies of a component, knowing that their intended overrides will remain. This greatly improves consistency, predictability, and control when working with texts in components."]] + + [:div {:class (stl/css :navigation)} + [:& c/navigation-bullets + {:slide slide + :navigate navigate + :total 3}] + + [:button {:on-click next + :class (stl/css :next-btn)} "Continue"]]]]]] + + 2 + [:div {:class (stl/css-case :modal-overlay true)} + [:div.animated {:class klass} + [:div {:class (stl/css :modal-container)} + [:img {:src "images/features/2.9-qol.gif" + :class (stl/css :start-image) + :border "0" + :alt "Quality-of-life galore"}] + + [:div {:class (stl/css :modal-content)} + [:div {:class (stl/css :modal-header)} + [:h1 {:class (stl/css :modal-title)} + "Quality-of-life galore"]] + [:div {:class (stl/css :feature)} + + [:p {:class (stl/css :feature-content)} + "This release packs dozens of small yet impactful usability improvements, including enhanced UX writing (thanks to community contributions!), a new visual indicator for comments directly in the design space, a reorganized dashboard sidebar, improved text resizing behavior, and much more."] + + [:p {:class (stl/css :feature-content)} + "As always, we've squashed plenty of bugs and made underlying performance improvements to keep everything running smoothly."]] + + [:div {:class (stl/css :navigation)} + + [:& c/navigation-bullets + {:slide slide + :navigate navigate + :total 3}] + + [:button {:on-click finish + :class (stl/css :next-btn)} "Let's go"]]]]]]))) + diff --git a/frontend/src/app/main/ui/releases/v2_9.scss b/frontend/src/app/main/ui/releases/v2_9.scss new file mode 100644 index 0000000000..dd1b81c82b --- /dev/null +++ b/frontend/src/app/main/ui/releases/v2_9.scss @@ -0,0 +1,102 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// +// Copyright (c) KALEIDOS INC + +@import "refactor/common-refactor.scss"; + +.modal-overlay { + @extend .modal-overlay-base; +} + +.modal-container { + display: grid; + grid-template-columns: $s-324 1fr; + height: $s-500; + width: $s-888; + border-radius: $br-8; + background-color: var(--modal-background-color); + border: $s-2 solid var(--modal-border-color); +} + +.start-image { + width: $s-324; + border-radius: $br-8 0 0 $br-8; +} + +.modal-content { + padding: $s-40; + display: grid; + grid-template-rows: auto 1fr $s-32; + gap: $s-24; + + a { + color: var(--button-primary-background-color-rest); + } +} + +.modal-header { + display: grid; + gap: $s-8; +} + +.version-tag { + @include flexCenter; + @include headlineSmallTypography; + height: $s-32; + width: $s-96; + background-color: var(--communication-tag-background-color); + color: var(--communication-tag-foreground-color); + border-radius: $br-8; +} + +.modal-title { + @include headlineLargeTypography; + color: var(--modal-title-foreground-color); +} + +.features-block { + display: flex; + flex-direction: column; + gap: $s-16; + width: $s-440; +} + +.feature { + display: flex; + flex-direction: column; + gap: $s-8; +} + +.feature-title { + @include bodyLargeTypography; + color: var(--modal-title-foreground-color); +} + +.feature-content { + @include bodyMediumTypography; + margin: 0; + color: var(--modal-text-foreground-color); +} + +.feature-list { + @include bodyMediumTypography; + color: var(--modal-text-foreground-color); + list-style: disc; + display: grid; + gap: $s-8; +} + +.navigation { + width: 100%; + display: grid; + grid-template-areas: "bullets button"; +} + +.next-btn { + @extend .button-primary; + width: $s-100; + justify-self: flex-end; + grid-area: button; +}