0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-11 23:31:21 -05:00

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

This commit is contained in:
Alejandro Alonso 2022-10-17 15:21:11 +02:00
commit 10e0cf121b
18 changed files with 123 additions and 49 deletions

View file

@ -58,6 +58,10 @@
- Fix ungroup does not work for typographies [Taiga #4195](https://tree.taiga.io/project/penpot/issue/4195) - Fix ungroup does not work for typographies [Taiga #4195](https://tree.taiga.io/project/penpot/issue/4195)
- Fix inviting to non existing users can fail [Taiga #4108](https://tree.taiga.io/project/penpot/issue/4108) - Fix inviting to non existing users can fail [Taiga #4108](https://tree.taiga.io/project/penpot/issue/4108)
- Fix components marked as touched when moved [Taiga #4061](https://tree.taiga.io/project/penpot/task/4061) - Fix components marked as touched when moved [Taiga #4061](https://tree.taiga.io/project/penpot/task/4061)
- Fix boards grouped shouldn't show the title [Taiga #4251](https://tree.taiga.io/project/penpot/issue/4251)
- Fix gradient handlers are under resize handlers[Taiga #4298](https://tree.taiga.io/project/penpot/issue/4298)
- Fix grid not syncing immediately in multiuser [Taiga #4339](https://tree.taiga.io/project/penpot/issue/4339)
- Fix custom font upload fails silently for unsupported formats [Taiga #4279](https://tree.taiga.io/project/penpot/issue/4280)
### :arrow_up: Deps updates ### :arrow_up: Deps updates
### :heart: Community contributions by (Thank you!) ### :heart: Community contributions by (Thank you!)
@ -72,6 +76,8 @@
- Fix artboard border radius [Taiga #4291](https://tree.taiga.io/project/penpot/issue/4291) - Fix artboard border radius [Taiga #4291](https://tree.taiga.io/project/penpot/issue/4291)
- Fix copied & pasted layer is not visible [Taiga #4283](https://tree.taiga.io/project/penpot/issue/4283) - Fix copied & pasted layer is not visible [Taiga #4283](https://tree.taiga.io/project/penpot/issue/4283)
- Fix notification to newsletter is shown in all cases [Taiga #4367](https://tree.taiga.io/project/penpot/issue/4367)
- Fix comments section is not scrolling by mouse wheel [Taiga #4305](https://tree.taiga.io/project/penpot/issue/4305)
## 1.15.4-beta ## 1.15.4-beta

View file

@ -634,7 +634,7 @@
params {:id file-id' params {:id file-id'
:project-id project-id :project-id project-id
:name (str "Imported: " (:name file)) :name (:name file)
:revn (:revn file) :revn (:revn file)
:is-shared (:is-shared file) :is-shared (:is-shared file)
:data (blob/encode data) :data (blob/encode data)

View file

@ -1 +1,3 @@
<svg viewBox="0 0 500.00001 500.00001" xmlns="http://www.w3.org/2000/svg"><path d="m207.305 0c-6.64 0-11.987 5.345-11.987 11.984v85.393c0 6.64 5.347 11.984 11.987 11.984h85.39c6.64 0 11.987-5.343 11.987-11.983v-85.394c0-6.64-5.347-11.984-11.987-11.984zm0 195.318c-6.64 0-11.987 5.347-11.987 11.987v85.39c0 6.64 5.347 11.987 11.987 11.987h85.39c6.64 0 11.987-5.347 11.987-11.987v-85.39c0-6.64-5.347-11.987-11.987-11.987zm0 195.32c-6.64 0-11.987 5.345-11.987 11.985v85.393c0 6.64 5.347 11.984 11.987 11.984h85.39c6.64 0 11.987-5.345 11.987-11.984v-85.393c0-6.64-5.347-11.984-11.987-11.984h-85.39z"/></svg> <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="500" height="500" viewBox="0 0 132.292 132.292">
<path d="M55.563 0v21.167h21.166V0H55.563zm0 55.563v21.166h21.166V55.563H55.563zm0 55.562v21.167h21.166v-21.167H55.563z"/>
</svg>

Before

Width:  |  Height:  |  Size: 603 B

After

Width:  |  Height:  |  Size: 249 B

View file

@ -43,6 +43,13 @@
text-align: initial; text-align: initial;
} }
&.dragged {
border-radius: $br-small;
border: 2px solid lighten($color-gray-20, 15%);
text-align: initial;
max-height: 160px;
}
&.placeholder { &.placeholder {
min-width: 115px; min-width: 115px;
max-width: 115px; max-width: 115px;
@ -127,6 +134,9 @@
width: 100%; width: 100%;
white-space: nowrap; white-space: nowrap;
max-width: 260px; max-width: 260px;
&::first-letter {
text-transform: capitalize;
}
@media #{$bp-max-1366} { @media #{$bp-max-1366} {
max-width: 230px; max-width: 230px;
} }

View file

@ -25,6 +25,12 @@
} }
} }
.viewer-loader {
svg#loader-pencil {
fill: $color-gray-50;
}
}
.viewer-section { .viewer-section {
height: calc(100vh - 48px); height: calc(100vh - 48px);
grid-row: 1 / span 2; grid-row: 1 / span 2;

View file

@ -12,8 +12,11 @@
[app.common.media :as cm] [app.common.media :as cm]
[app.common.spec :as us] [app.common.spec :as us]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.main.data.messages :as dm]
[app.main.fonts :as fonts] [app.main.fonts :as fonts]
[app.main.repo :as rp] [app.main.repo :as rp]
[app.main.store :as st]
[app.util.i18n :refer [tr]]
[app.util.storage :refer [storage]] [app.util.storage :refer [storage]]
[app.util.webapi :as wa] [app.util.webapi :as wa]
[beicon.core :as rx] [beicon.core :as rx]
@ -133,17 +136,35 @@
{:data data {:data data
:name (.-name blob) :name (.-name blob)
:type (parse-mtype data)})) :type (parse-mtype data)}))
(rx/mapcat (fn [{:keys [type] :as font}] (rx/catch (fn []
(if type (rx/of {:error (.-name blob)})))
(rx/mapcat (fn [{:keys [type, error] :as font}]
(if (or type error)
(rx/of font) (rx/of font)
(rx/empty))))))] (rx/empty))))))]
(->> (rx/from blobs) (let [fonts (->> (rx/from blobs)
(rx/mapcat read-blob) (rx/mapcat read-blob))
(rx/map parse-font) errors (->> fonts
(rx/filter some?) (rx/filter #(some? (:error %)))
(rx/map prepare) (rx/reduce (fn [acc font]
(rx/reduce join {})))) (conj acc (str "'" (:error font) "'")))
[]))]
(rx/subscribe errors
#(when
(not-empty %)
(st/emit!
(dm/error
(if (> (count %) 1)
(tr "errors.bad-font-plural" (str/join ", " %))
(tr "errors.bad-font" (first %)))))))
(->> fonts
(rx/filter #(nil? (:error %)))
(rx/map parse-font)
(rx/filter some?)
(rx/map prepare)
(rx/reduce join {})))))
(defn- calculate-family-to-id-mapping (defn- calculate-family-to-id-mapping
[existing] [existing]

View file

@ -204,7 +204,8 @@
(watch [_ state stream] (watch [_ state stream]
(let [id (get-in state [:workspace-local :edition]) (let [id (get-in state [:workspace-local :edition])
current-move (get-in state [:workspace-local :edit-path id :current-move])] current-move (get-in state [:workspace-local :edit-path id :current-move])]
(if (= same-event current-move) ;; id can be null if we just selected the tool but we didn't start drawing
(if (and id (= same-event current-move))
(let [points (get-in state [:workspace-local :edit-path id :selected-points] #{}) (let [points (get-in state [:workspace-local :edit-path id :selected-points] #{})
move-events (->> stream move-events (->> stream

View file

@ -12,6 +12,7 @@
[app.common.pages.changes-spec :as pcs] [app.common.pages.changes-spec :as pcs]
[app.common.spec :as us] [app.common.spec :as us]
[app.common.types.file :as ctf] [app.common.types.file :as ctf]
[app.common.types.shape-tree :as ctst]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.config :as cf] [app.config :as cf]
[app.main.data.dashboard :as dd] [app.main.data.dashboard :as dd]
@ -219,14 +220,23 @@
(ptk/reify ::changes-persisted (ptk/reify ::changes-persisted
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(if (= file-id (:current-file-id state)) (let [changes (group-by :page-id changes)]
(-> state (if (= file-id (:current-file-id state))
(update-in [:workspace-file :revn] max revn) (-> state
(update :workspace-data cp/process-changes changes)) (update-in [:workspace-file :revn] max revn)
(-> state (update :workspace-data (fn [file]
(update-in [:workspace-libraries file-id :revn] max revn) (loop [fdata file
(update-in [:workspace-libraries file-id :data] entries (seq changes)]
cp/process-changes changes)))))) (if-let [[page-id changes] (first entries)]
(recur (-> fdata
(cp/process-changes changes)
(ctst/update-object-indices page-id))
(rest entries))
fdata)))))
(-> state
(update-in [:workspace-libraries file-id :revn] max revn)
(update-in [:workspace-libraries file-id :data]
cp/process-changes changes)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -303,8 +303,7 @@
[:div.table-field.search-input [:div.table-field.search-input
[:input {:placeholder (tr "labels.search-font") [:input {:placeholder (tr "labels.search-font")
:default-value "" :default-value ""
:on-change on-change :on-change on-change}]]]
}]]]
(cond (cond
(seq fonts) (seq fonts)

View file

@ -163,7 +163,7 @@
(let [locale (mf/deref i18n/locale) (let [locale (mf/deref i18n/locale)
time (dt/timeago modified-at {:locale locale})] time (dt/timeago modified-at {:locale locale})]
[:span.date [:span.date
(str (tr "ds.updated-at" time))])) time]))
(defn create-counter-element (defn create-counter-element
[_element file-count] [_element file-count]
@ -390,12 +390,13 @@
(mf/defc line-grid-row (mf/defc line-grid-row
[{:keys [files selected-files dragging? limit] :as props}] [{:keys [files selected-files dragging? limit] :as props}]
(let [limit (if dragging? (dec limit) limit)] (let [elements limit
limit (if dragging? (dec limit) limit)]
[:div.grid-row.no-wrap [:div.grid-row.no-wrap
{:style {:grid-template-columns (dm/str "repeat(" limit ", 1fr)")}} {:style {:grid-template-columns (dm/str "repeat(" elements ", 1fr)")}}
(when dragging? (when dragging?
[:div.grid-item]) [:div.grid-item.dragged])
(for [item (take limit files)] (for [item (take limit files)]
[:& grid-item [:& grid-item
{:id (:id item) {:id (:id item)

View file

@ -30,9 +30,10 @@
(mf/use-callback (mf/use-callback
(mf/deps @newsletter-updates @newsletter-news) (mf/deps @newsletter-updates @newsletter-news)
(fn [] (fn []
(st/emit! (dm/success message) (st/emit! (when (or @newsletter-updates @newsletter-news)
(modal/show {:type :onboarding-team}) (dm/success message))
(du/update-profile-props {:newsletter-updates @newsletter-updates :newsletter-news @newsletter-news}))))] (modal/show {:type :onboarding-team})
(du/update-profile-props {:newsletter-updates @newsletter-updates :newsletter-news @newsletter-news}))))]
[:div.modal-overlay [:div.modal-overlay
[:div.modal-container.onboarding.newsletter.animated.fadeInDown [:div.modal-container.onboarding.newsletter.animated.fadeInDown

View file

@ -534,9 +534,11 @@
(fn [] (fn []
(st/emit! (dv/finalize props))))) (st/emit! (dv/finalize props)))))
(when-let [data (mf/deref refs/viewer-data)] (if-let [data (mf/deref refs/viewer-data)]
(let [key (str (get-in data [:file :id]))] (let [key (str (get-in data [:file :id]))]
[:& viewer {:params props :data data :key key}]))) [:& viewer {:params props :data data :key key}])
[:div.loader-content.viewer-loader
i/loader-pencil]))
(mf/defc breaking-change-notice (mf/defc breaking-change-notice
[] []

View file

@ -96,7 +96,6 @@
;; REFS ;; REFS
viewport-ref (mf/use-ref nil) viewport-ref (mf/use-ref nil)
overlays-ref (mf/use-ref nil)
;; VARS ;; VARS
disable-paste (mf/use-var false) disable-paste (mf/use-var false)
@ -184,7 +183,7 @@
disabled-guides? (or drawing-tool transform)] disabled-guides? (or drawing-tool transform)]
(hooks/setup-dom-events viewport-ref overlays-ref zoom disable-paste in-viewport?) (hooks/setup-dom-events viewport-ref zoom disable-paste in-viewport?)
(hooks/setup-viewport-size viewport-ref) (hooks/setup-viewport-size viewport-ref)
(hooks/setup-cursor cursor alt? mod? space? panning drawing-tool drawing-path? node-editing?) (hooks/setup-cursor cursor alt? mod? space? panning drawing-tool drawing-path? node-editing?)
(hooks/setup-keyboard alt? mod? space?) (hooks/setup-keyboard alt? mod? space?)
@ -194,7 +193,7 @@
(hooks/setup-active-frames base-objects hover-ids selected active-frames zoom transform vbox) (hooks/setup-active-frames base-objects hover-ids selected active-frames zoom transform vbox)
[:div.viewport [:div.viewport
[:div.viewport-overlays {:ref overlays-ref} [:div.viewport-overlays
;; The behaviour inside a foreign object is a bit different that in plain HTML so we wrap ;; The behaviour inside a foreign object is a bit different that in plain HTML so we wrap
;; inside a foreign object "dummy" so this awkward behaviour is take into account ;; inside a foreign object "dummy" so this awkward behaviour is take into account
[:svg {:style {:top 0 :left 0 :position "fixed" :width "100%" :height "100%" :opacity 0}} [:svg {:style {:top 0 :left 0 :position "fixed" :width "100%" :height "100%" :opacity 0}}
@ -337,11 +336,6 @@
:on-frame-leave on-frame-leave :on-frame-leave on-frame-leave
:on-frame-select on-frame-select}]) :on-frame-select on-frame-select}])
(when show-gradient-handlers?
[:& gradients/gradient-handlers
{:id (first selected)
:zoom zoom}])
(when show-draw-area? (when show-draw-area?
[:& drawarea/draw-area [:& drawarea/draw-area
{:shape drawing-obj {:shape drawing-obj
@ -441,4 +435,9 @@
:zoom zoom :zoom zoom
:objects objects-modified :objects objects-modified
:current-transform transform :current-transform transform
:hover-disabled? hover-disabled?}])])]]])) :hover-disabled? hover-disabled?}])])
(when show-gradient-handlers?
[:& gradients/gradient-handlers
{:id (first selected)
:zoom zoom}])]]]))

View file

@ -359,18 +359,16 @@
pt (utils/translate-point-to-viewport viewport zoom raw-pt)] pt (utils/translate-point-to-viewport viewport zoom raw-pt)]
(rx/push! move-stream pt))))) (rx/push! move-stream pt)))))
(defn on-mouse-wheel [viewport-ref overlays-ref zoom] (defn on-mouse-wheel [viewport-ref zoom]
(mf/use-callback (mf/use-callback
(mf/deps zoom) (mf/deps zoom)
(fn [event] (fn [event]
(let [viewport (mf/ref-val viewport-ref) (let [viewport (mf/ref-val viewport-ref)
overlays (mf/ref-val overlays-ref)
event (.getBrowserEvent ^js event) event (.getBrowserEvent ^js event)
target (dom/get-target event) target (dom/get-target event)
mod? (kbd/mod? event)] mod? (kbd/mod? event)]
(when (or (dom/is-child? viewport target) (when (dom/is-child? viewport target)
(dom/is-child? overlays target))
(dom/prevent-default event) (dom/prevent-default event)
(dom/stop-propagation event) (dom/stop-propagation event)
(let [pt (->> (dom/get-client-position event) (let [pt (->> (dom/get-client-position event)

View file

@ -31,11 +31,11 @@
[rumext.v2 :as mf]) [rumext.v2 :as mf])
(:import goog.events.EventType)) (:import goog.events.EventType))
(defn setup-dom-events [viewport-ref overlays-ref zoom disable-paste in-viewport?] (defn setup-dom-events [viewport-ref zoom disable-paste in-viewport?]
(let [on-key-down (actions/on-key-down) (let [on-key-down (actions/on-key-down)
on-key-up (actions/on-key-up) on-key-up (actions/on-key-up)
on-mouse-move (actions/on-mouse-move viewport-ref zoom) on-mouse-move (actions/on-mouse-move viewport-ref zoom)
on-mouse-wheel (actions/on-mouse-wheel viewport-ref overlays-ref zoom) on-mouse-wheel (actions/on-mouse-wheel viewport-ref zoom)
on-paste (actions/on-paste disable-paste in-viewport?)] on-paste (actions/on-paste disable-paste in-viewport?)]
(mf/use-layout-effect (mf/use-layout-effect
(mf/deps on-key-down on-key-up on-mouse-move on-mouse-wheel on-paste) (mf/deps on-key-down on-key-up on-mouse-move on-mouse-wheel on-paste)

View file

@ -167,7 +167,7 @@
[:g.frame-titles [:g.frame-titles
(for [frame frames] (for [frame frames]
(when (= (:frame-id frame) uuid/zero) (when (= (:parent-id frame) uuid/zero)
[:& frame-title {:key (dm/str "frame-title-" (:id frame)) [:& frame-title {:key (dm/str "frame-title-" (:id frame))
:frame frame :frame frame
:selected? (contains? selected (:id frame)) :selected? (contains? selected (:id frame))

View file

@ -337,7 +337,7 @@ msgstr "Export Penpot %s files"
#: src/app/main/ui/export.cljs #: src/app/main/ui/export.cljs
msgid "dashboard.export-multiple.selected" msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elements selected" msgstr "%s of %s elements selected"
#: src/app/main/ui/workspace/header.cljs #: src/app/main/ui/workspace/header.cljs
msgid "dashboard.export-shapes" msgid "dashboard.export-shapes"
@ -4563,4 +4563,13 @@ msgid "workspace.updates.update"
msgstr "Update" msgstr "Update"
msgid "workspace.viewport.click-to-close-path" msgid "workspace.viewport.click-to-close-path"
msgstr "Click to close the path" msgstr "Click to close the path"
msgid "errors.profile-blocked"
msgstr "The profile is blocked"
msgid "errors.bad-font"
msgstr "The font %s could not be loaded"
msgid "errors.bad-font-plural"
msgstr "The fonts %s could not be loaded"

View file

@ -4778,4 +4778,13 @@ msgid "workspace.updates.update"
msgstr "Actualizar" msgstr "Actualizar"
msgid "workspace.viewport.click-to-close-path" msgid "workspace.viewport.click-to-close-path"
msgstr "Pulsar para cerrar la ruta" msgstr "Pulsar para cerrar la ruta"
msgid "errors.profile-blocked"
msgstr "El perfil esta blockeado"
msgid "errors.bad-font"
msgstr "No se ha podido cargar la fuente %s"
msgid "errors.bad-font-plural"
msgstr "No se han podido cargar las fuentes %s"