From 634fe2c458ef57c4e7af4016668df0f8e683131c Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 01:27:06 +0200 Subject: [PATCH 1/9] :paperclip: Reduce file_change preserve interval to 24h. --- backend/src/app/main.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/app/main.clj b/backend/src/app/main.clj index f0b9f6cc54..06765d5ff9 100644 --- a/backend/src/app/main.clj +++ b/backend/src/app/main.clj @@ -245,7 +245,7 @@ :app.tasks.file-xlog-gc/handler {:pool (ig/ref :app.db/pool) - :max-age (dt/duration {:hours 48})} + :max-age (dt/duration {:hours 24})} :app.tasks.telemetry/handler {:pool (ig/ref :app.db/pool) From 1a81631886c431bd24d059ec8f46f444945b8c77 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 09:41:42 +0200 Subject: [PATCH 2/9] :paperclip: Decrease default bulk buffers on storage tasks. --- backend/src/app/storage.clj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/app/storage.clj b/backend/src/app/storage.clj index b67c2b215a..0b1c1ffe15 100644 --- a/backend/src/app/storage.clj +++ b/backend/src/app/storage.clj @@ -319,7 +319,7 @@ where s.deleted_at is not null and s.deleted_at < (now() - ?::interval) order by s.deleted_at - limit 500 + limit 100 ) delete from storage_object where id in (select id from items_part) @@ -396,7 +396,7 @@ from storage_object as so where so.touched_at is not null order by so.touched_at - limit 500;") + limit 100;") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Recheck Stalled Task From 8c68e29bf3237e80b3c2f534717804f01bd3f90a Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 13:17:35 +0200 Subject: [PATCH 3/9] :bug: Fix custom font rendering on exporting shapes. --- backend/src/app/rpc/queries/fonts.clj | 44 +++++++++++++++++++ common/app/common/geom/shapes/transforms.cljc | 6 +-- frontend/src/app/main/data/fonts.cljs | 6 +-- frontend/src/app/main/exports.cljs | 24 +++++----- frontend/src/app/main/repo.cljs | 2 +- frontend/src/app/main/ui/render.cljs | 30 ++++++++++--- .../src/app/main/ui/shapes/text/embed.cljs | 14 ++---- .../app/main/ui/workspace/shapes/frame.cljs | 23 +++++----- 8 files changed, 100 insertions(+), 49 deletions(-) diff --git a/backend/src/app/rpc/queries/fonts.clj b/backend/src/app/rpc/queries/fonts.clj index b25c780f50..117de3e911 100644 --- a/backend/src/app/rpc/queries/fonts.clj +++ b/backend/src/app/rpc/queries/fonts.clj @@ -8,12 +8,16 @@ (:require [app.common.spec :as us] [app.db :as db] + [app.rpc.queries.files :as files] + [app.rpc.queries.projects :as projects] [app.rpc.queries.teams :as teams] [app.util.services :as sv] [clojure.spec.alpha :as s])) ;; --- Query: Team Font Variants +;; TODO: deprecated, should be removed on 1.7.x + (s/def ::team-id ::us/uuid) (s/def ::profile-id ::us/uuid) (s/def ::team-font-variants @@ -27,3 +31,43 @@ {:team-id team-id :deleted-at nil}))) +;; --- Query: Font Variants + +(s/def ::file-id ::us/uuid) +(s/def ::project-id ::us/uuid) +(s/def ::font-variants + (s/and + (s/keys :req-un [::profile-id] + :opt-un [::team-id + ::file-id + ::project-id]) + (fn [o] + (or (contains? o :team-id) + (contains? o :file-id) + (contains? o :project-id))))) + +(sv/defmethod ::font-variants + [{:keys [pool] :as cfg} {:keys [profile-id team-id file-id project-id] :as params}] + (with-open [conn (db/open pool)] + (cond + (uuid? team-id) + (do + (teams/check-read-permissions! conn profile-id team-id) + (db/query conn :team-font-variant + {:team-id team-id + :deleted-at nil})) + + (uuid? project-id) + (let [project (db/get-by-id conn :project project-id {:columns [:id :team-id]})] + (projects/check-read-permissions! conn profile-id project-id) + (db/query conn :team-font-variant + {:team-id (:team-id project) + :deleted-at nil})) + + (uuid? file-id) + (let [file (db/get-by-id conn :file file-id {:columns [:id :project-id]}) + project (db/get-by-id conn :project (:project-id file) {:columns [:id :team-id]})] + (files/check-read-permissions! conn profile-id file-id) + (db/query conn :team-font-variant + {:team-id (:team-id project) + :deleted-at nil}))))) diff --git a/common/app/common/geom/shapes/transforms.cljc b/common/app/common/geom/shapes/transforms.cljc index 0c7b8183d8..5f57aaec38 100644 --- a/common/app/common/geom/shapes/transforms.cljc +++ b/common/app/common/geom/shapes/transforms.cljc @@ -356,8 +356,8 @@ ([shape {:keys [round-coords?] :or {round-coords? true}}] - (let [shape (apply-displacement shape) - center (gco/center-shape shape) + (let [shape (apply-displacement shape) + center (gco/center-shape shape) modifiers (:modifiers shape)] (if (and modifiers center) (let [transform (modifiers->transform center modifiers)] @@ -376,7 +376,7 @@ :y (- (:y new-selrect 0) (:y selrect 0)) :width (- (:width new-selrect 1) (:width selrect 1)) :height (- (:height new-selrect 1) (:height selrect 1))}] - + (cond-> group (and (some? svg-viewbox) (some? selrect) (some? new-selrect)) (update :svg-viewbox diff --git a/frontend/src/app/main/data/fonts.cljs b/frontend/src/app/main/data/fonts.cljs index e6cbfe8150..5acec3b8dc 100644 --- a/frontend/src/app/main/data/fonts.cljs +++ b/frontend/src/app/main/data/fonts.cljs @@ -25,7 +25,7 @@ ;; General purpose events & IMPL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defn team-fonts-loaded +(defn fonts-fetched [fonts] (letfn [;; Prepare font to the internal font database format. (prepare-font [[id [item :as items]]] @@ -74,8 +74,8 @@ (ptk/reify ::load-team-fonts ptk/WatchEvent (watch [_ state stream] - (->> (rp/query :team-font-variants {:team-id team-id}) - (rx/map team-fonts-loaded))))) + (->> (rp/query :font-variants {:team-id team-id}) + (rx/map fonts-fetched))))) (defn process-upload "Given a seq of blobs and the team id, creates a ready-to-use fonts diff --git a/frontend/src/app/main/exports.cljs b/frontend/src/app/main/exports.cljs index aa5e08c213..77ab799186 100644 --- a/frontend/src/app/main/exports.cljs +++ b/frontend/src/app/main/exports.cljs @@ -7,26 +7,26 @@ (ns app.main.exports "The main logic for SVG export functionality." (:require - [rumext.alpha :as mf] - [cuerdas.core :as str] - [app.common.uuid :as uuid] - [app.common.pages :as cp] - [app.common.math :as mth] - [app.common.geom.shapes :as gsh] [app.common.geom.align :as gal] - [app.common.geom.point :as gpt] [app.common.geom.matrix :as gmt] - [app.util.timers :as ts] + [app.common.geom.point :as gpt] + [app.common.geom.shapes :as gsh] + [app.common.math :as mth] + [app.common.pages :as cp] + [app.common.uuid :as uuid] + [app.main.ui.shapes.circle :as circle] [app.main.ui.shapes.filters :as filters] [app.main.ui.shapes.frame :as frame] - [app.main.ui.shapes.circle :as circle] + [app.main.ui.shapes.group :as group] [app.main.ui.shapes.image :as image] [app.main.ui.shapes.path :as path] [app.main.ui.shapes.rect :as rect] - [app.main.ui.shapes.text :as text] - [app.main.ui.shapes.group :as group] + [app.main.ui.shapes.shape :refer [shape-container]] [app.main.ui.shapes.svg-raw :as svg-raw] - [app.main.ui.shapes.shape :refer [shape-container]])) + [app.main.ui.shapes.text :as text] + [app.util.timers :as ts] + [cuerdas.core :as str] + [rumext.alpha :as mf])) (def ^:private default-color "#E8E9EA") ;; $color-canvas diff --git a/frontend/src/app/main/repo.cljs b/frontend/src/app/main/repo.cljs index 36d935ffb5..e2405a8d7f 100644 --- a/frontend/src/app/main/repo.cljs +++ b/frontend/src/app/main/repo.cljs @@ -20,7 +20,7 @@ (cond (= 204 status) ;; We need to send "something" so the streams listening downstream can act - (rx/of :empty) + (rx/of nil) (= 502 status) (rx/throw {:type :bad-gateway}) diff --git a/frontend/src/app/main/ui/render.cljs b/frontend/src/app/main/ui/render.cljs index 1060de4d39..c56e85a983 100644 --- a/frontend/src/app/main/ui/render.cljs +++ b/frontend/src/app/main/ui/render.cljs @@ -12,11 +12,14 @@ [app.common.math :as mth] [app.common.pages :as cp] [app.common.uuid :as uuid] + [app.main.store :as st] + [app.main.data.fonts :as df] [app.main.exports :as exports] [app.main.repo :as repo] [app.main.ui.context :as muc] [app.main.ui.shapes.filters :as filters] [app.main.ui.shapes.shape :refer [shape-container]] + [app.main.ui.shapes.text.embed :refer [embed-fontfaces-style]] [beicon.core :as rx] [cljs.spec.alpha :as s] [cuerdas.core :as str] @@ -42,6 +45,9 @@ objects (reduce updt-fn objects mod-ids) object (get objects object-id) + txt-xfm (comp (map #(get objects %)) + (filter #(= :text (:type %)))) + txt-objs (into [] txt-xfm mod-ids) {:keys [width height]} (gsh/points->selrect (:points object)) @@ -72,6 +78,9 @@ ] [:& (mf/provider muc/embed-ctx) {:value true} + (when (seq txt-objs) + [:& embed-fontfaces-style {:shapes txt-objs}]) + [:svg {:id "screenshot" :view-box vbox :width width @@ -79,6 +88,7 @@ :version "1.1" :xmlnsXlink "http://www.w3.org/1999/xlink" :xmlns "http://www.w3.org/2000/svg"} + (case (:type object) :frame [:& frame-wrapper {:shape object :view-box vbox}] :group [:> shape-container {:shape object} @@ -97,7 +107,6 @@ (assoc objects (:id object) object)) objects)) - ;; NOTE: for now, it is ok download the entire file for render only ;; single page but in a future we need consider to add a specific ;; backend entry point for download only the data of single page. @@ -106,12 +115,19 @@ [{:keys [file-id page-id object-id] :as props}] (let [objects (mf/use-state nil)] (mf/use-effect - #(let [subs (->> (repo/query! :file {:id file-id}) - (rx/subs (fn [{:keys [data]}] - (let [objs (get-in data [:pages-index page-id :objects]) - objs (adapt-root-frame objs object-id)] - (reset! objects objs)))))] - (fn [] (rx/dispose! subs)))) + (mf/deps file-id page-id object-id) + (fn [] + (->> (rx/zip + (repo/query! :font-variants {:file-id file-id}) + (repo/query! :file {:id file-id})) + (rx/subs + (fn [[fonts {:keys [data]} :as kaka]] + (when (seq fonts) + (st/emit! (df/fonts-fetched fonts))) + (let [objs (get-in data [:pages-index page-id :objects]) + objs (adapt-root-frame objs object-id)] + (reset! objects objs))))) + (constantly nil))) (when @objects [:& object-svg {:objects @objects diff --git a/frontend/src/app/main/ui/shapes/text/embed.cljs b/frontend/src/app/main/ui/shapes/text/embed.cljs index dde62afd55..22999cd32a 100644 --- a/frontend/src/app/main/ui/shapes/text/embed.cljs +++ b/frontend/src/app/main/ui/shapes/text/embed.cljs @@ -86,12 +86,6 @@ :weight weight})] (p/resolved result)))) -(defn- to-promise - [observable] - (p/create (fn [resolve reject] - (->> (rx/take 1 observable) - (rx/subs resolve reject))))) - (defn fetch-font-data "Parses the CSS and retrieves the font data as DataURI." [^string css] @@ -137,10 +131,10 @@ {::mf/wrap-props false ::mf/wrap [#(mf/memo' % (mf/check-props ["shapes"]))]} [props] - (let [shapes (obj/get props "shapes") - node {:children (->> shapes (map :content))} - fonts (-> node get-node-fonts memoize) - style (mf/use-state nil)] + (let [shapes (obj/get props "shapes") + node {:children (->> shapes (map :content))} + fonts (-> node get-node-fonts memoize) + style (mf/use-state nil)] (mf/use-effect (mf/deps fonts) diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index 8875ba6e5d..b6744c3469 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -102,23 +102,20 @@ {::mf/wrap [#(mf/memo' % check-frame-props) custom-deferred] ::mf/wrap-props false} [props] - (let [shape (unchecked-get props "shape") - objects (unchecked-get props "objects") - thumbnail? (unchecked-get props "thumbnail?") + (let [shape (unchecked-get props "shape") + objects (unchecked-get props "objects") + thumbnail? (unchecked-get props "thumbnail?") - edition (mf/deref refs/selected-edition) + edition (mf/deref refs/selected-edition) embed-fonts? (mf/use-ctx muc/embed-ctx) - shape (gsh/transform-shape shape) - children (mapv #(get objects %) (:shapes shape)) - text-childs (->> objects - vals - (filterv #(and (= :text (:type %)) - (= (:id shape) (:frame-id %))))) + shape (gsh/transform-shape shape) + children (mapv #(get objects %) (:shapes shape)) + text-childs (->> (vals objects) + (filterv #(and (= :text (:type %)) + (= (:id shape) (:frame-id %))))) - ds-modifier (get-in shape [:modifiers :displacement]) - - rendered? (mf/use-state false) + rendered? (mf/use-state false) show-thumbnail? (and thumbnail? (some? (:thumbnail shape))) From 8a700170b0637caf29b7af3e9f2b84a90fc76dd1 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 13:33:50 +0200 Subject: [PATCH 4/9] :bug: Fix font loading on viewer app. --- backend/src/app/rpc/queries/viewer.clj | 5 +++++ frontend/src/app/main/data/viewer.cljs | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/backend/src/app/rpc/queries/viewer.clj b/backend/src/app/rpc/queries/viewer.clj index 3ed2bbbc5c..f346e53efa 100644 --- a/backend/src/app/rpc/queries/viewer.clj +++ b/backend/src/app/rpc/queries/viewer.clj @@ -50,9 +50,14 @@ libs (files/retrieve-file-libraries conn false file-id) users (teams/retrieve-users conn (:team-id project)) + fonts (db/query conn :team-font-variant + {:team-id (:team-id project) + :deleted-at nil}) + bundle {:file file :page page :users users + :fonts fonts :project project :libraries libs}] diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index 99e42310e2..c4eb652924 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -12,9 +12,10 @@ [app.common.spec :as us] [app.common.uuid :as uuid] [app.main.constants :as c] + [app.main.data.comments :as dcm] + [app.main.data.fonts :as df] [app.main.repo :as rp] [app.main.store :as st] - [app.main.data.comments :as dcm] [app.util.avatars :as avatars] [app.util.router :as rt] [beicon.core :as rx] @@ -97,7 +98,10 @@ :file-id file-id} (string? token) (assoc :token token))] (->> (rp/query :viewer-bundle params) - (rx/map bundle-fetched)))))) + (rx/mapcat + (fn [{:keys [fonts] :as bundle}] + (rx/of (df/fonts-fetched fonts) + (bundle-fetched bundle))))))))) (defn- extract-frames [objects] From d2359046c4cda7ea834e4bcff90800fb01e4cc33 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 13:41:33 +0200 Subject: [PATCH 5/9] :bug: Fix problem when moving files with drag & drop. --- frontend/src/app/main/ui/dashboard/grid.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index b6a8b10d25..3afa25470d 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -329,7 +329,7 @@ (fn [e] (reset! dragging? false) (when (not= selected-project project-id) - (let [data {:ids selected-files + (let [data {:ids (into #{} (keys selected-files)) :project-id project-id} mdata {:on-success on-drop-success}] (st/emit! (dd/move-files (with-meta data mdata)))))))] From 17b32d651897f2b1d019a6590995ae761a7da66f Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 13:44:24 +0200 Subject: [PATCH 6/9] :bug: Don't allow rename drafts project. --- frontend/src/app/main/ui/dashboard/project_menu.cljs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/ui/dashboard/project_menu.cljs b/frontend/src/app/main/ui/dashboard/project_menu.cljs index 946478a090..8ea8b4132b 100644 --- a/frontend/src/app/main/ui/dashboard/project_menu.cljs +++ b/frontend/src/app/main/ui/dashboard/project_menu.cljs @@ -79,7 +79,8 @@ :min-width? true :top top :left left - :options [[(tr "labels.rename") on-edit] + :options [(when-not (:is-default project) + [(tr "labels.rename") on-edit]) [(tr "dashboard.duplicate") on-duplicate] [(tr "dashboard.pin-unpin") toggle-pin] (when (seq teams) From b861e261ed269c358eaf9ca57094673a52197f75 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 13:46:43 +0200 Subject: [PATCH 7/9] :bug: Replace frame term usage by artboard on viewer app. Replace frame with artboard. --- frontend/src/app/main/ui/viewer/thumbnails.cljs | 2 +- frontend/translations/en.po | 9 +++++++-- frontend/translations/es.po | 5 +++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/main/ui/viewer/thumbnails.cljs b/frontend/src/app/main/ui/viewer/thumbnails.cljs index f2942eae81..66bf403b0b 100644 --- a/frontend/src/app/main/ui/viewer/thumbnails.cljs +++ b/frontend/src/app/main/ui/viewer/thumbnails.cljs @@ -75,7 +75,7 @@ (mf/defc thumbnails-summary [{:keys [on-toggle-expand on-close total] :as props}] [:div.thumbnails-summary - [:span.counter (str total " frames")] + [:span.counter (tr "labels.num-of-frames" (i18n/c total))] [:span.buttons [:span.btn-expand {:on-click on-toggle-expand} i/arrow-down] [:span.btn-close {:on-click on-close} i/close]]]) diff --git a/frontend/translations/en.po b/frontend/translations/en.po index a0cd82b375..323724446c 100644 --- a/frontend/translations/en.po +++ b/frontend/translations/en.po @@ -981,6 +981,11 @@ msgid_plural "labels.num-of-files" msgstr[0] "1 file" msgstr[1] "%s files" +msgid "labels.num-of-frames" +msgid_plural "labels.num-of-frames" +msgstr[0] "1 artboard" +msgstr[1] "%s artboards" + #: src/app/main/ui/dashboard/team.cljs msgid "labels.num-of-projects" msgid_plural "labels.num-of-projects" @@ -1438,11 +1443,11 @@ msgstr "%s - Penpot" #: src/app/main/ui/handoff.cljs, src/app/main/ui/viewer.cljs msgid "viewer.empty-state" -msgstr "No frames found on the page." +msgstr "No artboards found on the page." #: src/app/main/ui/handoff.cljs, src/app/main/ui/viewer.cljs msgid "viewer.frame-not-found" -msgstr "Frame not found." +msgstr "Artboard not found." #: src/app/main/ui/viewer/header.cljs msgid "viewer.header.dont-show-interactions" diff --git a/frontend/translations/es.po b/frontend/translations/es.po index 7063b56497..b3a28baf65 100644 --- a/frontend/translations/es.po +++ b/frontend/translations/es.po @@ -983,6 +983,11 @@ msgid_plural "labels.num-of-files" msgstr[0] "1 archivo" msgstr[1] "%s archivos" +msgid "labels.num-of-frames" +msgid_plural "labels.num-of-frames" +msgstr[0] "1 tablero" +msgstr[1] "%s tableros" + #: src/app/main/ui/dashboard/team.cljs msgid "labels.num-of-projects" msgid_plural "labels.num-of-projects" From 781975775918ac0880a9499460b7062e4bf9556e Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 14:01:05 +0200 Subject: [PATCH 8/9] :bug: Fix unexpected exception on searching without term. When term is empty on frontend, frontend just does not sends it to backend, leving it as missing field. This commit makes the seatch-term as optional. --- backend/src/app/rpc/queries/files.clj | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/src/app/rpc/queries/files.clj b/backend/src/app/rpc/queries/files.clj index 3fa8578924..dd36c64134 100644 --- a/backend/src/app/rpc/queries/files.clj +++ b/backend/src/app/rpc/queries/files.clj @@ -112,14 +112,16 @@ order by f.created_at asc") (s/def ::search-files - (s/keys :req-un [::profile-id ::team-id ::search-term])) + (s/keys :req-un [::profile-id ::team-id] + :opt-un [::search-term])) (sv/defmethod ::search-files [{:keys [pool] :as cfg} {:keys [profile-id team-id search-term] :as params}] - (db/exec! pool [sql:search-files - profile-id team-id - profile-id team-id - search-term])) + (when search-term + (db/exec! pool [sql:search-files + profile-id team-id + profile-id team-id + search-term]))) ;; --- Query: Files From bb5804cde390df75d8d4c7f1c8b138b0c26beeda Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 4 Jun 2021 14:05:46 +0200 Subject: [PATCH 9/9] :paperclip: Update changelog and increase version. --- CHANGES.md | 20 +++++++++++++++++++- version.txt | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c969a55857..d77a83c85d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,5 @@ # CHANGELOG # - ## :rocket: Next ### :sparkles: New features @@ -10,6 +9,25 @@ ### :boom: Breaking changes ### :heart: Community contributions by (Thank you!) +## 1.6.4-alpha + +### :sparkles: Minor improvements + +- Decrease default bulk buffers on storage tasks. +- Reduce file_change preserve interval to 24h. + +### :bug: Bugs fixed + +- Don't allow rename drafts project. +- Fix custom font deletion task. +- Fix custom font rendering on exporting shapes. +- Fix font loading on viewer app. +- Fix problem when moving files with drag & drop. +- Fix unexpected exception on searching without term. +- Properly handle nil values on `update-shapes` function. +- Replace frame term usage by artboard on viewer app. + + ## 1.6.3-alpha ### :bug: Bugs fixed diff --git a/version.txt b/version.txt index 231f4811db..0952b20357 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.6.3-alpha +1.6.4-alpha