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:
commit
10e0cf121b
18 changed files with 123 additions and 49 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 |
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)))))))
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -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}])]]]))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Add table
Reference in a new issue