Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Andrey Antukh 2022-02-01 16:14:52 +01:00
commit 5f81c7bc2d
13 changed files with 178 additions and 72 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 895 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

View file

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

View file

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

View file

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

View file

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

View 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 dont 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 "Weve redesigned zooming menus to improve their usability and the consistency between zooming in the design workspace and in the view mode."]
[:p "Weve 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}]]]]]])))