mirror of
https://github.com/penpot/penpot.git
synced 2025-06-02 15:01:41 +02:00
Merge remote-tracking branch 'origin/staging' into develop
This commit is contained in:
commit
5f81c7bc2d
13 changed files with 178 additions and 72 deletions
|
@ -39,7 +39,8 @@
|
||||||
- Add actions to go to main component context menu option [Taiga #2053](https://tree.taiga.io/project/penpot/us/2053)
|
- Add actions to go to main component context menu option [Taiga #2053](https://tree.taiga.io/project/penpot/us/2053)
|
||||||
- Add contrast between component select color and shape select color [Taiga #2121](https://tree.taiga.io/project/penpot/issue/2121)
|
- Add contrast between component select color and shape select color [Taiga #2121](https://tree.taiga.io/project/penpot/issue/2121)
|
||||||
- Add animations in interactions [Taiga #2244](https://tree.taiga.io/project/penpot/us/2244)
|
- Add animations in interactions [Taiga #2244](https://tree.taiga.io/project/penpot/us/2244)
|
||||||
- Add performance improvements on .penpot file import process [Taiga 2497](https://tree.taiga.io/project/penpot/us/2497)
|
- Add performance improvements on .penpot file import process [Taiga #2497](https://tree.taiga.io/project/penpot/us/2497)
|
||||||
|
- On team settings set color of members count to black [Taiga #2607](https://tree.taiga.io/project/penpot/us/2607)
|
||||||
|
|
||||||
### :bug: Bugs fixed
|
### :bug: Bugs fixed
|
||||||
|
|
||||||
|
@ -93,6 +94,7 @@
|
||||||
- Normalize zoom levels in workspace and viewer [Taiga #2631](https://tree.taiga.io/project/penpot/issue/2631)
|
- Normalize zoom levels in workspace and viewer [Taiga #2631](https://tree.taiga.io/project/penpot/issue/2631)
|
||||||
- Avoid empty names in projects, files and pages [Taiga #2594](https://tree.taiga.io/project/penpot/issue/2594)
|
- Avoid empty names in projects, files and pages [Taiga #2594](https://tree.taiga.io/project/penpot/issue/2594)
|
||||||
- Fix "move to" menu when duplicated team or project names [Taiga #2655](https://tree.taiga.io/project/penpot/issue/2655)
|
- Fix "move to" menu when duplicated team or project names [Taiga #2655](https://tree.taiga.io/project/penpot/issue/2655)
|
||||||
|
- Fix ungroup a component leaves an asterisk in layers [Taiga #2694](https://tree.taiga.io/project/penpot/issue/2694)
|
||||||
|
|
||||||
### :arrow_up: Deps updates
|
### :arrow_up: Deps updates
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ We will use the `easy fix` mark for tag for indicate issues that are
|
||||||
easy for beginners.
|
easy for beginners.
|
||||||
|
|
||||||
|
|
||||||
## Commit Message Guidelines ##
|
## Commit Guidelines ##
|
||||||
|
|
||||||
We have very precise rules over how our git commit messages can be formatted.
|
We have very precise rules over how our git commit messages can be formatted.
|
||||||
|
|
||||||
|
@ -78,7 +78,6 @@ Where type is:
|
||||||
- :ambulance: `:ambulance:` a commit that fixes critical bug
|
- :ambulance: `:ambulance:` a commit that fixes critical bug
|
||||||
- :books: `:books:` a commit that improves or adds documentation
|
- :books: `:books:` a commit that improves or adds documentation
|
||||||
- :construction: `:construction:`: a wip commit
|
- :construction: `:construction:`: a wip commit
|
||||||
- :construction_worker: `:construction_worker:` a commit with CI related stuff
|
|
||||||
- :boom: `:boom:` a commit with breaking changes
|
- :boom: `:boom:` a commit with breaking changes
|
||||||
- :wrench: `:wrench:` a commit for config updates
|
- :wrench: `:wrench:` a commit for config updates
|
||||||
- :zap: `:zap:` a commit with performance improvements
|
- :zap: `:zap:` a commit with performance improvements
|
||||||
|
@ -91,13 +90,14 @@ More info:
|
||||||
- https://gist.github.com/parmentf/035de27d6ed1dce0b36a
|
- https://gist.github.com/parmentf/035de27d6ed1dce0b36a
|
||||||
- https://gist.github.com/rxaviers/7360908
|
- https://gist.github.com/rxaviers/7360908
|
||||||
|
|
||||||
The subject should be:
|
Each commit should have:
|
||||||
|
|
||||||
- Use the imperative mood.
|
|
||||||
- Capitalize the first letter.
|
|
||||||
- Don't put a period at the end of the subject line.
|
|
||||||
- Put a blank line between the subject line and the body.
|
|
||||||
|
|
||||||
|
- A concise subject using imperative mood.
|
||||||
|
- The subject should have capitalized the first letter and without
|
||||||
|
period at the end.
|
||||||
|
- A blank line between the subject line and the body.
|
||||||
|
- An entry on the CHANGES.md file if applicable, referencing the
|
||||||
|
github or taiga issue/user-story using the these same rules.
|
||||||
|
|
||||||
## Code of conduct ##
|
## Code of conduct ##
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,15 @@
|
||||||
|
|
||||||
(defmethod handle-exception :validation
|
(defmethod handle-exception :validation
|
||||||
[err _]
|
[err _]
|
||||||
(let [edata (ex-data err)]
|
(let [data (ex-data err)
|
||||||
{:status 400 :body (dissoc edata ::s/problems ::s/value)}))
|
explain (binding [s/*explain-out* expound/printer]
|
||||||
|
(with-out-str
|
||||||
|
(s/explain-out (update data ::s/problems #(take 10 %)))))]
|
||||||
|
{:status 400
|
||||||
|
:body (-> data
|
||||||
|
(dissoc ::s/problems)
|
||||||
|
(dissoc ::s/value)
|
||||||
|
(assoc :explain explain))}))
|
||||||
|
|
||||||
(defmethod handle-exception :assertion
|
(defmethod handle-exception :assertion
|
||||||
[error request]
|
[error request]
|
||||||
|
|
|
@ -56,29 +56,33 @@
|
||||||
(update :undo-changes d/preconj del-change)))))
|
(update :undo-changes d/preconj del-change)))))
|
||||||
|
|
||||||
(defn change-parent
|
(defn change-parent
|
||||||
[changes parent-id shapes]
|
([changes parent-id shapes] (change-parent changes parent-id shapes nil))
|
||||||
(assert (contains? (meta changes) ::objects) "Call (with-objects) first to use this function")
|
([changes parent-id shapes index]
|
||||||
|
(assert (contains? (meta changes) ::objects) "Call (with-objects) first to use this function")
|
||||||
|
|
||||||
(let [objects (::objects (meta changes))
|
(let [objects (::objects (meta changes))
|
||||||
set-parent-change
|
set-parent-change
|
||||||
{:type :mov-objects
|
(cond-> {:type :mov-objects
|
||||||
:parent-id parent-id
|
:parent-id parent-id
|
||||||
:page-id (::page-id (meta changes))
|
:page-id (::page-id (meta changes))
|
||||||
:shapes (->> shapes (mapv :id))}
|
:shapes (->> shapes (mapv :id))}
|
||||||
|
|
||||||
mk-undo-change
|
(some? index)
|
||||||
(fn [change-set shape]
|
(assoc :index index))
|
||||||
(d/preconj
|
|
||||||
change-set
|
|
||||||
{:type :mov-objects
|
|
||||||
:page-id (::page-id (meta changes))
|
|
||||||
:parent-id (:parent-id shape)
|
|
||||||
:shapes [(:id shape)]
|
|
||||||
:index (cp/position-on-parent (:id shape) objects)}))]
|
|
||||||
|
|
||||||
(-> changes
|
mk-undo-change
|
||||||
(update :redo-changes conj set-parent-change)
|
(fn [change-set shape]
|
||||||
(update :undo-changes #(reduce mk-undo-change % shapes)))))
|
(d/preconj
|
||||||
|
change-set
|
||||||
|
{:type :mov-objects
|
||||||
|
:page-id (::page-id (meta changes))
|
||||||
|
:parent-id (:parent-id shape)
|
||||||
|
:shapes [(:id shape)]
|
||||||
|
:index (cp/position-on-parent (:id shape) objects)}))]
|
||||||
|
|
||||||
|
(-> changes
|
||||||
|
(update :redo-changes conj set-parent-change)
|
||||||
|
(update :undo-changes #(reduce mk-undo-change % shapes))))))
|
||||||
|
|
||||||
(defn- generate-operation
|
(defn- generate-operation
|
||||||
"Given an object old and new versions and an attribute will append into changes
|
"Given an object old and new versions and an attribute will append into changes
|
||||||
|
|
|
@ -255,7 +255,7 @@
|
||||||
(let [data (s/explain-data spec data)]
|
(let [data (s/explain-data spec data)]
|
||||||
(throw (ex/error :type :validation
|
(throw (ex/error :type :validation
|
||||||
:code :spec-validation
|
:code :spec-validation
|
||||||
::s/problems (::s/problems data)))))
|
::ex/data data))))
|
||||||
result))
|
result))
|
||||||
|
|
||||||
(defmacro instrument!
|
(defmacro instrument!
|
||||||
|
|
BIN
frontend/resources/images/features/1.11-animations.gif
Normal file
BIN
frontend/resources/images/features/1.11-animations.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
BIN
frontend/resources/images/features/1.11-bg-export.gif
Normal file
BIN
frontend/resources/images/features/1.11-bg-export.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 895 KiB |
BIN
frontend/resources/images/features/1.11-zoom-widget.gif
Normal file
BIN
frontend/resources/images/features/1.11-zoom-widget.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 733 KiB |
|
@ -193,7 +193,7 @@
|
||||||
svg {
|
svg {
|
||||||
width: 12px;
|
width: 12px;
|
||||||
height: 12px;
|
height: 12px;
|
||||||
fill: $color-primary-dark;
|
fill: $color-black;
|
||||||
}
|
}
|
||||||
|
|
||||||
.owner {
|
.owner {
|
||||||
|
@ -208,7 +208,7 @@
|
||||||
|
|
||||||
.summary {
|
.summary {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
color: $color-primary-dark;
|
color: $color-black;
|
||||||
.icon {
|
.icon {
|
||||||
padding: 0px 10px;
|
padding: 0px 10px;
|
||||||
margin-right: 12px;
|
margin-right: 12px;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
[app.common.data :as d]
|
[app.common.data :as d]
|
||||||
[app.common.geom.shapes :as gsh]
|
[app.common.geom.shapes :as gsh]
|
||||||
[app.common.pages :as cp]
|
[app.common.pages :as cp]
|
||||||
|
[app.common.pages.changes-builder :as cb]
|
||||||
[app.common.spec :as us]
|
[app.common.spec :as us]
|
||||||
[app.main.data.workspace.changes :as dch]
|
[app.main.data.workspace.changes :as dch]
|
||||||
[app.main.data.workspace.common :as dwc]
|
[app.main.data.workspace.common :as dwc]
|
||||||
|
@ -136,8 +137,8 @@
|
||||||
[group rchanges uchanges]))
|
[group rchanges uchanges]))
|
||||||
|
|
||||||
(defn prepare-remove-group
|
(defn prepare-remove-group
|
||||||
[page-id group objects]
|
[it page-id group objects]
|
||||||
(let [shapes (into [] (:shapes group)) ; ensure we always have vector
|
(let [children (mapv #(get objects %) (:shapes group))
|
||||||
parent-id (cp/get-parent (:id group) objects)
|
parent-id (cp/get-parent (:id group) objects)
|
||||||
parent (get objects parent-id)
|
parent (get objects parent-id)
|
||||||
|
|
||||||
|
@ -147,29 +148,25 @@
|
||||||
(filter #(#{(:id group)} (second %)))
|
(filter #(#{(:id group)} (second %)))
|
||||||
(ffirst))
|
(ffirst))
|
||||||
|
|
||||||
rchanges [{:type :mov-objects
|
ids-to-detach (when (:component-id group)
|
||||||
:page-id page-id
|
(cp/get-children (:id group) objects))
|
||||||
:parent-id parent-id
|
|
||||||
:shapes shapes
|
detach-fn (fn [attrs]
|
||||||
:index index-in-parent}
|
(dissoc attrs
|
||||||
{:type :del-obj
|
:component-id
|
||||||
:page-id page-id
|
:component-file
|
||||||
:id (:id group)}]
|
:component-root?
|
||||||
uchanges [{:type :add-obj
|
:remote-synced?
|
||||||
:page-id page-id
|
:shape-ref
|
||||||
:id (:id group)
|
:touched))]
|
||||||
:frame-id (:frame-id group)
|
|
||||||
:obj (assoc group :shapes [])}
|
(cond-> (-> (cb/empty-changes it page-id)
|
||||||
{:type :mov-objects
|
(cb/with-objects objects)
|
||||||
:page-id page-id
|
(cb/change-parent parent-id children index-in-parent)
|
||||||
:parent-id (:id group)
|
(cb/remove-objects [(:id group)]))
|
||||||
:shapes shapes}
|
|
||||||
{:type :mov-objects
|
(some? ids-to-detach)
|
||||||
:page-id page-id
|
(cb/update-shapes ids-to-detach detach-fn))))
|
||||||
:parent-id parent-id
|
|
||||||
:shapes [(:id group)]
|
|
||||||
:index index-in-parent}]]
|
|
||||||
[rchanges uchanges]))
|
|
||||||
|
|
||||||
(defn prepare-remove-mask
|
(defn prepare-remove-mask
|
||||||
[page-id mask]
|
[page-id mask]
|
||||||
|
@ -223,20 +220,20 @@
|
||||||
objects (wsh/lookup-page-objects state page-id)
|
objects (wsh/lookup-page-objects state page-id)
|
||||||
is-group? #(or (= :bool (:type %)) (= :group (:type %)))
|
is-group? #(or (= :bool (:type %)) (= :group (:type %)))
|
||||||
lookup #(get objects %)
|
lookup #(get objects %)
|
||||||
prepare #(prepare-remove-group page-id % objects)
|
prepare #(prepare-remove-group it page-id % objects)
|
||||||
|
|
||||||
changes (sequence
|
changes-list (sequence
|
||||||
(comp (map lookup)
|
(comp (map lookup)
|
||||||
(filter is-group?)
|
(filter is-group?)
|
||||||
(map prepare))
|
(map prepare))
|
||||||
(wsh/lookup-selected state))
|
(wsh/lookup-selected state))
|
||||||
|
|
||||||
rchanges (into [] (mapcat first) changes)
|
changes {:redo-changes (vec (mapcat :redo-changes changes-list))
|
||||||
uchanges (into [] (mapcat second) changes)]
|
:undo-changes (vec (mapcat :undo-changes changes-list))
|
||||||
|
:origin it}]
|
||||||
|
|
||||||
|
(rx/of (dch/commit-changes changes))))))
|
||||||
|
|
||||||
(rx/of (dch/commit-changes {:redo-changes rchanges
|
|
||||||
:undo-changes uchanges
|
|
||||||
:origin it}))))))
|
|
||||||
(def mask-group
|
(def mask-group
|
||||||
(ptk/reify ::mask-group
|
(ptk/reify ::mask-group
|
||||||
ptk/WatchEvent
|
ptk/WatchEvent
|
||||||
|
|
|
@ -81,7 +81,13 @@
|
||||||
(js/console.group "Validation Error:")
|
(js/console.group "Validation Error:")
|
||||||
(ex/ignoring
|
(ex/ignoring
|
||||||
(js/console.info
|
(js/console.info
|
||||||
(with-out-str (pprint error))))
|
(with-out-str (pprint (dissoc error :explain)))))
|
||||||
|
|
||||||
|
(when-let [explain (:explain error)]
|
||||||
|
(js/console.group "Spec explain:")
|
||||||
|
(js/console.log explain)
|
||||||
|
(js/console.groupEnd "Spec explain:"))
|
||||||
|
|
||||||
(js/console.groupEnd "Validation Error:"))
|
(js/console.groupEnd "Validation Error:"))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
[app.main.store :as st]
|
[app.main.store :as st]
|
||||||
[app.main.ui.releases.common :as rc]
|
[app.main.ui.releases.common :as rc]
|
||||||
[app.main.ui.releases.v1-10]
|
[app.main.ui.releases.v1-10]
|
||||||
|
[app.main.ui.releases.v1-11]
|
||||||
[app.main.ui.releases.v1-4]
|
[app.main.ui.releases.v1-4]
|
||||||
[app.main.ui.releases.v1-5]
|
[app.main.ui.releases.v1-5]
|
||||||
[app.main.ui.releases.v1-6]
|
[app.main.ui.releases.v1-6]
|
||||||
|
@ -81,4 +82,4 @@
|
||||||
|
|
||||||
(defmethod rc/render-release-notes "0.0"
|
(defmethod rc/render-release-notes "0.0"
|
||||||
[params]
|
[params]
|
||||||
(rc/render-release-notes (assoc params :version "1.10")))
|
(rc/render-release-notes (assoc params :version "1.11")))
|
||||||
|
|
89
frontend/src/app/main/ui/releases/v1_11.cljs
Normal file
89
frontend/src/app/main/ui/releases/v1_11.cljs
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
;; 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) UXBOX Labs SL
|
||||||
|
|
||||||
|
(ns app.main.ui.releases.v1-11
|
||||||
|
(:require
|
||||||
|
[app.main.ui.releases.common :as c]
|
||||||
|
[rumext.alpha :as mf]))
|
||||||
|
|
||||||
|
(defmethod c/render-release-notes "1.11"
|
||||||
|
[{:keys [slide klass next finish navigate version]}]
|
||||||
|
(mf/html
|
||||||
|
(case @slide
|
||||||
|
:start
|
||||||
|
[:div.modal-overlay
|
||||||
|
[:div.animated {:class @klass}
|
||||||
|
[:div.modal-container.onboarding.feature
|
||||||
|
[:div.modal-left
|
||||||
|
[:img {:src "images/login-on.jpg" :border "0" :alt "What's new Beta release 1.11"}]]
|
||||||
|
[:div.modal-right
|
||||||
|
[:div.modal-title
|
||||||
|
[:h2 "What's new?"]]
|
||||||
|
[:span.release "Beta version " version]
|
||||||
|
[:div.modal-content
|
||||||
|
[:p "Penpot continues growing with new features that improve performance, user experience and visual design."]
|
||||||
|
[:p "We are happy to show you a sneak peak of the most important stuff that the Beta 1.11 version brings."]]
|
||||||
|
[:div.modal-navigation
|
||||||
|
[:button.btn-secondary {:on-click next} "Continue"]]]
|
||||||
|
[:img.deco {:src "images/deco-left.png" :border "0"}]
|
||||||
|
[:img.deco.right {:src "images/deco-right.png" :border "0"}]]]]
|
||||||
|
|
||||||
|
0
|
||||||
|
[:div.modal-overlay
|
||||||
|
[:div.animated {:class @klass}
|
||||||
|
[:div.modal-container.onboarding.feature
|
||||||
|
[:div.modal-left
|
||||||
|
[:img {:src "images/features/1.11-animations.gif" :border "0" :alt "Animations"}]]
|
||||||
|
[:div.modal-right
|
||||||
|
[:div.modal-title
|
||||||
|
[:h2 "Prototype animations"]]
|
||||||
|
[:div.modal-content
|
||||||
|
[:p "Bring your prototypes to life with animations! With animations now you can define the transition between artboards when an interaction is triggered."]
|
||||||
|
[:p "Use dissolve, slide and push animations to fade screens and imitate gestures like swipe."]]
|
||||||
|
[:div.modal-navigation
|
||||||
|
[:button.btn-secondary {:on-click next} "Continue"]
|
||||||
|
[:& c/navigation-bullets
|
||||||
|
{:slide @slide
|
||||||
|
:navigate navigate
|
||||||
|
:total 3}]]]]]]
|
||||||
|
|
||||||
|
1
|
||||||
|
[:div.modal-overlay
|
||||||
|
[:div.animated {:class @klass}
|
||||||
|
[:div.modal-container.onboarding.feature
|
||||||
|
[:div.modal-left
|
||||||
|
[:img {:src "images/features/1.11-bg-export.gif" :border "0" :alt "Ignore background on export"}]]
|
||||||
|
[:div.modal-right
|
||||||
|
[:div.modal-title
|
||||||
|
[:h2 "Ignore artboard background on export"]]
|
||||||
|
[:div.modal-content
|
||||||
|
[:p "Sometimes you don’t need the artboards to be part of your designs, but only their support to work on them."]
|
||||||
|
[:p "Now you can decide to include their backgrounds on your exports or leave them out."]]
|
||||||
|
[:div.modal-navigation
|
||||||
|
[:button.btn-secondary {:on-click next} "Continue"]
|
||||||
|
[:& c/navigation-bullets
|
||||||
|
{:slide @slide
|
||||||
|
:navigate navigate
|
||||||
|
:total 3}]]]]]]
|
||||||
|
|
||||||
|
2
|
||||||
|
[:div.modal-overlay
|
||||||
|
[:div.animated {:class @klass}
|
||||||
|
[:div.modal-container.onboarding.feature
|
||||||
|
[:div.modal-left
|
||||||
|
[:img {:src "images/features/1.11-zoom-widget.gif" :border "0" :alt "New zoom widget"}]]
|
||||||
|
[:div.modal-right
|
||||||
|
[:div.modal-title
|
||||||
|
[:h2 "New zoom widget"]]
|
||||||
|
[:div.modal-content
|
||||||
|
[:p "We’ve redesigned zooming menus to improve their usability and the consistency between zooming in the design workspace and in the view mode."]
|
||||||
|
[:p "We’ve also added two new options to scale your designs at the view mode that might help you to make your presentations look better."]]
|
||||||
|
[:div.modal-navigation
|
||||||
|
[:button.btn-secondary {:on-click finish} "Start!"]
|
||||||
|
[:& c/navigation-bullets
|
||||||
|
{:slide @slide
|
||||||
|
:navigate navigate
|
||||||
|
:total 3}]]]]]])))
|
Loading…
Add table
Add a link
Reference in a new issue