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

This commit is contained in:
Andrey Antukh 2024-11-25 11:50:19 +01:00
commit 5ee0399615
24 changed files with 118 additions and 418 deletions

View file

@ -226,8 +226,8 @@
[:priority {:optional true} [:enum :high :low]] [:priority {:optional true} [:enum :high :low]]
[:extra-data {:optional true} ::sm/text]]) [:extra-data {:optional true} ::sm/text]])
(def ^:private valid-context? (def ^:private check-context
(sm/validator schema:context)) (sm/check-fn schema:context))
(defn template-factory (defn template-factory
[& {:keys [id schema]}] [& {:keys [id schema]}]
@ -236,10 +236,8 @@
(sm/check-fn schema) (sm/check-fn schema)
(constantly nil))] (constantly nil))]
(fn [context] (fn [context]
(assert (valid-context? context) "expected a valid context") (let [context (-> context check-context check-fn)
(check-fn context) email (build-email-template id context)]
(let [email (build-email-template id context)]
(when-not email (when-not email
(ex/raise :type :internal (ex/raise :type :internal
:code :email-template-does-not-exists :code :email-template-does-not-exists
@ -271,7 +269,7 @@
"Schedule an already defined email to be sent using asynchronously "Schedule an already defined email to be sent using asynchronously
using worker task." using worker task."
[{:keys [::conn ::factory] :as context}] [{:keys [::conn ::factory] :as context}]
(assert (db/connection? conn) "expected a valid database connection") (assert (db/connectable? conn) "expected a valid database connection or pool")
(let [email (if factory (let [email (if factory
(factory context) (factory context)
@ -348,7 +346,7 @@
[:subject ::sm/text] [:subject ::sm/text]
[:content ::sm/text]]) [:content ::sm/text]])
(def feedback (def user-feedback
"A profile feedback email." "A profile feedback email."
(template-factory (template-factory
:id ::feedback :id ::feedback

View file

@ -17,7 +17,7 @@
[app.rpc.doc :as-alias doc] [app.rpc.doc :as-alias doc]
[app.util.services :as sv])) [app.util.services :as sv]))
(declare ^:private send-feedback!) (declare ^:private send-user-feedback!)
(def ^:private schema:send-user-feedback (def ^:private schema:send-user-feedback
[:map {:title "send-user-feedback"} [:map {:title "send-user-feedback"}
@ -34,14 +34,16 @@
:hint "feedback not enabled")) :hint "feedback not enabled"))
(let [profile (profile/get-profile pool profile-id)] (let [profile (profile/get-profile pool profile-id)]
(send-feedback! pool profile params) (send-user-feedback! pool profile params)
nil)) nil))
(defn- send-feedback! (defn- send-user-feedback!
[pool profile params] [pool profile params]
(let [dest (cf/get :feedback-destination)] (let [dest (or (cf/get :user-feedback-destination)
;; LEGACY
(cf/get :feedback-destination))]
(eml/send! {::eml/conn pool (eml/send! {::eml/conn pool
::eml/factory eml/feedback ::eml/factory eml/user-feedback
:from dest :from dest
:to dest :to dest
:profile profile :profile profile

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" stroke-linecap="round" stroke-linejoin="round">
<path d="M3.5 3.5h-2m2 0v-2m0 2h9m-9 0v9m9-9v-2m0 2h2m-2 0v9m0 0h2m-2 0v2m0-2h-9m0 0v2m0-2h-2"/>
</svg>

After

Width:  |  Height:  |  Size: 214 B

View file

@ -450,7 +450,9 @@
(ptk/reify ::update-team (ptk/reify ::update-team
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(assoc-in state [:teams id :name] name)) (-> state
(assoc-in [:teams id :name] name)
(assoc-in [:team :name] name)))
ptk/WatchEvent ptk/WatchEvent
(watch [_ _ _] (watch [_ _ _]

View file

@ -338,7 +338,7 @@
;; used to render thumbnails on assets panel. ;; used to render thumbnails on assets panel.
(mf/defc component-svg (mf/defc component-svg
{::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]}
[{:keys [objects root-shape show-grids? zoom class] :or {zoom 1} :as props}] [{:keys [objects root-shape show-grids? is-hidden zoom class] :or {zoom 1} :as props}]
(when root-shape (when root-shape
(let [root-shape-id (:id root-shape) (let [root-shape-id (:id root-shape)
include-metadata (mf/use-ctx export/include-metadata-ctx) include-metadata (mf/use-ctx export/include-metadata-ctx)
@ -381,13 +381,14 @@
:xmlns:penpot (when include-metadata "https://penpot.app/xmlns") :xmlns:penpot (when include-metadata "https://penpot.app/xmlns")
:fill "none"} :fill "none"}
(when-not is-hidden
[:* [:*
[:> shape-container {:shape root-shape'} [:> shape-container {:shape root-shape'}
[:& (mf/provider muc/is-component?) {:value true} [:& (mf/provider muc/is-component?) {:value true}
[:& root-shape-wrapper {:shape root-shape' :view-box vbox}]]] [:& root-shape-wrapper {:shape root-shape' :view-box vbox}]]]
(when show-grids? (when show-grids?
[:& empty-grids {:root-shape-id root-shape-id :objects objects}])]]))) [:& empty-grids {:root-shape-id root-shape-id :objects objects}])])])))
(mf/defc component-svg-thumbnail (mf/defc component-svg-thumbnail
{::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]} {::mf/wrap [mf/memo #(mf/deferred % ts/idle-then-raf)]}

View file

@ -9,6 +9,7 @@
[app.common.types.component :as ctk] [app.common.types.component :as ctk]
[app.common.types.shape :as cts] [app.common.types.shape :as cts]
[app.common.types.shape.layout :as ctl] [app.common.types.shape.layout :as ctl]
[app.config :as cf]
[app.main.ui.icons :as i] [app.main.ui.icons :as i]
[rumext.v2 :as mf])) [rumext.v2 :as mf]))
@ -31,7 +32,7 @@
i/flex-grid i/flex-grid
:else :else
i/board) (if (cf/external-feature-flag "boards-01" "test") i/board-2 i/board))
;; TODO -> THUMBNAIL ICON ;; TODO -> THUMBNAIL ICON
:image i/img :image i/img
:line (if (cts/has-images? shape) i/img i/path) :line (if (cts/has-images? shape) i/img i/path)
@ -56,7 +57,7 @@
(if main-instance? (if main-instance?
i/component i/component
(case type (case type
:frame i/board :frame (if (cf/external-feature-flag "boards-01" "test") i/board-2 i/board)
:image i/img :image i/img
:shape i/path :shape i/path
:text i/text :text i/text

View file

@ -73,7 +73,9 @@
{::mf/register modal/components {::mf/register modal/components
::mf/register-as :team-form} ::mf/register-as :team-form}
[{:keys [team] :as props}] [{:keys [team] :as props}]
(let [initial (mf/use-memo (fn [] (or team {}))) (let [initial (mf/use-memo (fn []
(or (some-> team (select-keys [:name :id]))
{})))
form (fm/use-form :schema schema:team-form form (fm/use-form :schema schema:team-form
:initial initial) :initial initial)
handle-keydown handle-keydown

View file

@ -63,6 +63,7 @@
(def ^:icon arrow (icon-xref :arrow)) (def ^:icon arrow (icon-xref :arrow))
(def ^:icon asc-sort (icon-xref :asc-sort)) (def ^:icon asc-sort (icon-xref :asc-sort))
(def ^:icon board (icon-xref :board)) (def ^:icon board (icon-xref :board))
(def ^:icon board-2 (icon-xref :board-2))
(def ^:icon boards-thumbnail (icon-xref :boards-thumbnail)) (def ^:icon boards-thumbnail (icon-xref :boards-thumbnail))
(def ^:icon boolean-difference (icon-xref :boolean-difference)) (def ^:icon boolean-difference (icon-xref :boolean-difference))
(def ^:icon boolean-exclude (icon-xref :boolean-exclude)) (def ^:icon boolean-exclude (icon-xref :boolean-exclude))

View file

@ -41,7 +41,7 @@
"The introduction of our brand new Plugin system allows you to access even richer ecosystem of capabilities."] "The introduction of our brand new Plugin system allows you to access even richer ecosystem of capabilities."]
[:p {:class (stl/css :feature-content)} [:p {:class (stl/css :feature-content)}
"We are beyond excitement about how this will further involve the Penpot community in building the best design and prototyping platform."] "We are beyond excited about how this will further involve the Penpot community in building the best design and prototyping platform."]
[:p {:class (stl/css :feature-content)} [:p {:class (stl/css :feature-content)}
"Lets dive in!"]] "Lets dive in!"]]
@ -69,7 +69,7 @@
"Penpot Plugins encourage developers to easily customize and expand the platform using standard web technologies like JavaScript, CSS, and HTML."] "Penpot Plugins encourage developers to easily customize and expand the platform using standard web technologies like JavaScript, CSS, and HTML."]
[:p {:class (stl/css :feature-content)} [:p {:class (stl/css :feature-content)}
"Find everything you need in ouor full comprehensive documentation to start building your plugins now!"]] "Find everything you need in our full comprehensive documentation to start building your plugins now!"]]
[:div {:class (stl/css :navigation)} [:div {:class (stl/css :navigation)}
[:& c/navigation-bullets [:& c/navigation-bullets
@ -101,7 +101,7 @@
"Be sure to keep an eye on our evolving " [:a {:href "https://penpot.app/penpothub" :target "_blank"} "Penpot Hub"] " to pick the ones that are best suited to enhance your workflow."] "Be sure to keep an eye on our evolving " [:a {:href "https://penpot.app/penpothub" :target "_blank"} "Penpot Hub"] " to pick the ones that are best suited to enhance your workflow."]
[:p {:class (stl/css :feature-content)} [:p {:class (stl/css :feature-content)}
"This is just the beginning of a myriad of possibilities. Lets build this community together <3."]] "This is just the beginning of a myriad of possibilities. Lets build this community together ❤️."]]
[:div {:class (stl/css :navigation)} [:div {:class (stl/css :navigation)}

View file

@ -24,6 +24,7 @@
[app.main.data.workspace.libraries :as dwl] [app.main.data.workspace.libraries :as dwl]
[app.main.data.workspace.shortcuts :as sc] [app.main.data.workspace.shortcuts :as sc]
[app.main.data.workspace.undo :as dwu] [app.main.data.workspace.undo :as dwu]
[app.main.data.workspace.versions :as dwv]
[app.main.features :as features] [app.main.features :as features]
[app.main.refs :as refs] [app.main.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
@ -537,6 +538,19 @@
(when (kbd/enter? event) (when (kbd/enter? event)
(on-show-version-history event)))) (on-show-version-history event))))
on-pin-version
(mf/use-fn
(mf/deps file-id)
(fn [_]
(st/emit! (dwv/create-version file-id))))
on-pin-version-key-down
(mf/use-fn
(mf/deps on-pin-version)
(fn [event]
(when (kbd/enter? event)
(on-pin-version event))))
on-export-shapes on-export-shapes
(mf/use-fn #(st/emit! (de/show-workspace-export-dialog {:origin "workspace:menu"}))) (mf/use-fn #(st/emit! (de/show-workspace-export-dialog {:origin "workspace:menu"})))
@ -599,6 +613,15 @@
[:span {:class (stl/css :item-name)} [:span {:class (stl/css :item-name)}
(tr "dashboard.add-shared")]])) (tr "dashboard.add-shared")]]))
[:div {:class (stl/css :separator)}]
[:> dropdown-menu-item* {:class (stl/css :submenu-item)
:on-click on-pin-version
:on-key-down on-pin-version-key-down
:id "file-menu-show-version-history"}
[:span {:class (stl/css :item-name)}
(tr "dashboard.create-version-menu")]]
[:> dropdown-menu-item* {:class (stl/css :submenu-item) [:> dropdown-menu-item* {:class (stl/css :submenu-item)
:on-click on-show-version-history :on-click on-show-version-history
:on-key-down on-show-version-history-key-down :on-key-down on-show-version-history-key-down
@ -606,6 +629,8 @@
[:span {:class (stl/css :item-name)} [:span {:class (stl/css :item-name)}
(tr "dashboard.show-version-history")]] (tr "dashboard.show-version-history")]]
[:div {:class (stl/css :separator)}]
[:> dropdown-menu-item* {:class (stl/css :submenu-item) [:> dropdown-menu-item* {:class (stl/css :submenu-item)
:on-click on-export-shapes :on-click on-export-shapes
:on-key-down on-export-shapes-key-down :on-key-down on-export-shapes-key-down

View file

@ -43,9 +43,12 @@
} }
.separator { .separator {
margin-top: $s-8; border-top: $s-1 solid var(--color-background-quaternary);
height: $s-4; height: $s-4;
border-top: $s-1 solid var(--color-background-secondary); left: calc(-1 * $s-4);
margin-top: $s-8;
position: relative;
width: calc(100% + $s-8);
} }
.shortcut { .shortcut {

View file

@ -237,15 +237,11 @@
[:& comments-sidebar] [:& comments-sidebar]
(true? is-history?) (true? is-history?)
[:> tab-switcher* {:tabs #js [#js {:label "History" :id "history" :content versions-tab} [:> tab-switcher*
#js {:label "Actions" :id "actions" :content history-tab}] {:tabs #js [#js {:label (tr "workspace.versions.tab.history") :id "history" :content versions-tab}
#js {:label (tr "workspace.versions.tab.actions") :id "actions" :content history-tab}]
:default-selected "history" :default-selected "history"
;;:selected (name section) :class (stl/css :left-sidebar-tabs)}]
;;:on-change-tab on-tab-change
:class (stl/css :left-sidebar-tabs)
;;:action-button-position "start"
;;:action-button (mf/html [:& collapse-button {:on-click handle-collapse}])
}]
:else :else
[:> options-toolbox props])]]])) [:> options-toolbox props])]]]))

View file

@ -113,4 +113,5 @@ $width-settings-bar-max: $s-500;
.versions-tab { .versions-tab {
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
height: calc(100vh - $s-88);
} }

View file

@ -133,23 +133,23 @@
options options
[{:name (tr "workspace.assets.box-filter-all") [{:name (tr "workspace.assets.box-filter-all")
:id "section-all" :id "all"
:handler on-section-filter-change} :handler on-section-filter-change}
{:name (tr "workspace.assets.components") {:name (tr "workspace.assets.components")
:id "section-components" :id "components"
:handler on-section-filter-change} :handler on-section-filter-change}
(when (not components-v2) (when (not components-v2)
{:name (tr "workspace.assets.graphics") {:name (tr "workspace.assets.graphics")
:id "section-graphics" :id "graphics"
:handler on-section-filter-change}) :handler on-section-filter-change})
{:name (tr "workspace.assets.colors") {:name (tr "workspace.assets.colors")
:id "section-colors" :id "colors"
:handler on-section-filter-change} :handler on-section-filter-change}
{:name (tr "workspace.assets.typography") {:name (tr "workspace.assets.typography")
:id "section-typographies" :id "typographies"
:handler on-section-filter-change}]] :handler on-section-filter-change}]]
[:article {:class (stl/css :assets-bar)} [:article {:class (stl/css :assets-bar)}

View file

@ -270,7 +270,7 @@
(mf/defc component-item-thumbnail (mf/defc component-item-thumbnail
"Component that renders the thumbnail image or the original SVG." "Component that renders the thumbnail image or the original SVG."
{::mf/props :obj} {::mf/props :obj}
[{:keys [file-id root-shape component container class]}] [{:keys [file-id root-shape component container class is-hidden]}]
(let [page-id (:main-instance-page component) (let [page-id (:main-instance-page component)
root-id (:main-instance-id component) root-id (:main-instance-id component)
retry (mf/use-state 0) retry (mf/use-state 0)
@ -290,7 +290,8 @@
(when (< @retry 3) (when (< @retry 3)
(inc retry))))] (inc retry))))]
(if (and (some? thumbnail-uri) (contains? cf/flags :component-thumbnails)) (if (and (some? thumbnail-uri)
(contains? cf/flags :component-thumbnails))
[:& component-svg-thumbnail [:& component-svg-thumbnail
{:thumbnail-uri thumbnail-uri {:thumbnail-uri thumbnail-uri
:class class :class class
@ -303,7 +304,8 @@
{:root-shape root-shape {:root-shape root-shape
:class class :class class
:objects (:objects container) :objects (:objects container)
:show-grids? true}]))) :show-grids? true
:is-hidden is-hidden}])))
(defn generate-components-menu-entries (defn generate-components-menu-entries
[shapes components-v2] [shapes components-v2]

View file

@ -171,13 +171,13 @@
(when ^boolean dragging? (when ^boolean dragging?
[:div {:class (stl/css :dragging)}])] [:div {:class (stl/css :dragging)}])]
(when visible?
[:& cmm/component-item-thumbnail {:file-id file-id [:& cmm/component-item-thumbnail {:file-id file-id
:class (stl/css-case :thumbnail true :class (stl/css-case :thumbnail true
:asset-list-thumbnail (not listing-thumbs?)) :asset-list-thumbnail (not listing-thumbs?))
:root-shape root-shape :root-shape root-shape
:component component :component component
:container container}])])])) :container container
:is-hidden (not visible?)}]])]))
(mf/defc components-group (mf/defc components-group
{::mf/wrap-props false} {::mf/wrap-props false}

View file

@ -74,14 +74,13 @@
(mf/defc file-library-content (mf/defc file-library-content
{::mf/wrap-props false} {::mf/wrap-props false}
[{:keys [file local? open-status-ref on-clear-selection]}] [{:keys [file local? open-status-ref on-clear-selection filters]}]
(let [components-v2 (mf/use-ctx ctx/components-v2) (let [components-v2 (mf/use-ctx ctx/components-v2)
open-status (mf/deref open-status-ref) open-status (mf/deref open-status-ref)
file-id (:id file) file-id (:id file)
project-id (:project-id file) project-id (:project-id file)
filters (mf/use-ctx cmm/assets-filters)
filters-section (:section filters) filters-section (:section filters)
filters-term (:term filters) filters-term (:term filters)

View file

@ -9,6 +9,7 @@
(:require (:require
[app.common.data :as d] [app.common.data :as d]
[app.common.data.macros :as dm] [app.common.data.macros :as dm]
[app.config :as cf]
[app.main.data.workspace.undo :as dwu] [app.main.data.workspace.undo :as dwu]
[app.main.refs :as refs] [app.main.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
@ -154,7 +155,7 @@
:circle i/elipse :circle i/elipse
:text i/text :text i/text
:path i/path :path i/path
:frame i/board :frame (if (cf/external-feature-flag "boards-01" "test") i/board-2 i/board)
:group i/group :group i/group
:color i/drop-icon :color i/drop-icon
:typography i/text-palette :typography i/text-palette

View file

@ -12,6 +12,7 @@
[app.common.files.helpers :as cfh] [app.common.files.helpers :as cfh]
[app.common.types.shape :as cts] [app.common.types.shape :as cts]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.config :as cf]
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
[app.main.refs :as refs] [app.main.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
@ -335,7 +336,7 @@
:on-click add-filter} :on-click add-filter}
[:div {:class (stl/css :filter-menu-item-name-wrapper)} [:div {:class (stl/css :filter-menu-item-name-wrapper)}
[:span {:class (stl/css :filter-menu-item-icon)} [:span {:class (stl/css :filter-menu-item-icon)}
i/board] (if (cf/external-feature-flag "boards-01" "test") i/board-2 i/board)]
[:span {:class (stl/css :filter-menu-item-name)} [:span {:class (stl/css :filter-menu-item-name)}
(tr "workspace.sidebar.layers.frames")]] (tr "workspace.sidebar.layers.frames")]]

View file

@ -8,6 +8,10 @@
.version-toolbox { .version-toolbox {
padding: $s-8; padding: $s-8;
height: 100%;
display: grid;
overflow: hidden;
grid-template-rows: auto auto 1fr;
} }
.versions-entry-empty { .versions-entry-empty {
@ -49,6 +53,8 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: $s-6; gap: $s-6;
overflow: auto;
margin: 0;
} }
.version-entry { .version-entry {

View file

@ -10,6 +10,7 @@
[app.common.data.macros :as dm] [app.common.data.macros :as dm]
[app.common.geom.point :as gpt] [app.common.geom.point :as gpt]
[app.common.media :as cm] [app.common.media :as cm]
[app.config :as cf]
[app.main.data.events :as ev] [app.main.data.events :as ev]
[app.main.data.modal :as modal] [app.main.data.modal :as modal]
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
@ -146,7 +147,7 @@
:on-click select-drawtool :on-click select-drawtool
:data-tool "frame" :data-tool "frame"
:data-testid "artboard-btn"} :data-testid "artboard-btn"}
i/board]] (if (cf/external-feature-flag "boards-01" "test") i/board-2 i/board)]]
[:li [:li
[:button [:button
{:title (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect)) {:title (tr "workspace.toolbar.rect" (sc/get-tooltip :draw-rect))

View file

@ -148,9 +148,7 @@
(mf/set-ref-val! internal-state initial)) (mf/set-ref-val! internal-state initial))
(mf/with-effect [initial] (mf/with-effect [initial]
(if (fn? initial) (swap! form-mutator d/deep-merge initial))
(swap! form-mutator update :data merge (initial))
(swap! form-mutator update :data merge initial)))
form-mutator)) form-mutator))

View file

@ -400,6 +400,9 @@ msgstr "Add as Shared Library"
msgid "dashboard.show-version-history" msgid "dashboard.show-version-history"
msgstr "Version history" msgstr "Version history"
msgid "dashboard.create-version-menu"
msgstr "Pin this version"
#: src/app/main/ui/settings/profile.cljs:72 #: src/app/main/ui/settings/profile.cljs:72
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Change email" msgstr "Change email"
@ -6565,179 +6568,8 @@ msgstr "Open version menu"
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"
#: src/app/main/ui/workspace/tokens/form.cljs msgid "workspace.versions.tab.history"
msgid "workspace.token.create-token" msgstr "History"
msgstr "Create new %s token"
#: src/app/main/ui/workspace/tokens/form.cljs msgid "workspace.versions.tab.actions"
msgid "workspace.token.edit-token" msgstr "Actions"
msgstr "Edit token"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.resolved-value"
msgstr "Resolved value: "
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-name"
msgstr "Name"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-name"
msgstr "Enter %s token name"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-value"
msgstr "Value"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-value"
msgstr "Enter token value or alias"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-description"
msgstr "Description"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-description"
msgstr "Add a description (optional)"
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.original-value"
msgstr "Original value: "
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.no-themes"
msgstr "There are no themes."
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.create-one"
msgstr "Create one."
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.add set"
msgstr "Add set"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.save-theme"
msgstr "Save theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.create-theme-title"
msgstr "Create theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.edit-theme-title"
msgstr "Edit theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.delete-theme-title"
msgstr "Delete theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.no-themes-currently"
msgstr "You currently have no themes."
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.create-new-theme"
msgstr "Create your first theme now."
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.new-theme"
msgstr "New theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.themes"
msgstr "Themes"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.theme-name"
msgstr "Theme %s"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.no-sets"
msgstr "No sets"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.num-sets"
msgstr "%s sets"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.back-to-themes"
msgstr "Back to theme list"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.edit-themes"
msgstr "Edit themes"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.no-active-theme"
msgstr "No theme active"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.active-themes"
msgstr "%s active themes"
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.grouping-set-alert"
msgstr "Token Set grouping is not supported yet."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.select-set"
msgstr "Select set."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.set-selection-theme"
msgstr "Define what token sets should be used as part of this theme option:"
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.no-sets-yet"
msgstr "There are no sets yet."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.no-sets-create"
msgstr "There are no sets defined yet. Create one first."
msgid "workspace.versions.button.save"
msgstr "Save version"
msgid "workspace.versions.button.pin"
msgstr "Pin version"
msgid "workspace.versions.button.restore"
msgstr "Restore version"
msgid "workspace.versions.empty"
msgstr "There are no versions yet"
msgid "workspace.versions.autosaved.version"
msgstr "Autosaved %s"
msgid "workspace.versions.autosaved.entry"
msgstr "%s autosave versions"
msgid "workspace.versions.loading"
msgstr "Loading..."
msgid "workspace.versions.filter.label"
msgstr "Versions filter"
msgid "workspace.versions.filter.all"
msgstr "All versions"
msgid "workspace.versions.filter.mine"
msgstr "My versions"
msgid "workspace.versions.filter.user"
msgstr "%s's versions"
msgid "workspace.versions.restore-warning"
msgstr "Do you want to restore this version?"
msgid "workspace.versions.snapshot-menu"
msgstr "Open snapshot menu"
msgid "workspace.versions.version-menu"
msgstr "Open version menu"
msgid "workspace.versions.expand-snapshot"
msgstr "Expand snapshots"

View file

@ -402,6 +402,9 @@ msgstr "Añadir como Biblioteca Compartida"
msgid "dashboard.show-version-history" msgid "dashboard.show-version-history"
msgstr "Histórico de versiones" msgstr "Histórico de versiones"
msgid "dashboard.create-version-menu"
msgstr "Guardar esta versión"
#: src/app/main/ui/settings/profile.cljs:72 #: src/app/main/ui/settings/profile.cljs:72
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Cambiar correo" msgstr "Cambiar correo"
@ -6561,186 +6564,8 @@ msgstr "Abrir menu de versiones"
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.maximum-invitations-by-request-reached" msgid "workspace.versions.tab.history"
msgstr "Se ha alcanzado el número máximo (%s) de correos electrónicos que se pueden invitar en una sola solicitud" msgstr "Histórico"
#: src/app/main/ui/workspace/tokens/form.cljs msgid "workspace.versions.tab.actions"
msgid "workspace.token.create-token" msgstr "Acciones"
msgstr "Crear un token de %s"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.edit-token"
msgstr "Editar token"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.resolved-value"
msgstr "Valor resuelto: "
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-name"
msgstr "Nombre"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-name"
msgstr "Introduce un nombre para el token %s"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-value"
msgstr "Valor"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-value"
msgstr "Introduce un valor o alias"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.token-description"
msgstr "Descripción"
#: src/app/main/ui/workspace/tokens/form.cljs
msgid "workspace.token.enter-token-description"
msgstr "Añade una Descripción (opcional)"
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.original-value"
msgstr "Valor original: "
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.no-themes"
msgstr "No hay temas."
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.create-one"
msgstr "Crear uno."
#: src/app/main/ui/workspace/tokens/sidebar.cljs
msgid "workspace.token.add set"
msgstr "Añadir set"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.save-theme"
msgstr "Guardar tema"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.create-theme-title"
msgstr "Crear tema"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.edit-theme-title"
msgstr "Editar tema"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.delete-theme-title"
msgstr "Borrar theme"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.no-themes-currently"
msgstr "Actualmente no existen temas."
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.create-new-theme"
msgstr "Crea un nuevo tema ahora."
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.new-theme"
msgstr "Nuevo tema"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.themes"
msgstr "Temas"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.theme-name"
msgstr "Tema %s"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.no-sets"
msgstr "No hay sets"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.num-sets"
msgstr "%s sets"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.back-to-themes"
msgstr "Volver al listado de temas"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.edit-themes"
msgstr "Editar temas"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.no-active-theme"
msgstr "No hay temas activos"
#: src/app/main/ui/workspace/tokens/theme_select.cljs
msgid "workspace.token.active-themes"
msgstr "%s temas activos"
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.grouping-set-alert"
msgstr "La agrupación de sets aun no está soportada."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.select-set"
msgstr "Selecciona set"
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.set-selection-theme"
msgstr "Define que sets de tokens deberian formar parte de este tema:"
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.no-sets"
msgstr "Aun no hay sets."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.create-one"
msgstr "Crea uno."
#: src/app/main/ui/workspace/tokens/sets.cljs
msgid "workspace.token.no-sets-create"
msgstr "Aun no hay sets definidos. Crea uno primero"
msgid "workspace.versions.button.save"
msgstr "Guardar versión"
msgid "workspace.versions.button.pin"
msgstr "Fijar versión"
msgid "workspace.versions.button.restore"
msgstr "Restaurar versión"
msgid "workspace.versions.empty"
msgstr "No hay versiones aún"
msgid "workspace.versions.autosaved.version"
msgstr "Autoguardado %s"
msgid "workspace.versions.autosaved.entry"
msgstr "%s versiones de autoguardado"
msgid "workspace.versions.loading"
msgstr "Cargando..."
msgid "workspace.versions.filter.label"
msgstr "Filtro de versiones"
msgid "workspace.versions.filter.all"
msgstr "Todas las versiones"
msgid "workspace.versions.filter.mine"
msgstr "Mis versiones"
msgid "workspace.versions.filter.user"
msgstr "Versiones de %s"
msgid "workspace.versions.restore-warning"
msgstr "¿Quieres restaurar esta versión?"
msgid "workspace.versions.snapshot-menu"
msgstr "Abrir menu de versiones"
msgid "workspace.versions.version-menu"
msgstr "Abrir menu de versiones"
msgid "workspace.versions.expand-snapshot"
msgstr "Expandir versiones"