From c469bd5757b61f641a0852aaa16f5843dafb1e1e Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Tue, 27 Dec 2022 09:05:54 +0100 Subject: [PATCH 01/19] :bug: Fix style for team invite in deutsch --- CHANGES.md | 1 + frontend/resources/styles/main/partials/modal.scss | 7 +++++++ frontend/src/app/main/ui/onboarding/team_choice.cljs | 5 +++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c0aeaca98..2fca3d004 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,7 @@ - Fix adding an extra page on import [Taiga #4543](https://tree.taiga.io/project/penpot/task/4543) - Fix unable to select text at assets inputs in firefox [Taiga #4572](https://tree.taiga.io/project/penpot/issue/4572) - Fix component sync when converting to path [Taiga #3642](https://tree.taiga.io/project/penpot/issue/3642) +- Fix style for team invite in deutsch [Taiga #4614](https://tree.taiga.io/project/penpot/issue/4614) ### :arrow_up: Deps updates diff --git a/frontend/resources/styles/main/partials/modal.scss b/frontend/resources/styles/main/partials/modal.scss index d76703f51..b89217442 100644 --- a/frontend/resources/styles/main/partials/modal.scss +++ b/frontend/resources/styles/main/partials/modal.scss @@ -1472,6 +1472,13 @@ display: grid; grid-template-columns: 1fr auto; gap: 8px; + .btn-large { + overflow: hidden; + text-overflow: ellipsis; + } + .btn-primary { + max-width: 250px; + } } } .skip-action { diff --git a/frontend/src/app/main/ui/onboarding/team_choice.cljs b/frontend/src/app/main/ui/onboarding/team_choice.cljs index b1a1e5342..36700ca72 100644 --- a/frontend/src/app/main/ui/onboarding/team_choice.cljs +++ b/frontend/src/app/main/ui/onboarding/team_choice.cljs @@ -196,8 +196,9 @@ :name name :step 2}))} (tr "labels.back")] - [:& fm/submit-button - {:label (tr "onboarding.choice.team-up.invite-members-submit")}]] + [:div {:title (tr "onboarding.choice.team-up.invite-members-submit")} + [:& fm/submit-button + {:label (tr "onboarding.choice.team-up.invite-members-submit")}]]] [:div.skip-action {:on-click on-skip} [:div.action (tr "onboarding.choice.team-up.invite-members-skip")]]]] From f7412ccbd707e5b962988e3a17b13dff251b18f6 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 27 Dec 2022 12:05:42 +0100 Subject: [PATCH 02/19] :paperclip: Fix version number and changelog --- CHANGES.md | 2 +- version.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c0aeaca98..35a93b4ed 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,6 @@ # CHANGELOG -## :rocket: Next (1.17) +## 1.17.0 ### :boom: Breaking changes & Deprecations diff --git a/version.txt b/version.txt index 2dc4f7c6f..092afa15d 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.17.0-beta +1.17.0 From 4302ab05e46d551b4036e95332f27e98d57d5704 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 27 Dec 2022 15:07:13 +0100 Subject: [PATCH 03/19] :bug: Fix problems with Safari texts --- CHANGES.md | 1 + frontend/src/app/main/ui/workspace/shapes/text/editor.cljs | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b3308c4f9..ea72f8fe7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,6 +23,7 @@ - Fix unable to select text at assets inputs in firefox [Taiga #4572](https://tree.taiga.io/project/penpot/issue/4572) - Fix component sync when converting to path [Taiga #3642](https://tree.taiga.io/project/penpot/issue/3642) - Fix style for team invite in deutsch [Taiga #4614](https://tree.taiga.io/project/penpot/issue/4614) +- Fix problem with text edition in Safari [Taiga #4046](https://tree.taiga.io/project/penpot/issue/4046) ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs b/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs index e323b4672..f18a8eab3 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/editor.cljs @@ -199,7 +199,7 @@ (st/emit! (dwt/update-editor-state shape state))) "handled")) - on-click + on-mouse-down (mf/use-callback (fn [event] (when (dom/class? (dom/get-target event) "DraftEditor-root") @@ -227,7 +227,7 @@ ;; the underlying text. Use opacity because display or visibility won't allow to recover ;; focus afterwards. :opacity (when @blurred 0)} - :on-click on-click + :on-mouse-down on-mouse-down :class (dom/classnames :align-top (= (:vertical-align content "top") "top") :align-center (= (:vertical-align content) "center") @@ -295,7 +295,7 @@ :fill "red"}]]] [:foreignObject {:x x :y y :width width :height height} - [:div {:style {:position "absolute" + [:div {:style {:position "fixed" :left 0 :top (- (:y shape) y) :pointer-events "all"}} From 4164c8f012372233a32bbfed119832b311da9bc3 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 14:29:14 +0100 Subject: [PATCH 04/19] :arrow_up: Update dependencies --- backend/deps.edn | 24 ++--- common/deps.edn | 13 +-- common/package.json | 8 +- common/yarn.lock | 29 +++--- exporter/deps.edn | 2 +- exporter/package.json | 8 +- exporter/yarn.lock | 42 ++++----- frontend/deps.edn | 5 +- frontend/package.json | 28 +++--- frontend/yarn.lock | 209 +++++++++++++++++++++++------------------- 10 files changed, 200 insertions(+), 168 deletions(-) diff --git a/backend/deps.edn b/backend/deps.edn index cb45fff87..4e9256efa 100644 --- a/backend/deps.edn +++ b/backend/deps.edn @@ -1,12 +1,12 @@ {:deps {penpot/common {:local/root "../common"} org.clojure/clojure {:mvn/version "1.11.1"} - org.clojure/core.async {:mvn/version "1.5.648"} + org.clojure/core.async {:mvn/version "1.6.673"} ;; Logging - org.zeromq/jeromq {:mvn/version "0.5.2"} + org.zeromq/jeromq {:mvn/version "0.5.3"} - com.github.luben/zstd-jni {:mvn/version "1.5.2-4"} + com.github.luben/zstd-jni {:mvn/version "1.5.2-5"} org.clojure/data.fressian {:mvn/version "1.0.0"} io.prometheus/simpleclient {:mvn/version "0.16.0"} @@ -18,7 +18,7 @@ io.prometheus/simpleclient_httpserver {:mvn/version "0.16.0"} - io.lettuce/lettuce-core {:mvn/version "6.2.1.RELEASE"} + io.lettuce/lettuce-core {:mvn/version "6.2.2.RELEASE"} java-http-clj/java-http-clj {:mvn/version "0.4.3"} funcool/yetti @@ -27,9 +27,9 @@ :git/url "https://github.com/funcool/yetti.git" :exclusions [org.slf4j/slf4j-api]} - com.github.seancorfield/next.jdbc {:mvn/version "1.3.834"} + com.github.seancorfield/next.jdbc {:mvn/version "1.3.847"} metosin/reitit-core {:mvn/version "0.5.18"} - org.postgresql/postgresql {:mvn/version "42.5.0"} + org.postgresql/postgresql {:mvn/version "42.5.1"} com.zaxxer/HikariCP {:mvn/version "5.0.1"} io.whitfin/siphash {:mvn/version "2.0.0"} @@ -37,9 +37,9 @@ buddy/buddy-hashers {:mvn/version "1.8.158"} buddy/buddy-sign {:mvn/version "3.4.333"} - com.github.ben-manes.caffeine/caffeine {:mvn/version "3.1.1"} + com.github.ben-manes.caffeine/caffeine {:mvn/version "3.1.2"} - org.jsoup/jsoup {:mvn/version "1.15.1"} + org.jsoup/jsoup {:mvn/version "1.15.3"} org.im4java/im4java {:git/tag "1.4.0-penpot-2" :git/sha "e2b3e16" @@ -51,11 +51,11 @@ integrant/integrant {:mvn/version "0.8.0"} dawran6/emoji {:mvn/version "0.1.5"} - markdown-clj/markdown-clj {:mvn/version "1.11.3"} + markdown-clj/markdown-clj {:mvn/version "1.11.4"} ;; Pretty Print specs pretty-spec/pretty-spec {:mvn/version "0.1.4"} - software.amazon.awssdk/s3 {:mvn/version "2.17.278"}} + software.amazon.awssdk/s3 {:mvn/version "2.19.5"}} :paths ["src" "resources" "target/classes"] :aliases @@ -69,8 +69,10 @@ mockery/mockery {:mvn/version "RELEASE"}} :extra-paths ["test" "dev"]} + :build - {:extra-deps {io.github.clojure/tools.build {:git/tag "v0.8.3" :git/sha "0d20256"}} + {:extra-deps + {io.github.clojure/tools.build {:git/tag "v0.9.0" :git/sha "8c93e0c"}} :ns-default build} :test diff --git a/common/deps.edn b/common/deps.edn index de4ef462a..c4471b17e 100644 --- a/common/deps.edn +++ b/common/deps.edn @@ -1,8 +1,8 @@ {:deps {org.clojure/clojure {:mvn/version "1.11.1"} org.clojure/data.json {:mvn/version "2.4.0"} - org.clojure/tools.cli {:mvn/version "1.0.206"} - metosin/jsonista {:mvn/version "0.3.6"} + org.clojure/tools.cli {:mvn/version "1.0.214"} + metosin/jsonista {:mvn/version "0.3.7"} org.clojure/clojurescript {:mvn/version "1.11.60"} org.clojure/test.check {:mvn/version "1.1.1"} @@ -23,7 +23,7 @@ com.cognitect/transit-cljs {:mvn/version "0.8.280"} java-http-clj/java-http-clj {:mvn/version "0.4.3"} - funcool/promesa {:mvn/version "10.0.571"} + funcool/promesa {:mvn/version "10.0.582"} funcool/cuerdas {:mvn/version "2022.06.16-403"} lambdaisland/uri {:mvn/version "1.13.95" @@ -37,21 +37,22 @@ ;; exception printing fipp/fipp {:mvn/version "0.6.26"} - io.aviso/pretty {:mvn/version "1.1.1"} + io.aviso/pretty {:mvn/version "1.3"} environ/environ {:mvn/version "1.2.0"}} :paths ["src" "target/classes"] :aliases {:dev {:extra-deps {org.clojure/tools.namespace {:mvn/version "RELEASE"} - thheller/shadow-cljs {:mvn/version "2.20.2"} + thheller/shadow-cljs {:mvn/version "2.20.16"} com.bhauman/rebel-readline {:mvn/version "RELEASE"} criterium/criterium {:mvn/version "RELEASE"} mockery/mockery {:mvn/version "RELEASE"}} :extra-paths ["test" "dev"]} :build - {:extra-deps {io.github.clojure/tools.build {:git/tag "v0.8.3" :git/sha "0d20256"}} + {:extra-deps + {io.github.clojure/tools.build {:git/tag "v0.9.0" :git/sha "8c93e0c"}} :ns-default build} :test diff --git a/common/package.json b/common/package.json index 68eb89620..6f0984c7f 100644 --- a/common/package.json +++ b/common/package.json @@ -4,7 +4,7 @@ "main": "index.js", "license": "MPL-2.0", "dependencies": { - "luxon": "^1.27.0" + "luxon": "^3.1.1" }, "scripts": { "compile-and-watch-test": "clojure -M:dev:shadow-cljs watch test", @@ -13,8 +13,8 @@ "test": "yarn run compile-test && yarn run run-test" }, "devDependencies": { - "shadow-cljs": "2.19.8", - "source-map-support": "^0.5.19", - "ws": "^7.4.6" + "shadow-cljs": "2.20.16", + "source-map-support": "^0.5.21", + "ws": "^8.11.0" } } diff --git a/common/yarn.lock b/common/yarn.lock index 5ee0581ae..359d69826 100644 --- a/common/yarn.lock +++ b/common/yarn.lock @@ -305,10 +305,10 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -luxon@^1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.27.0.tgz#ae10c69113d85dab8f15f5e8390d0cbeddf4f00f" - integrity sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA== +luxon@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.1.1.tgz#b492c645b2474fb86f3bd3283213846b99c32c1e" + integrity sha512-Ah6DloGmvseB/pX1cAmjbFvyU/pKuwQMQqz7d0yvuDlVYLTs2WeDHQMpC8tGjm1da+BriHROW/OEIT/KfYg6xw== md5.js@^1.3.4: version "1.3.5" @@ -533,10 +533,10 @@ shadow-cljs-jar@1.3.2: resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b" integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg== -shadow-cljs@2.19.8: - version "2.19.8" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.19.8.tgz#1ce96cab3e4903bed8d401ffbe88b8939f5454d3" - integrity sha512-6qek3mcAP0hrnC5FxrTebBrgLGpOuhlnp06vdxp6g0M5Gl6w2Y0hzSwa1s2K8fMOkzE4/ciQor75b2y64INgaw== +shadow-cljs@2.20.16: + version "2.20.16" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.20.16.tgz#32e83586fcc91a246b7fb622349135ad84ca1a19" + integrity sha512-k33ssZppDkBSYIfKswiKOX/8bNTnHbHoTmwf3KBPXBQkDPptPR3FeedmWtS5vKWnucFTe9DObhM2exKocErIxw== dependencies: node-libs-browser "^2.2.1" readline-sync "^1.4.7" @@ -552,10 +552,10 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -664,6 +664,11 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + xtend@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" diff --git a/exporter/deps.edn b/exporter/deps.edn index ade109ab8..e28478a5c 100644 --- a/exporter/deps.edn +++ b/exporter/deps.edn @@ -15,7 +15,7 @@ :dev {:extra-deps - {thheller/shadow-cljs {:mvn/version "2.20.2"}}} + {thheller/shadow-cljs {:mvn/version "2.20.16"}}} :shadow-cljs {:main-opts ["-m" "shadow.cljs.devtools.cli"]} diff --git a/exporter/package.json b/exporter/package.json index 9f78d2c74..514752101 100644 --- a/exporter/package.json +++ b/exporter/package.json @@ -13,15 +13,15 @@ "cookies": "^0.8.0", "generic-pool": "^3.9.0", "inflation": "^2.0.0", - "ioredis": "^5.2.3", - "luxon": "^3.0.4", - "playwright": "^1.26.1", + "ioredis": "^5.2.4", + "luxon": "^3.1.1", + "playwright": "^1.29.1", "raw-body": "^2.5.1", "xml-js": "^1.6.11", "xregexp": "^5.1.1" }, "devDependencies": { - "shadow-cljs": "^2.20.2", + "shadow-cljs": "^2.20.16", "source-map-support": "^0.5.21" } } diff --git a/exporter/yarn.lock b/exporter/yarn.lock index c3b3c4e58..0a2d6dbfe 100644 --- a/exporter/yarn.lock +++ b/exporter/yarn.lock @@ -523,10 +523,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ioredis@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.3.tgz#d5b37eb13e643241660d6cee4eeb41a026cda8c0" - integrity sha512-gQNcMF23/NpvjCaa1b5YycUyQJ9rBNH2xP94LWinNpodMWVUPP5Ai/xXANn/SM7gfIvI62B5CCvZxhg5pOgyMw== +ioredis@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.2.4.tgz#9e262a668bc29bae98f2054c1e0d7efd86996b96" + integrity sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng== dependencies: "@ioredis/commands" "^1.1.1" cluster-key-slot "^1.1.0" @@ -592,10 +592,10 @@ lodash.union@^4.6.0: resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= -luxon@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.0.4.tgz#d179e4e9f05e092241e7044f64aaa54796b03929" - integrity sha512-aV48rGUwP/Vydn8HT+5cdr26YYQiUZ42NM6ToMoaGKwYfWbfLeRkEu1wXWMHBZT6+KyLfcbbtVcoQFCbbPjKlw== +luxon@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.1.1.tgz#b492c645b2474fb86f3bd3283213846b99c32c1e" + integrity sha512-Ah6DloGmvseB/pX1cAmjbFvyU/pKuwQMQqz7d0yvuDlVYLTs2WeDHQMpC8tGjm1da+BriHROW/OEIT/KfYg6xw== md5.js@^1.3.4: version "1.3.5" @@ -724,17 +724,17 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -playwright-core@1.26.1: - version "1.26.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.26.1.tgz#a162f476488312dcf12638d97685144de6ada512" - integrity sha512-hzFchhhxnEiPc4qVPs9q2ZR+5eKNifY2hQDHtg1HnTTUuphYCBP8ZRb2si+B1TR7BHirgXaPi48LIye5SgrLAA== +playwright-core@1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.29.1.tgz#9ec15d61c4bd2f386ddf6ce010db53a030345a47" + integrity sha512-20Ai3d+lMkWpI9YZYlxk8gxatfgax5STW8GaMozAHwigLiyiKQrdkt7gaoT9UQR8FIVDg6qVXs9IoZUQrDjIIg== -playwright@^1.26.1: - version "1.26.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.26.1.tgz#0082c1d6a1c9cefe3f7a593396ad8568746184d0" - integrity sha512-WQmEdCgYYe8jOEkhkW9QLcK0PB+w1RZztBLYIT10MEEsENYg251cU0IzebDINreQsUt+HCwwRhtdz4weH9ICcQ== +playwright@^1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.29.1.tgz#fc04b34f42e3bfc0edadb1c45ef9bffd53c21f70" + integrity sha512-lasC+pMqsQ2uWhNurt3YK3xo0gWlMjslYUylKbHcqF/NTjwp9KStRGO7S6wwz2f52GcSnop8XUK/GymJjdzrxw== dependencies: - playwright-core "1.26.1" + playwright-core "1.29.1" printj@~1.3.1: version "1.3.1" @@ -910,10 +910,10 @@ shadow-cljs-jar@1.3.2: resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b" integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg== -shadow-cljs@^2.20.2: - version "2.20.2" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.20.2.tgz#24a4b204f1f2288dc4ff2d0a4f3972a6e5307645" - integrity sha512-2kzWnV1QM6KBetziCAkCf8BJdnDX2CwiAr4yhvOsiQpaNJcMzwMsJTX/gTHz58yQg0dV5uwPsIyBlvyIfl30rg== +shadow-cljs@^2.20.16: + version "2.20.16" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.20.16.tgz#32e83586fcc91a246b7fb622349135ad84ca1a19" + integrity sha512-k33ssZppDkBSYIfKswiKOX/8bNTnHbHoTmwf3KBPXBQkDPptPR3FeedmWtS5vKWnucFTe9DObhM2exKocErIxw== dependencies: node-libs-browser "^2.2.1" readline-sync "^1.4.7" diff --git a/frontend/deps.edn b/frontend/deps.edn index b5944ea6e..606fa73c9 100644 --- a/frontend/deps.edn +++ b/frontend/deps.edn @@ -33,13 +33,12 @@ {com.bhauman/rebel-readline {:mvn/version "RELEASE"}} :main-opts ["-m" "rebel-readline.main"]} - :dev {:extra-paths ["dev"] :extra-deps - {thheller/shadow-cljs {:mvn/version "2.20.2"} + {thheller/shadow-cljs {:mvn/version "2.20.16"} org.clojure/tools.namespace {:mvn/version "RELEASE"} - cider/cider-nrepl {:mvn/version "0.28.4"}}} + cider/cider-nrepl {:mvn/version "0.29.0"}}} :shadow-cljs {:main-opts ["-m" "shadow.cljs.devtools.cli"]} diff --git a/frontend/package.json b/frontend/package.json index 4463f90d3..7bc107fd6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,7 +26,7 @@ "test-e2e-gui": "cypress open" }, "devDependencies": { - "autoprefixer": "^10.4.7", + "autoprefixer": "^10.4.13", "cypress": "^10.3.0", "cypress-file-upload": "^5.0.8", "gettext-parser": "^5.1.2", @@ -40,37 +40,37 @@ "gulp-sourcemaps": "^3.0.0", "gulp-svg-sprite": "^1.5.0", "map-stream": "0.0.7", - "marked": "^4.0.17", + "marked": "^4.2.5", "mkdirp": "^1.0.4", - "nodemon": "^2.0.19", + "nodemon": "^2.0.20", "npm-run-all": "^4.1.5", - "postcss": "^8.4.14", + "postcss": "^8.4.20", "postcss-clean": "^1.2.2", - "prettier": "^2.7.1", + "prettier": "^2.8.1", "rimraf": "^3.0.0", - "sass": "^1.53.0", - "shadow-cljs": "2.20.2" + "sass": "^1.57.1", + "shadow-cljs": "2.20.16" }, "dependencies": { "@sentry/browser": "^6.17.4", "@sentry/tracing": "^6.17.4", - "date-fns": "^2.28.0", + "date-fns": "^2.29.3", "draft-js": "^0.11.7", - "highlight.js": "^11.6.0", - "js-beautify": "^1.14.4", - "jszip": "^3.10.0", - "luxon": "^3.0.1", + "highlight.js": "^11.7.0", + "js-beautify": "^1.14.7", + "jszip": "^3.10.1", + "luxon": "^3.1.1", "mousetrap": "^1.6.5", "opentype.js": "^1.3.4", "randomcolor": "^0.6.2", "react": "~17.0.2", "react-dom": "~17.0.2", "react-virtualized": "^9.22.3", - "rxjs": "~7.5.5", + "rxjs": "~7.8.0", "sax": "^1.2.4", "source-map-support": "^0.5.21", "tdigest": "^0.1.2", - "ua-parser-js": "^1.0.2", + "ua-parser-js": "^1.0.32", "xregexp": "^5.1.1" } } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 847d2c770..4a2d2502a 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -182,7 +182,7 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.5.tgz#09fa51e356d07d0be200642b0e4f91d8e6dd408d" integrity sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -465,13 +465,13 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.4.7: - version "10.4.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf" - integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== +autoprefixer@^10.4.13: + version "10.4.13" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" + integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== dependencies: - browserslist "^4.20.3" - caniuse-lite "^1.0.30001335" + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" fraction.js "^4.2.0" normalize-range "^0.1.2" picocolors "^1.0.0" @@ -587,6 +587,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -676,15 +683,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.20.3: - version "4.21.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.1.tgz#c9b9b0a54c7607e8dc3e01a0d311727188011a00" - integrity sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ== +browserslist@^4.21.4: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: - caniuse-lite "^1.0.30001359" - electron-to-chromium "^1.4.172" - node-releases "^2.0.5" - update-browserslist-db "^1.0.4" + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" + node-releases "^2.0.6" + update-browserslist-db "^1.0.9" buffer-crc32@~0.2.3: version "0.2.13" @@ -771,10 +778,10 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001359: - version "1.0.30001364" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001364.tgz#1e118f0e933ed2b79f8d461796b8ce45398014a0" - integrity sha512-9O0xzV3wVyX0SlegIQ6knz+okhBB5pE0PC40MNdwcipjwpxoUEHL24uJ+gG42cgklPjfO5ZjZPme9FTSN3QT2Q== +caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: + version "1.0.30001441" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" + integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== caseless@~0.12.0: version "0.12.0" @@ -1364,10 +1371,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-fns@^2.28.0: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== +date-fns@^2.29.3: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== dayjs@^1.10.4: version "1.10.7" @@ -1571,10 +1578,10 @@ editorconfig@^0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.4.172: - version "1.4.185" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz#3432d7944f1c5fe20664bb45d9cced2151405ce2" - integrity sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw== +electron-to-chromium@^1.4.251: + version "1.4.284" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" + integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== elliptic@^6.5.3: version "6.5.4" @@ -2225,6 +2232,17 @@ glob@^7.1.1, glob@^7.1.3, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" @@ -2493,10 +2511,10 @@ hasha@^2.2.0: is-stream "^1.0.1" pinkie-promise "^2.0.0" -highlight.js@^11.6.0: - version "11.6.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.6.0.tgz#a50e9da05763f1bb0c1322c8f4f755242cff3f5a" - integrity sha512-ig1eqDzJaB0pqEvlPVIpSSyMaO92bH1N2rJpLMN/nX396wTpDA4Eq0uK+7I/2XG17pFaaKE0kjV/XPeGt7Evjw== +highlight.js@^11.7.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.7.0.tgz#3ff0165bc843f8c9bce1fd89e2fda9143d24b11e" + integrity sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ== hmac-drbg@^1.0.1: version "1.0.1" @@ -2977,15 +2995,15 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -js-beautify@^1.14.4: - version "1.14.4" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.4.tgz#187d600a835f84de67a6d09ceaf3f199b7284c82" - integrity sha512-+b4A9c3glceZEmxyIbxDOYB0ZJdReLvyU1077RqKsO4dZx9FUHjTOJn8VHwpg33QoucIykOiYbh7MfqBOghnrA== +js-beautify@^1.14.7: + version "1.14.7" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2" + integrity sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A== dependencies: config-chain "^1.1.13" editorconfig "^0.15.3" - glob "^7.1.3" - nopt "^5.0.0" + glob "^8.0.3" + nopt "^6.0.0" "js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" @@ -3066,10 +3084,10 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -jszip@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.0.tgz#faf3db2b4b8515425e34effcdbb086750a346061" - integrity sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q== +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -3297,10 +3315,10 @@ lru-queue@^0.1.0: dependencies: es5-ext "~0.10.2" -luxon@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.0.1.tgz#6901111d10ad06fd267ad4e4128a84bef8a77299" - integrity sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw== +luxon@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.1.1.tgz#b492c645b2474fb86f3bd3283213846b99c32c1e" + integrity sha512-Ah6DloGmvseB/pX1cAmjbFvyU/pKuwQMQqz7d0yvuDlVYLTs2WeDHQMpC8tGjm1da+BriHROW/OEIT/KfYg6xw== make-iterator@^1.0.0: version "1.0.1" @@ -3326,10 +3344,10 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked@^4.0.17: - version "4.0.17" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.17.tgz#1186193d85bb7882159cdcfc57d1dfccaffb3fe9" - integrity sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA== +marked@^4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.5.tgz#979813dfc1252cc123a79b71b095759a32f42a5d" + integrity sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ== matchdep@^2.0.0: version "2.0.0" @@ -3438,13 +3456,20 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.4: +minimatch@^3.0.4, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.2.tgz#0939d7d6f0898acbd1508abe534d1929368a8fff" + integrity sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -3583,20 +3608,20 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-releases@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.6: + version "2.0.8" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" + integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== -nodemon@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.19.tgz#cac175f74b9cb8b57e770d47841995eebe4488bd" - integrity sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A== +nodemon@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" + integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== dependencies: chokidar "^3.5.2" debug "^3.2.7" ignore-by-default "^1.0.1" - minimatch "^3.0.4" + minimatch "^3.1.2" pstree.remy "^1.1.8" semver "^5.7.1" simple-update-notifier "^1.0.7" @@ -3604,12 +3629,12 @@ nodemon@^2.0.19: touch "^3.1.0" undefsafe "^2.0.5" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: - abbrev "1" + abbrev "^1.0.0" nopt@~1.0.10: version "1.0.10" @@ -4118,19 +4143,19 @@ postcss@^7.0.16: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== +postcss@^8.4.20: + version "8.4.20" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.20.tgz#64c52f509644cecad8567e949f4081d98349dc56" + integrity sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" -prettier@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== pretty-bytes@^5.6.0: version "5.6.0" @@ -4598,10 +4623,10 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" -rxjs@~7.5.5: - version "7.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== +rxjs@~7.8.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== dependencies: tslib "^2.1.0" @@ -4632,10 +4657,10 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.53.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" - integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== +sass@^1.57.1: + version "1.57.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.57.1.tgz#dfafd46eb3ab94817145e8825208ecf7281119b5" + integrity sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -4711,10 +4736,10 @@ shadow-cljs-jar@1.3.2: resolved "https://registry.yarnpkg.com/shadow-cljs-jar/-/shadow-cljs-jar-1.3.2.tgz#97273afe1747b6a2311917c1c88d9e243c81957b" integrity sha512-XmeffAZHv8z7451kzeq9oKh8fh278Ak+UIOGGrapyqrFBB773xN8vMQ3O7J7TYLnb9BUwcqadKkmgaq7q6fhZg== -shadow-cljs@2.20.2: - version "2.20.2" - resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.20.2.tgz#24a4b204f1f2288dc4ff2d0a4f3972a6e5307645" - integrity sha512-2kzWnV1QM6KBetziCAkCf8BJdnDX2CwiAr4yhvOsiQpaNJcMzwMsJTX/gTHz58yQg0dV5uwPsIyBlvyIfl30rg== +shadow-cljs@2.20.16: + version "2.20.16" + resolved "https://registry.yarnpkg.com/shadow-cljs/-/shadow-cljs-2.20.16.tgz#32e83586fcc91a246b7fb622349135ad84ca1a19" + integrity sha512-k33ssZppDkBSYIfKswiKOX/8bNTnHbHoTmwf3KBPXBQkDPptPR3FeedmWtS5vKWnucFTe9DObhM2exKocErIxw== dependencies: node-libs-browser "^2.2.1" readline-sync "^1.4.7" @@ -5380,10 +5405,10 @@ ua-parser-js@^0.7.18: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== -ua-parser-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" - integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== +ua-parser-js@^1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.32.tgz#786bf17df97de159d5b1c9d5e8e9e89806f8a030" + integrity sha512-dXVsz3M4j+5tTiovFVyVqssXBu5HM47//YSOeZ9fQkdDKkfzv2v3PP1jmH6FUyPW+yCSn7aBVK1fGGKNhowdDA== unbox-primitive@^1.0.1: version "1.0.1" @@ -5472,10 +5497,10 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz#dbfc5a789caa26b1db8990796c2c8ebbce304824" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== +update-browserslist-db@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" From e37fc00351d7c393b54b9b5f8cbed4278c22f9ce Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 14:30:03 +0100 Subject: [PATCH 05/19] :bug: Fix pointer-map support issue on get-team-shared-files RPC method --- backend/src/app/rpc/commands/files.clj | 33 ++++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj index 8ec4e9182..8dd1e0a55 100644 --- a/backend/src/app/rpc/commands/files.clj +++ b/backend/src/app/rpc/commands/files.clj @@ -473,26 +473,23 @@ (defn get-team-shared-files [conn {:keys [team-id] :as params}] - (let [assets-sample - (fn [assets limit] - (let [sorted-assets (->> (vals assets) - (sort-by #(str/lower (:name %))))] + (letfn [(assets-sample [assets limit] + (let [sorted-assets (->> (vals assets) + (sort-by #(str/lower (:name %))))] + {:count (count sorted-assets) + :sample (into [] (take limit sorted-assets))})) - {:count (count sorted-assets) - :sample (into [] (take limit sorted-assets))})) + (library-summary [{:keys [id data] :as file}] + (binding [pmap/*load-fn* (partial load-pointer conn id)] + {:components (assets-sample (:components data) 4) + :colors (assets-sample (:colors data) 3) + :typographies (assets-sample (:typographies data) 3)}))] - library-summary - (fn [data] - {:components (assets-sample (:components data) 4) - :colors (assets-sample (:colors data) 3) - :typographies (assets-sample (:typographies data) 3)}) - - xform (comp - (map decode-row) - (map #(assoc % :library-summary (library-summary (:data %)))) - (map #(dissoc % :data)))] - - (into #{} xform (db/exec! conn [sql:team-shared-files team-id])))) + (->> (db/exec! conn [sql:team-shared-files team-id]) + (into #{} (comp + (map decode-row) + (map #(assoc % :library-summary (library-summary %))) + (map #(dissoc % :data))))))) (s/def ::get-team-shared-files (s/keys :req [::rpc/profile-id] :req-un [::team-id])) From 84fd952471cf506ee020da8f711daf4ad1566744 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 14:31:32 +0100 Subject: [PATCH 06/19] :sparkles: Improve storage/* features support on srepl helpers --- backend/src/app/srepl/helpers.clj | 48 ++++++++++++++++++++----------- backend/src/app/srepl/main.clj | 23 ++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/backend/src/app/srepl/helpers.clj b/backend/src/app/srepl/helpers.clj index d37d0f520..38c943a08 100644 --- a/backend/src/app/srepl/helpers.clj +++ b/backend/src/app/srepl/helpers.clj @@ -11,6 +11,7 @@ [app.auth :refer [derive-password]] [app.common.data :as d] [app.common.exceptions :as ex] + [app.common.files.features :as ffeat] [app.common.logging :as l] [app.common.pages :as cp] [app.common.pages.migrations :as pmg] @@ -21,8 +22,11 @@ [app.db :as db] [app.db.sql :as sql] [app.main :refer [system]] + [app.rpc.commands.files :as files] [app.rpc.queries.profile :as prof] [app.util.blob :as blob] + [app.util.objects-map :as omap] + [app.util.pointer-map :as pmap] [app.util.time :as dt] [clojure.spec.alpha :as s] [clojure.stacktrace :as strace] @@ -66,23 +70,33 @@ [system & {:keys [update-fn id save? migrate? inc-revn?] :or {save? false migrate? true inc-revn? true}}] (db/with-atomic [conn (:app.db/pool system)] - (let [file (db/get-by-id conn :file id {:for-update true}) - file (-> file - (update :features db/decode-pgarray #{}) - (update :data blob/decode) - (cond-> migrate? (update :data pmg/migrate-data))) - file (binding [*conn* conn] - (-> (update-fn file) - (cond-> inc-revn? (update :revn inc))))] - (when save? - (let [features (db/create-array conn "text" (:features file)) - data (blob/encode (:data file))] - (db/update! conn :file - {:data data - :revn (:revn file) - :features features} - {:id id}))) - file))) + (let [file (-> (db/get-by-id conn :file id {:for-update true}) + (update :features db/decode-pgarray #{}))] + (binding [*conn* conn + pmap/*tracked* (atom {}) + pmap/*load-fn* (partial files/load-pointer conn id) + ffeat/*wrap-with-pointer-map-fn* + (if (contains? (:features file) "storage/pointer-map") pmap/wrap identity) + ffeat/*wrap-with-objects-map-fn* + (if (contains? (:features file) "storage/objectd-map") omap/wrap identity)] + (let [file (-> file + (update :data blob/decode) + (cond-> migrate? (update :data pmg/migrate-data)) + (update-fn) + (cond-> inc-revn? (update :revn inc)))] + (when save? + (let [features (db/create-array conn "text" (:features file)) + data (blob/encode (:data file))] + (db/update! conn :file + {:data data + :revn (:revn file) + :features features} + {:id id}) + + (when (contains? (:features file) "storage/pointer-map") + (files/persist-pointers! conn id)))) + + (dissoc file :data)))))) (def ^:private sql:retrieve-files-chunk "SELECT id, name, created_at, data FROM file diff --git a/backend/src/app/srepl/main.clj b/backend/src/app/srepl/main.clj index 80d5a7035..ae09aa2ff 100644 --- a/backend/src/app/srepl/main.clj +++ b/backend/src/app/srepl/main.clj @@ -110,10 +110,10 @@ (if (contains? features "storage/objects-map") file (-> file - (update :data migrate-to-omap) + (update :data migrate) (update :features conj "storage/objects-map")))) - (migrate-to-omap [data] + (migrate [data] (-> data (update :pages-index update-vals #(update % :objects omap/wrap)) (update :components update-vals #(update % :objects omap/wrap))))] @@ -125,24 +125,17 @@ (defn enable-pointer-map-feature-on-file! [system & {:keys [save? id]}] - (letfn [(update-file [{:keys [features id] :as file}] + (letfn [(update-file [{:keys [features] :as file}] (if (contains? features "storage/pointer-map") file (-> file - (update :data migrate-to-omap id) + (update :data migrate) (update :features conj "storage/pointer-map")))) - (migrate-to-omap [data file-id] - (binding [pmap/*tracked* (atom {})] - (let [data (-> data - (update :pages-index update-vals pmap/wrap) - (update :components pmap/wrap))] - (doseq [[id item] @pmap/*tracked*] - (db/insert! h/*conn* :file-data-fragment - {:id id - :file-id file-id - :content (-> item deref blob/encode)})) - data)))] + (migrate [data] + (-> data + (update :pages-index update-vals pmap/wrap) + (update :components pmap/wrap)))] (h/update-file! system :id id From 60fb3f3d0e003151b7dfbea4a0f2568b08291529 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 14:49:14 +0100 Subject: [PATCH 07/19] :bug: Fix storage/pointer-map support issues on thumbnails and libs loading --- backend/src/app/rpc/commands/files.clj | 60 +++++++++++++---------- frontend/src/app/main/data/workspace.cljs | 23 +++++---- frontend/src/app/main/repo.cljs | 1 + 3 files changed, 47 insertions(+), 37 deletions(-) diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj index 8dd1e0a55..054bf22ff 100644 --- a/backend/src/app/rpc/commands/files.clj +++ b/backend/src/app/rpc/commands/files.clj @@ -241,7 +241,6 @@ [conn id client-features] ;; here we check if client requested features are supported (check-features-compatibility! client-features) - (binding [pmap/*load-fn* (partial load-pointer conn id)] (-> (db/get-by-id conn :file id) (decode-row) @@ -533,12 +532,14 @@ [conn file-id client-features] (check-features-compatibility! client-features) (->> (db/exec! conn [sql:file-libraries file-id]) - (mapv (fn [{:keys [id] :as row}] - (binding [pmap/*load-fn* (partial load-pointer conn id)] - (-> (decode-row row) - (assoc :is-indirect false) - (update :data dissoc :pages-index) - (handle-file-features client-features))))))) + (map decode-row) + (map #(assoc % :is-indirect false)) + (map (fn [{:keys [id] :as row}] + (binding [pmap/*load-fn* (partial load-pointer conn id)] + (-> row + (update :data dissoc :pages-index) + (handle-file-features client-features))))) + (vec))) (s/def ::get-file-libraries (s/keys :req [::rpc/profile-id] @@ -708,28 +709,30 @@ objects)))] - (let [frame (get-thumbnail-frame data) - frame-id (:id frame) - page-id (or (:page-id frame) - (-> data :pages first)) + (binding [pmap/*load-fn* (partial load-pointer conn id)] + (let [frame (get-thumbnail-frame data) + frame-id (:id frame) + page-id (or (:page-id frame) + (-> data :pages first)) - page (dm/get-in data [:pages-index page-id]) - frame-ids (if (some? frame) (list frame-id) (map :id (ctt/get-frames (:objects page)))) + page (dm/get-in data [:pages-index page-id]) + page (cond-> page (pmap/pointer-map? page) deref) + frame-ids (if (some? frame) (list frame-id) (map :id (ctt/get-frames (:objects page)))) - obj-ids (map #(str page-id %) frame-ids) - thumbs (get-object-thumbnails conn id obj-ids)] + obj-ids (map #(str page-id %) frame-ids) + thumbs (get-object-thumbnails conn id obj-ids)] - (cond-> page - ;; If we have frame, we need to specify it on the page level - ;; and remove the all other unrelated objects. - (some? frame-id) - (-> (assoc :thumbnail-frame-id frame-id) - (update :objects filter-objects frame-id)) + (cond-> page + ;; If we have frame, we need to specify it on the page level + ;; and remove the all other unrelated objects. + (some? frame-id) + (-> (assoc :thumbnail-frame-id frame-id) + (update :objects filter-objects frame-id)) - ;; Assoc the available thumbnails and prune not visible shapes - ;; for avoid transfer unnecessary data. - :always - (update :objects assoc-thumbnails page-id thumbs))))) + ;; Assoc the available thumbnails and prune not visible shapes + ;; for avoid transfer unnecessary data. + :always + (update :objects assoc-thumbnails page-id thumbs)))))) (s/def ::get-file-data-for-thumbnail (s/keys :req [::rpc/profile-id] @@ -743,12 +746,15 @@ [{:keys [pool] :as cfg} {:keys [::rpc/profile-id file-id features] :as props}] (with-open [conn (db/open pool)] (check-read-permissions! conn profile-id file-id) - (let [file (get-file conn file-id features)] + ;; NOTE: we force here the "storage/pointer-map" feature, because + ;; it used internally only and is independent if user supports it + ;; or not. + (let [feat (into #{"storage/pointer-map"} features) + file (get-file conn file-id feat)] {:file-id file-id :revn (:revn file) :page (get-file-data-for-thumbnail conn file)}))) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; MUTATION COMMANDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index e6517f329..55d98260c 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -150,14 +150,15 @@ (defn- bundle-fetched [features [{:keys [id data] :as file} thumbnails project users comments-users]] - (letfn [(resolve-pointer [[key pointer]] - (->> (rp/cmd! :get-file-fragment {:file-id id :fragment-id @pointer}) + (letfn [(resolve-pointer [file-id [key pointer]] + (->> (rp/cmd! :get-file-fragment {:file-id file-id :fragment-id @pointer}) (rx/map :content) (rx/map #(vector key %)))) - (resolve-pointers [in-to coll] + + (resolve-pointers [file-id coll] (->> (rx/from (seq coll)) - (rx/merge-map resolve-pointer) - (rx/reduce conj in-to)))] + (rx/merge-map (partial resolve-pointer file-id)) + (rx/reduce conj {})))] (ptk/reify ::bundle-fetched ptk/UpdateEvent @@ -186,7 +187,7 @@ (rx/merge-map (fn [[_ page :as kp]] (if (t/pointer? page) - (resolve-pointer kp) + (resolve-pointer id kp) (rx/of kp)))) (rx/merge-map (fn [[id page]] @@ -212,15 +213,17 @@ (->> data (filter (comp t/pointer? val)) - (resolve-pointers {}) + (resolve-pointers id) (rx/map workspace-data-pointers-loaded)) (->> (rp/cmd! :get-file-libraries {:file-id id :features features}) (rx/mapcat identity) (rx/mapcat - (fn [file] - (->> (filter (comp t/pointer? val) file) - (resolve-pointers file)))) + (fn [{:keys [id data] :as file}] + (->> (filter (comp t/pointer? val) data) + (resolve-pointers id) + (rx/map #(update file :data merge %))))) + (rx/reduce conj []) (rx/map libraries-fetched))))))) (rx/take-until stoper))))))) diff --git a/frontend/src/app/main/repo.cljs b/frontend/src/app/main/repo.cljs index 2fa651daf..55c2e3976 100644 --- a/frontend/src/app/main/repo.cljs +++ b/frontend/src/app/main/repo.cljs @@ -22,6 +22,7 @@ (derive :get-team-members ::query) (derive :get-team-stats ::query) (derive :get-team-invitations ::query) +(derive :get-team-shared-files ::query) (defn handle-response [{:keys [status body] :as response}] From b827037f9060156e2fe96b1ec3fb623937895abe Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 14:52:32 +0100 Subject: [PATCH 08/19] :paperclip: Add experimental label on admin image on compose file --- docker/images/docker-compose.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docker/images/docker-compose.yaml b/docker/images/docker-compose.yaml index 586f39873..b8ae99216 100644 --- a/docker/images/docker-compose.yaml +++ b/docker/images/docker-compose.yaml @@ -243,20 +243,22 @@ services: ## An optional admin application for pentpot. It allows manage ## users, teams and inspect some parts of the database. You can read ## more about it on: https://github.com/penpot/penpot-admin + ## + ## Status: EXPERIMENTAL # penpot-admin: # image: "penpotapp/admin:alpha" # networks: # - penpot - + # # depends_on: # - penpot-postgres # - penpot-backend - + # # environment: # - PENPOT_PUBLIC_URI=http://localhost:9001 # - PENPOT_API_URI=http://penpot-frontend/ - + # # - PENPOT_DATABASE_HOST=penpot-postgres # - PENPOT_DATABASE_NAME=penpot # - PENPOT_DATABASE_USERNAME=penpot From de72dc57699b1cad321133be83dc9a596ab39722 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Tue, 27 Dec 2022 17:03:43 +0100 Subject: [PATCH 09/19] :bug: Fix race conditions issues on concurrent edition --- backend/src/app/rpc/commands/files/update.clj | 49 +++++++++---------- .../app/main/data/workspace/persistence.cljs | 17 +++---- 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/backend/src/app/rpc/commands/files/update.clj b/backend/src/app/rpc/commands/files/update.clj index 7c788553c..f24dede18 100644 --- a/backend/src/app/rpc/commands/files/update.clj +++ b/backend/src/app/rpc/commands/files/update.clj @@ -168,7 +168,18 @@ (->> changes-with-metadata (mapcat :changes) vec) (vec changes)) - params (assoc params :file file :changes changes)] + params (-> params + (assoc :file file) + (assoc :changes changes) + (assoc ::created-at (dt/now)))] + + (when (> (:revn params) + (:revn file)) + (ex/raise :type :validation + :code :revn-conflict + :hint "The incoming revision number is greater that stored version." + :context {:incoming-revn (:revn params) + :stored-revn (:revn file)})) (mtx/run! metrics {:id :update-file-changes :inc (count changes)}) @@ -180,24 +191,15 @@ (-> (update-fn cfg params) (vary-meta assoc ::audit/replace-props - {:id (:id file) - :name (:name file) - :features (:features file) + {:id (:id file) + :name (:name file) + :features (:features file) :project-id (:project-id file) :team-id (:team-id file)})))))) (defn- update-file* - [{:keys [conn] :as cfg} {:keys [profile-id file changes session-id] :as params}] - (when (> (:revn params) - (:revn file)) - (ex/raise :type :validation - :code :revn-conflict - :hint "The incoming revision number is greater that stored version." - :context {:incoming-revn (:revn params) - :stored-revn (:revn file)})) - - (let [ts (dt/now) - file (-> file + [{:keys [conn] :as cfg} {:keys [profile-id file changes session-id ::created-at] :as params}] + (let [file (-> file (update :revn inc) (update :data (fn [data] (cond-> data @@ -217,7 +219,7 @@ {:id (uuid/next) :session-id session-id :profile-id profile-id - :created-at ts + :created-at created-at :file-id (:id file) :revn (:revn file) :features (db/create-array conn "text" (:features file)) @@ -229,12 +231,12 @@ {:revn (:revn file) :data (:data file) :data-backend nil - :modified-at ts + :modified-at created-at :has-media-trimmed false} {:id (:id file)}) (db/update! conn :project - {:modified-at ts} + {:modified-at created-at} {:id (:project-id file)}) (let [params (assoc params :file file)] @@ -265,13 +267,10 @@ order by s.created_at asc") (defn- get-lagged-changes - [conn params] - (->> (db/exec! conn [sql:lagged-changes (:id params) (:revn params)]) - (into [] (comp (map files/decode-row) - (map (fn [row] - (cond-> row - (= (:revn row) (:revn (:file params))) - (assoc :changes [])))))))) + [conn {:keys [id revn] :as params}] + (->> (db/exec! conn [sql:lagged-changes id revn]) + (map files/decode-row) + (vec))) (defn- send-notifications! [{:keys [conn] :as cfg} {:keys [file changes session-id] :as params}] diff --git a/frontend/src/app/main/data/workspace/persistence.cljs b/frontend/src/app/main/data/workspace/persistence.cljs index a18acb48c..29df1fd43 100644 --- a/frontend/src/app/main/data/workspace/persistence.cljs +++ b/frontend/src/app/main/data/workspace/persistence.cljs @@ -148,12 +148,7 @@ (->> (rp/cmd! :update-file params) (rx/mapcat (fn [lagged] (log/debug :hint "changes persisted" :lagged (count lagged)) - (let [lagged-updates - (cond->> lagged - (= #{sid} (into #{} (map :session-id) lagged)) - (map #(assoc % :changes []))) - - frame-updates + (let [frame-updates (-> (group-by :page-id changes) (update-vals #(into #{} (mapcat :frames) %)))] @@ -162,9 +157,13 @@ (rx/mapcat (fn [[page-id frames]] (->> frames (map #(vector page-id %))))) (rx/map (fn [[page-id frame-id]] (dwt/update-thumbnail (:id file) page-id frame-id)))) - (->> (rx/of lagged-updates) - (rx/mapcat seq) - (rx/map #(shapes-changes-persisted file-id %))))))) + (->> (rx/from lagged) + (rx/merge-map (fn [{:keys [changes] :as entry}] + (rx/merge + (rx/from + (for [[page-id changes] (group-by :page-id changes)] + (dch/update-indices page-id changes))) + (rx/of (shapes-changes-persisted file-id entry)))))))))) (rx/catch (fn [cause] (rx/concat (if (= :authentication (:type cause)) From 5cb3aa5dbc26d673f28b4ce5def887473881bb97 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 28 Dec 2022 08:33:38 +0100 Subject: [PATCH 10/19] :bug: Fix show outline with rounded corners on rects --- CHANGES.md | 2 ++ frontend/src/app/main/ui/shapes/attrs.cljs | 32 ++++++++++--------- .../main/ui/workspace/viewport/outline.cljs | 14 ++++++-- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index ea72f8fe7..4b7f3dec4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,8 @@ - Fix component sync when converting to path [Taiga #3642](https://tree.taiga.io/project/penpot/issue/3642) - Fix style for team invite in deutsch [Taiga #4614](https://tree.taiga.io/project/penpot/issue/4614) - Fix problem with text edition in Safari [Taiga #4046](https://tree.taiga.io/project/penpot/issue/4046) +- Fix show outline with rounded corners on rects [Taiga #4053](https://tree.taiga.io/project/penpot/issue/4053) + ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/ui/shapes/attrs.cljs b/frontend/src/app/main/ui/shapes/attrs.cljs index 334f56025..7047cb793 100644 --- a/frontend/src/app/main/ui/shapes/attrs.cljs +++ b/frontend/src/app/main/ui/shapes/attrs.cljs @@ -29,12 +29,11 @@ (->> values (map #(+ % width)) (str/join ",")))) - -(defn add-border-radius [attrs {:keys [x y width height] :as shape}] +(defn extract-border-radius [{:keys [x y width height] :as shape}] (case (ctsr/radius-mode shape) :radius-1 (let [radius (gsh/shape-corners-1 shape)] - (obj/merge! attrs #js {:rx radius :ry radius})) + #js {:rx radius :ry radius}) :radius-4 (let [[r1 r2 r3 r4] (gsh/shape-corners-4 shape) @@ -42,18 +41,21 @@ right (- height r2 r3) bottom (- width r3 r4) left (- height r4 r1)] - (obj/merge! attrs #js {:d (dm/str - "M" (+ x r1) "," y " " - "h" top " " - "a" r2 "," r2 " 0 0 1 " r2 "," r2 " " - "v" right " " - "a" r3 "," r3 " 0 0 1 " (- r3) "," r3 " " - "h" (- bottom) " " - "a" r4 "," r4 " 0 0 1 " (- r4) "," (- r4) " " - "v" (- left) " " - "a" r1 "," r1 " 0 0 1 " r1 "," (- r1) " " - "z")})) - attrs)) + #js {:d (dm/str + "M" (+ x r1) "," y " " + "h" top " " + "a" r2 "," r2 " 0 0 1 " r2 "," r2 " " + "v" right " " + "a" r3 "," r3 " 0 0 1 " (- r3) "," r3 " " + "h" (- bottom) " " + "a" r4 "," r4 " 0 0 1 " (- r4) "," (- r4) " " + "v" (- left) " " + "a" r1 "," r1 " 0 0 1 " r1 "," (- r1) " " + "z")}))) + + +(defn add-border-radius [attrs shape] + (obj/merge! attrs (extract-border-radius shape))) (defn add-fill ([attrs fill-data render-id type] diff --git a/frontend/src/app/main/ui/workspace/viewport/outline.cljs b/frontend/src/app/main/ui/workspace/viewport/outline.cljs index 3cba35078..674e40bc0 100644 --- a/frontend/src/app/main/ui/workspace/viewport/outline.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/outline.cljs @@ -10,6 +10,7 @@ [app.common.exceptions :as ex] [app.common.geom.shapes :as gsh] [app.main.ui.hooks :as hooks] + [app.main.ui.shapes.attrs :as attrs] [app.util.object :as obj] [app.util.path.format :as upf] [clojure.set :as set] @@ -34,12 +35,16 @@ (or (ex/ignoring (upf/format-path (:content shape))) ""))) - {:keys [x y width height selrect]} shape + {:keys [x y width height selrect rx ry]} shape + + border-radius-attrs (.-d (attrs/extract-border-radius shape)) + + path? (some? border-radius-attrs) outline-type (case (:type shape) :circle "ellipse" :path "path" - "rect") + (if path? "path" "rect")) common {:fill "none" :stroke color @@ -61,7 +66,10 @@ {:x (:x selrect) :y (:y selrect) :width (:width selrect) - :height (:height selrect)})] + :height (:height selrect) + :rx rx + :ry ry + :d border-radius-attrs})] [:> outline-type (map->obj (merge common props))])) From 33f7cec933150ab5fb16534f6f81e363d177e3df Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Wed, 28 Dec 2022 10:42:06 +0100 Subject: [PATCH 11/19] :bug: Fix bad element positioning on interaction with fixed scroll --- CHANGES.md | 1 + frontend/src/app/main/refs.cljs | 13 +++++++++++++ frontend/src/app/main/ui/viewer/shapes.cljs | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 4b7f3dec4..3014cbb73 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,6 +25,7 @@ - Fix style for team invite in deutsch [Taiga #4614](https://tree.taiga.io/project/penpot/issue/4614) - Fix problem with text edition in Safari [Taiga #4046](https://tree.taiga.io/project/penpot/issue/4046) - Fix show outline with rounded corners on rects [Taiga #4053](https://tree.taiga.io/project/penpot/issue/4053) +- Fix bad element positioning on interaction with fixed scroll [Github #2660](https://github.com/penpot/penpot/issues/2660) ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index df141a2d3..5cb009e68 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -484,5 +484,18 @@ ids))) st/state =)) + +(defn get-viewer-objects + ([] + (let [route (deref route) + page-id (:page-id (:query-params route))] + (get-viewer-objects page-id))) + ([page-id] + (l/derived + (fn [state] + (let [objects (wsh/lookup-viewer-objects state page-id)] + objects)) + st/state =))) + (def colorpicker (l/derived :colorpicker st/state)) diff --git a/frontend/src/app/main/ui/viewer/shapes.cljs b/frontend/src/app/main/ui/viewer/shapes.cljs index e43ff5780..c364d38c1 100644 --- a/frontend/src/app/main/ui/viewer/shapes.cljs +++ b/frontend/src/app/main/ui/viewer/shapes.cljs @@ -58,7 +58,8 @@ :open-overlay (let [dest-frame-id (:destination interaction) - dest-frame (get objects dest-frame-id) + viewer-objects (deref (refs/get-viewer-objects)) + dest-frame (get viewer-objects dest-frame-id) relative-to-id (if (= :manual (:overlay-pos-type interaction)) (:id shape) ;; manual interactions are allways from "self" (:position-relative-to interaction)) From 47bf758ad7b84f84247c84b1b48bf06556f60317 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 28 Dec 2022 07:06:13 +0100 Subject: [PATCH 12/19] :bug: Fix guides spec failure --- frontend/src/app/main/data/workspace/guides.cljs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/main/data/workspace/guides.cljs b/frontend/src/app/main/data/workspace/guides.cljs index 0ef6e5a0b..ba2db70cf 100644 --- a/frontend/src/app/main/data/workspace/guides.cljs +++ b/frontend/src/app/main/data/workspace/guides.cljs @@ -10,7 +10,7 @@ [app.common.geom.shapes :as gsh] [app.common.pages.changes-builder :as pcb] [app.common.spec :as us] - [app.common.types.page :as ctp] + [app.common.types.page.guide :as ctpg] [app.main.data.workspace.changes :as dwc] [app.main.data.workspace.state-helpers :as wsh] [beicon.core :as rx] @@ -23,7 +23,7 @@ (merge guide)))) (defn update-guides [guide] - (us/verify ::ctp/guide guide) + (us/verify ::ctpg/guide guide) (ptk/reify ::update-guides ptk/WatchEvent (watch [it state _] @@ -35,7 +35,7 @@ (rx/of (dwc/commit-changes changes)))))) (defn remove-guide [guide] - (us/verify ::ctp/guide guide) + (us/verify ::ctpg/guide guide) (ptk/reify ::remove-guide ptk/UpdateEvent (update [_ state] From 6c8144a18ad61d357f32ee90e6232233f6d71587 Mon Sep 17 00:00:00 2001 From: Pablo Alba Date: Tue, 27 Dec 2022 13:39:34 +0100 Subject: [PATCH 13/19] :bug: Fix display type of component library not persistent --- CHANGES.md | 2 +- frontend/src/app/main/data/workspace.cljs | 20 ++++ frontend/src/app/main/refs.cljs | 6 ++ frontend/src/app/main/ui/dashboard/grid.cljs | 1 - frontend/src/app/main/ui/dashboard/team.cljs | 2 - .../app/main/ui/workspace/sidebar/assets.cljs | 97 ++++++++++--------- 6 files changed, 78 insertions(+), 50 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 3014cbb73..0515b55b1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,7 +26,7 @@ - Fix problem with text edition in Safari [Taiga #4046](https://tree.taiga.io/project/penpot/issue/4046) - Fix show outline with rounded corners on rects [Taiga #4053](https://tree.taiga.io/project/penpot/issue/4053) - Fix bad element positioning on interaction with fixed scroll [Github #2660](https://github.com/penpot/penpot/issues/2660) - +- Fix display type of component library not persistent [Taiga #4512](https://tree.taiga.io/project/penpot/issue/4512) ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 55d98260c..206deef13 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1845,6 +1845,26 @@ (assoc-in state [:workspace-local :inspect-expanded] expanded?)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; File Library persistent settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +(defn set-file-library-listing-thumbs + [listing-thumbs?] + (ptk/reify ::set-file-library-listing-thumbs + ptk/UpdateEvent + (update [_ state] + (assoc-in state [:workspace-global :file-library-listing-thumbs] listing-thumbs?)))) + +(defn set-file-library-reverse-sort + [reverse-sort?] + (ptk/reify ::set-file-library-reverse-sort + ptk/UpdateEvent + (update [_ state] + (assoc-in state [:workspace-global :file-library-reverse-sort] reverse-sort?)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Exports ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/frontend/src/app/main/refs.cljs b/frontend/src/app/main/refs.cljs index 5cb009e68..858f8fb57 100644 --- a/frontend/src/app/main/refs.cljs +++ b/frontend/src/app/main/refs.cljs @@ -183,6 +183,12 @@ (def context-menu (l/derived :context-menu workspace-local)) +(def file-library-listing-thumbs? + (l/derived :file-library-listing-thumbs workspace-global)) + +(def file-library-reverse-sort? + (l/derived :file-library-reverse-sort workspace-global)) + (def current-hover-ids (l/derived :hover-ids context-menu)) diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index 194b09e3a..9f811c20e 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -316,7 +316,6 @@ :on-click on-menu-click :on-key-down (fn [event] (when (kbd/enter? event) - (prn "entro en on-menu-click") (on-menu-click event)))} i/actions (when selected? diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index eada3b00a..9ab754741 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -517,7 +517,6 @@ (let [params (with-meta {:email email :team-id team-id} {:on-success on-copy-success :on-error on-error})] - (prn "KKK1") (st/emit! (-> (dd/copy-invitation-link params) (with-meta {::ev/origin :team}))))))] @@ -694,7 +693,6 @@ on-submit (mf/use-fn (fn [form] - (prn @form) (let [data (:clean-data @form)] (if (:id data) (on-update-submit form) diff --git a/frontend/src/app/main/ui/workspace/sidebar/assets.cljs b/frontend/src/app/main/ui/workspace/sidebar/assets.cljs index 2f5434f33..d16160964 100644 --- a/frontend/src/app/main/ui/workspace/sidebar/assets.cljs +++ b/frontend/src/app/main/ui/workspace/sidebar/assets.cljs @@ -423,8 +423,8 @@ [:div {:ref item-ref :class (dom/classnames :selected (contains? selected-components (:id component)) - :grid-cell @listing-thumbs? - :enum-item (not @listing-thumbs?)) + :grid-cell listing-thumbs? + :enum-item (not listing-thumbs?)) :id (str "component-shape-id-" (:id component)) :draggable (not workspace-read-only?) :on-click on-component-click @@ -441,12 +441,12 @@ [:* [:& editable-label {:class-name (dom/classnames - :cell-name @listing-thumbs? - :item-name (not @listing-thumbs?) + :cell-name listing-thumbs? + :item-name (not listing-thumbs?) :editing renaming?) :value (cph/merge-path-item (:path component) (:name component)) :tooltip (cph/merge-path-item (:path component) (:name component)) - :display-value (if @listing-thumbs? + :display-value (if listing-thumbs? (:name component) (cph/compact-name (:path component) (:name component))) @@ -504,9 +504,9 @@ [:* (let [components (get groups "" [])] [:div {:class-name (dom/classnames - :asset-grid @listing-thumbs? - :big @listing-thumbs? - :asset-enum (not @listing-thumbs?) + :asset-grid listing-thumbs? + :big listing-thumbs? + :asset-enum (not listing-thumbs?) :drop-space (and (empty? components) (some? groups) @@ -806,8 +806,8 @@ [:div {:ref item-ref :class-name (dom/classnames :selected (contains? selected-objects (:id object)) - :grid-cell @listing-thumbs? - :enum-item (not @listing-thumbs?)) + :grid-cell listing-thumbs? + :enum-item (not listing-thumbs?)) :draggable (not workspace-read-only?) :on-click #(on-asset-click % (:id object) nil) :on-context-menu (on-context-menu (:id object)) @@ -826,12 +826,12 @@ [:* [:& editable-label {:class-name (dom/classnames - :cell-name @listing-thumbs? - :item-name (not @listing-thumbs?) + :cell-name listing-thumbs? + :item-name (not listing-thumbs?) :editing renaming?) :value (cph/merge-path-item (:path object) (:name object)) :tooltip (cph/merge-path-item (:path object) (:name object)) - :display-value (if @listing-thumbs? + :display-value (if listing-thumbs? (:name object) (cph/compact-name (:path object) (:name object))) @@ -890,8 +890,8 @@ [:* (let [objects (get groups "" [])] [:div {:class-name (dom/classnames - :asset-grid @listing-thumbs? - :asset-enum (not @listing-thumbs?) + :asset-grid listing-thumbs? + :asset-enum (not listing-thumbs?) :drop-space (and (empty? objects) (some? groups) @@ -1983,8 +1983,11 @@ shared? (:is-shared file) router (mf/deref refs/router) - reverse-sort? (mf/use-state false) - listing-thumbs? (mf/use-state true) + reverse-sort? (mf/deref refs/file-library-reverse-sort?) + reverse-sort? (if (nil? reverse-sort?) false reverse-sort?) + + listing-thumbs? (mf/deref refs/file-library-listing-thumbs?) + listing-thumbs? (if (nil? listing-thumbs?) true listing-thumbs?) selected-assets (mf/deref refs/selected-assets) @@ -1998,31 +2001,33 @@ toggle-open #(st/emit! (dwl/set-assets-box-open (:id file) :library (not open?))) url (rt/resolve router :workspace - {:project-id (:project-id file) - :file-id (:id file)} - {:page-id (get-in file [:data :pages 0])}) + {:project-id (:project-id file) + :file-id (:id file)} + {:page-id (get-in file [:data :pages 0])}) colors-ref (mf/use-memo (mf/deps (:id file)) #(file-colors-ref (:id file))) - colors (apply-filters (mf/deref colors-ref) filters @reverse-sort?) + colors (apply-filters (mf/deref colors-ref) filters reverse-sort?) typography-ref (mf/use-memo (mf/deps (:id file)) #(file-typography-ref (:id file))) - typographies (apply-filters (mf/deref typography-ref) filters @reverse-sort?) + typographies (apply-filters (mf/deref typography-ref) filters reverse-sort?) media-ref (mf/use-memo (mf/deps (:id file)) #(file-media-ref (:id file))) - media (apply-filters (mf/deref media-ref) filters @reverse-sort?) + media (apply-filters (mf/deref media-ref) filters reverse-sort?) components-ref (mf/use-memo (mf/deps (:id file)) #(file-components-ref (:id file))) - components (apply-filters (mf/deref components-ref) filters @reverse-sort?) + components (apply-filters (mf/deref components-ref) filters reverse-sort?) toggle-sort (mf/use-fn + (mf/deps reverse-sort?) (fn [_] - (swap! reverse-sort? not))) + (st/emit! (dw/set-file-library-reverse-sort (not reverse-sort?))))) toggle-listing (mf/use-fn + (mf/deps listing-thumbs?) (fn [_] - (swap! listing-thumbs? not))) + (st/emit! (dw/set-file-library-listing-thumbs (not listing-thumbs?))))) extend-selected-assets (mf/use-fn @@ -2084,20 +2089,20 @@ (mf/deps selected-assets) (fn [] (let [undo-id (uuid/next)] - (st/emit! (dwu/start-undo-transaction undo-id)) - (apply st/emit! (map #(dwl/delete-component {:id %}) - (:components selected-assets))) - (apply st/emit! (map #(dwl/delete-media {:id %}) - (:graphics selected-assets))) - (apply st/emit! (map #(dwl/delete-color {:id %}) - (:colors selected-assets))) - (apply st/emit! (map #(dwl/delete-typography %) - (:typographies selected-assets))) - (when (or (d/not-empty? (:components selected-assets)) - (d/not-empty? (:colors selected-assets)) - (d/not-empty? (:typographies selected-assets))) - (st/emit! (dwl/sync-file (:id file) (:id file)))) - (st/emit! (dwu/commit-undo-transaction undo-id)))))] + (st/emit! (dwu/start-undo-transaction undo-id)) + (apply st/emit! (map #(dwl/delete-component {:id %}) + (:components selected-assets))) + (apply st/emit! (map #(dwl/delete-media {:id %}) + (:graphics selected-assets))) + (apply st/emit! (map #(dwl/delete-color {:id %}) + (:colors selected-assets))) + (apply st/emit! (map #(dwl/delete-typography %) + (:typographies selected-assets))) + (when (or (d/not-empty? (:components selected-assets)) + (d/not-empty? (:colors selected-assets)) + (d/not-empty? (:typographies selected-assets))) + (st/emit! (dwl/sync-file (:id file) (:id file)))) + (st/emit! (dwu/commit-undo-transaction undo-id)))))] [:div.tool-window {:on-context-menu #(dom/prevent-default %) :on-click unselect-all} @@ -2144,11 +2149,11 @@ [:span.selected-count (tr "workspace.assets.selected-count" (i18n/c selected-count))]) [:div.listing-option-btn.first {:on-click toggle-sort} - (if @reverse-sort? + (if reverse-sort? i/sort-ascending i/sort-descending)] [:div.listing-option-btn {:on-click toggle-listing} - (if @listing-thumbs? + (if listing-thumbs? i/listing-enum i/listing-thumbs)]] @@ -2159,7 +2164,7 @@ :listing-thumbs? listing-thumbs? :open? (open-box? :components) :open-groups (open-groups :components) - :reverse-sort? @reverse-sort? + :reverse-sort? reverse-sort? :selected-assets selected-assets :on-asset-click (partial on-asset-click :components) :on-assets-delete on-assets-delete @@ -2173,7 +2178,7 @@ :listing-thumbs? listing-thumbs? :open? (open-box? :graphics) :open-groups (open-groups :graphics) - :reverse-sort? @reverse-sort? + :reverse-sort? reverse-sort? :selected-assets selected-assets :on-asset-click (partial on-asset-click :graphics) :on-assets-delete on-assets-delete @@ -2184,7 +2189,7 @@ :colors colors :open? (open-box? :colors) :open-groups (open-groups :colors) - :reverse-sort? @reverse-sort? + :reverse-sort? reverse-sort? :selected-assets selected-assets :on-asset-click (partial on-asset-click :colors) :on-assets-delete on-assets-delete @@ -2197,7 +2202,7 @@ :typographies typographies :open? (open-box? :typographies) :open-groups (open-groups :typographies) - :reverse-sort? @reverse-sort? + :reverse-sort? reverse-sort? :selected-assets selected-assets :on-asset-click (partial on-asset-click :typographies) :on-assets-delete on-assets-delete From 1dc64649747cb1a16f6faff1ff419c6a0352c4a7 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 28 Dec 2022 11:30:27 +0100 Subject: [PATCH 14/19] :bug: Fix unexpected behavior of font-variant query Missing coersion of team-id parameter --- backend/src/app/rpc/queries/fonts.clj | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/app/rpc/queries/fonts.clj b/backend/src/app/rpc/queries/fonts.clj index e019b00fb..6c9623c54 100644 --- a/backend/src/app/rpc/queries/fonts.clj +++ b/backend/src/app/rpc/queries/fonts.clj @@ -17,6 +17,7 @@ ;; --- Query: Font Variants +(s/def ::team-id ::us/uuid) (s/def ::file-id ::us/uuid) (s/def ::project-id ::us/uuid) (s/def ::font-variants From 93726cf8fe126b3ef1de8d7300a48a90e5f537a2 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 27 Dec 2022 15:56:09 +0100 Subject: [PATCH 15/19] :bug: Fix wrong interaction between comments and panning modes --- CHANGES.md | 1 + frontend/src/app/main/data/workspace/comments.cljs | 4 ++++ frontend/src/app/main/ui/comments.cljs | 14 ++++++++++---- .../app/main/ui/workspace/viewport/actions.cljs | 11 +---------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0515b55b1..59a51a485 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -25,6 +25,7 @@ - Fix style for team invite in deutsch [Taiga #4614](https://tree.taiga.io/project/penpot/issue/4614) - Fix problem with text edition in Safari [Taiga #4046](https://tree.taiga.io/project/penpot/issue/4046) - Fix show outline with rounded corners on rects [Taiga #4053](https://tree.taiga.io/project/penpot/issue/4053) +- Fix wrong interaction between comments and panning modes [Taiga #4297](https://tree.taiga.io/project/penpot/issue/4297) - Fix bad element positioning on interaction with fixed scroll [Github #2660](https://github.com/penpot/penpot/issues/2660) - Fix display type of component library not persistent [Taiga #4512](https://tree.taiga.io/project/penpot/issue/4512) diff --git a/frontend/src/app/main/data/workspace/comments.cljs b/frontend/src/app/main/data/workspace/comments.cljs index 9c93ec83b..571e59e1f 100644 --- a/frontend/src/app/main/data/workspace/comments.cljs +++ b/frontend/src/app/main/data/workspace/comments.cljs @@ -38,6 +38,10 @@ (->> stream (rx/filter ms/mouse-click?) (rx/switch-map #(rx/take 1 ms/mouse-position)) + (rx/with-latest-from ms/keyboard-space) + (rx/tap prn) + (rx/filter (fn [[_ space]] (not space)) ) + (rx/map first) (rx/map handle-comment-layer-click) (rx/take-until stoper)) (->> stream diff --git a/frontend/src/app/main/ui/comments.cljs b/frontend/src/app/main/ui/comments.cljs index 48281ae40..d8d451307 100644 --- a/frontend/src/app/main/ui/comments.cljs +++ b/frontend/src/app/main/ui/comments.cljs @@ -104,11 +104,17 @@ :on-blur on-blur :on-focus on-focus :on-change on-change}] - (when (or @show-buttons? - (seq @content)) + (when (or @show-buttons? (seq @content)) [:div.buttons - [:input.btn-primary {:type "button" :value "Post" :on-click on-submit :disabled (str/empty-or-nil? @content)}] - [:input.btn-secondary {:type "button" :value "Cancel" :on-click on-cancel}]])])) + [:input.btn-primary + {:type "button" + :value "Post" + :on-click on-submit + :disabled (str/empty-or-nil? @content)}] + [:input.btn-secondary + {:type "button" + :value "Cancel" + :on-click on-cancel}]])])) (mf/defc draft-thread [{:keys [draft zoom on-cancel on-submit position-modifier]}] diff --git a/frontend/src/app/main/ui/workspace/viewport/actions.cljs b/frontend/src/app/main/ui/workspace/viewport/actions.cljs index 70a66fd22..0bf2505fd 100644 --- a/frontend/src/app/main/ui/workspace/viewport/actions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/actions.cljs @@ -56,7 +56,7 @@ middle-click? (and (not panning) (= 2 (.-which event)))] (cond - middle-click? + (or middle-click? (and left-click? @space?)) (do (dom/prevent-default bevent) (if mod? @@ -85,15 +85,6 @@ (when-not workspace-read-only? (st/emit! (dwdp/handle-area-selection shift?))) - (and @space? mod?) - (let [raw-pt (dom/get-client-position event) - viewport (mf/ref-val viewport-ref) - pt (utils/translate-point-to-viewport viewport zoom raw-pt)] - (st/emit! (dw/start-zooming pt))) - - @space? - (st/emit! (dw/start-panning)) - drawing-tool (when-not workspace-read-only? (st/emit! (dd/start-drawing drawing-tool))) From 00fbfd6e9e509e9e4c018859b59afe1a957bb145 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 27 Dec 2022 16:50:53 +0100 Subject: [PATCH 16/19] :bug: Fix problem when moving shape inside frame --- frontend/src/app/main/ui/shapes/frame.cljs | 5 ++--- .../ui/workspace/shapes/frame/dynamic_modifiers.cljs | 11 +++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/main/ui/shapes/frame.cljs b/frontend/src/app/main/ui/shapes/frame.cljs index 54763d8fa..7b87e065f 100644 --- a/frontend/src/app/main/ui/shapes/frame.cljs +++ b/frontend/src/app/main/ui/shapes/frame.cljs @@ -26,7 +26,7 @@ (mf/defc frame-clip-def [{:keys [shape render-id]}] - (when (= :frame (:type shape)) + (when (and (= :frame (:type shape)) (not (:show-content shape))) (let [{:keys [x y width height]} shape transform (gsh/transform-str shape) props (-> (attrs/extract-style-attrs shape) @@ -66,8 +66,7 @@ [:* [:g {:clip-path (when (not show-content) (frame-clip-url shape render-id))} - (when (not show-content) - [:& frame-clip-def {:shape shape :render-id render-id}]) + [:& frame-clip-def {:shape shape :render-id render-id}] [:& shape-fills {:shape shape} (if path? diff --git a/frontend/src/app/main/ui/workspace/shapes/frame/dynamic_modifiers.cljs b/frontend/src/app/main/ui/workspace/shapes/frame/dynamic_modifiers.cljs index 21bef0046..84a023e7b 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame/dynamic_modifiers.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame/dynamic_modifiers.cljs @@ -224,10 +224,9 @@ (mf/use-effect (mf/deps add-children) (fn [] - (doseq [{:keys [frame shape]} add-children-prev] - (let [frame-node (get-shape-node node frame) - shape-node (get-shape-node shape) - mirror-node (dom/query frame-node (dm/fmt ".mirror-shape[href='#shape-%'" shape))] + (doseq [{:keys [shape]} add-children-prev] + (let [shape-node (get-shape-node shape) + mirror-node (dom/query (dm/fmt ".mirror-shape[href='#shape-%'" shape))] (when mirror-node (.remove mirror-node)) (dom/remove-attribute! (dom/get-parent shape-node) "display"))) @@ -235,6 +234,9 @@ (let [frame-node (get-shape-node frame) shape-node (get-shape-node shape) + clip-id + (dom/get-attribute (dom/query frame-node ":scope > defs > .frame-clip-def") "id") + use-node (.createElementNS globals/document "http://www.w3.org/2000/svg" "use") @@ -242,6 +244,7 @@ (or (dom/query frame-node ".frame-children") frame-node)] (dom/set-attribute! use-node "href" (dm/fmt "#shape-%" shape)) + (dom/set-attribute! use-node "clip-path" (dm/fmt "url(#%)" clip-id)) (dom/add-class! use-node "mirror-shape") (dom/append-child! contents-node use-node) (dom/set-attribute! (dom/get-parent shape-node) "display" "none"))))) From cd2df41e87d5a7fc3e14d89ae5a65923ac87b93f Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 27 Dec 2022 17:40:13 +0100 Subject: [PATCH 17/19] :bug: Fix problems with transparent frames thumbnails --- frontend/src/app/main/ui/workspace/shapes/frame.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index 2ac96c661..fd11a1e48 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -146,5 +146,5 @@ [:g.frame-thumbnail-wrapper {:id (dm/str "thumbnail-container-" (:id shape)) ;; Hide the thumbnail when not displaying - :opacity (when (and @rendered? (not thumbnail?) (not render-frame?)) 0)} + :opacity (when-not thumbnail? 0)} thumbnail-renderer]]]))))) From aed7f0ad43b4fc50658f5161cde1b5568f511c28 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Wed, 28 Dec 2022 09:11:38 +0100 Subject: [PATCH 18/19] :bug: Fix problem when moving texts with keyboard --- CHANGES.md | 1 + .../main/ui/workspace/shapes/text/viewport_texts_html.cljs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 59a51a485..06519684b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -28,6 +28,7 @@ - Fix wrong interaction between comments and panning modes [Taiga #4297](https://tree.taiga.io/project/penpot/issue/4297) - Fix bad element positioning on interaction with fixed scroll [Github #2660](https://github.com/penpot/penpot/issues/2660) - Fix display type of component library not persistent [Taiga #4512](https://tree.taiga.io/project/penpot/issue/4512) +- Fix problem when moving texts with keyboard [#2690](https://github.com/penpot/penpot/issues/2690) ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs b/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs index b32b3dc06..7658de673 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/text/viewport_texts_html.cljs @@ -167,6 +167,10 @@ (or (and (not remote?) (not (text-properties-equal? old-shape new-shape))) + (and (not= new-modifiers old-modifiers) + (or (ctm/empty? new-modifiers) + (ctm/empty? old-modifiers))) + (and (not= new-modifiers old-modifiers) (or (not (ctm/only-move? new-modifiers)) (not (ctm/only-move? old-modifiers)))) From 074864a6bf183cb0cd66792efb95a5739f906e5b Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Wed, 28 Dec 2022 11:06:16 +0100 Subject: [PATCH 19/19] :bug: Fix problem when drawing boxes won't detect mouse-up --- CHANGES.md | 1 + .../app/main/data/workspace/drawing/box.cljs | 31 ++++++++++--------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 06519684b..07b6d810e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -29,6 +29,7 @@ - Fix bad element positioning on interaction with fixed scroll [Github #2660](https://github.com/penpot/penpot/issues/2660) - Fix display type of component library not persistent [Taiga #4512](https://tree.taiga.io/project/penpot/issue/4512) - Fix problem when moving texts with keyboard [#2690](https://github.com/penpot/penpot/issues/2690) +- Fix problem when drawing boxes won't detect mouse-up [Taiga #4618](https://tree.taiga.io/project/penpot/issue/4618) ### :arrow_up: Deps updates diff --git a/frontend/src/app/main/data/workspace/drawing/box.cljs b/frontend/src/app/main/data/workspace/drawing/box.cljs index c586af8c4..4c4c3346e 100644 --- a/frontend/src/app/main/data/workspace/drawing/box.cljs +++ b/frontend/src/app/main/data/workspace/drawing/box.cljs @@ -94,19 +94,22 @@ (rx/of #(assoc-in state [:workspace-drawing :object] shape)) ;; Initial SNAP - (->> (snap/closest-snap-point page-id [shape] objects layout zoom focus initial) - (rx/map move-drawing)) + (->> + (rx/concat + (->> (snap/closest-snap-point page-id [shape] objects layout zoom focus initial) + (rx/map move-drawing)) - (->> ms/mouse-position - (rx/filter #(> (gpt/distance % initial) (/ 2 zoom))) - (rx/with-latest vector ms/mouse-position-shift) - (rx/switch-map - (fn [[point :as current]] - (->> (snap/closest-snap-point page-id [shape] objects layout zoom focus point) - (rx/map #(conj current %))))) - (rx/map - (fn [[_ shift? point]] - #(update-drawing % initial (cond-> point snap-pixel? gpt/round) shift?))) + (->> ms/mouse-position + (rx/filter #(> (gpt/distance % initial) (/ 2 zoom))) + (rx/with-latest vector ms/mouse-position-shift) + (rx/switch-map + (fn [[point :as current]] + (->> (snap/closest-snap-point page-id [shape] objects layout zoom focus point) + (rx/map #(conj current %))))) + (rx/map + (fn [[_ shift? point]] + #(update-drawing % initial (cond-> point snap-pixel? gpt/round) shift?))))) + (rx/take-until stoper)) - (rx/take-until stoper)) - (rx/of (common/handle-finish-drawing))))))) + (->> (rx/of (common/handle-finish-drawing)) + (rx/delay 100)))))))