mirror of
https://github.com/penpot/penpot.git
synced 2026-01-10 07:18:56 -05:00
Compare commits
22 Commits
hiru-add-v
...
mavalroot-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5341c0378 | ||
|
|
1470f7c18b | ||
|
|
2b836f10cb | ||
|
|
1ae0f3fc87 | ||
|
|
e13c203b8d | ||
|
|
90efb665b5 | ||
|
|
47ee490158 | ||
|
|
f0f89599bc | ||
|
|
b0dc7d6ffb | ||
|
|
b7cd315872 | ||
|
|
743d4e5c8d | ||
|
|
97e4f4c424 | ||
|
|
fb9560c315 | ||
|
|
d53c090900 | ||
|
|
621e030095 | ||
|
|
157e4aa2d0 | ||
|
|
7cd2308f3b | ||
|
|
c315a15b48 | ||
|
|
8a3e6d026e | ||
|
|
0dd062d011 | ||
|
|
bfbb546699 | ||
|
|
083e77e9c5 |
2
.github/workflows/build-tag.yml
vendored
2
.github/workflows/build-tag.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }}
|
||||
MATTERMOST_CHANNEL: bot-alerts-cicd
|
||||
TEXT: |
|
||||
🐳 *[PENPOT] Docker image available: ${{ github.ref_name }}*
|
||||
🐳 *[PENPOT] Docker image available: {{ github.ref_name }}*
|
||||
🔗 Run: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||
@infra
|
||||
|
||||
|
||||
2
.github/workflows/commit-checker.yml
vendored
2
.github/workflows/commit-checker.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
- name: Check Commit Type
|
||||
uses: gsactions/commit-message-checker@v2
|
||||
with:
|
||||
pattern: '^(((:(lipstick|globe_with_meridians|wrench|books|arrow_up|arrow_down|zap|ambulance|construction|boom|fire|whale|bug|sparkles|paperclip|tada|recycle|rewind|construction_worker):)\s[A-Z].*[^.])|(Merge|Revert|Reapply).+[^.])$'
|
||||
pattern: '^(((:(lipstick|globe_with_meridians|wrench|books|arrow_up|arrow_down|zap|ambulance|construction|boom|fire|whale|bug|sparkles|paperclip|tada|recycle|rewind|construction_worker):)\s[A-Z].*[^.])|(Merge|Revert).+[^.])$'
|
||||
flags: 'gm'
|
||||
error: 'Commit should match CONTRIBUTING.md guideline'
|
||||
checkAllCommitMessages: 'true' # optional: this checks all commits associated with a pull request
|
||||
|
||||
19
CHANGES.md
19
CHANGES.md
@@ -1,18 +1,5 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 2.14.0 (Unreleased)
|
||||
|
||||
### :boom: Breaking changes & Deprecations
|
||||
|
||||
### :rocket: Epics and highlights
|
||||
|
||||
### :heart: Community contributions (Thank you!)
|
||||
|
||||
### :sparkles: New features & Enhancements
|
||||
|
||||
### :bug: Bugs fixed
|
||||
|
||||
|
||||
## 2.13.0 (Unreleased)
|
||||
|
||||
### :boom: Breaking changes & Deprecations
|
||||
@@ -36,6 +23,12 @@
|
||||
- Fix wrong board size presets in Android [Taiga #12339](https://tree.taiga.io/project/penpot/issue/12339)
|
||||
- Fix problem with grid layout components and auto sizing [Github #7797](https://github.com/penpot/penpot/issues/7797)
|
||||
- Fix some alignments on inspect tab [Taiga #12915](https://tree.taiga.io/project/penpot/issue/12915)
|
||||
- Fix color assets from shared libraries not appearing as assets in Selected colors panel [Taiga #12957](https://tree.taiga.io/project/penpot/issue/12957)
|
||||
- Fix CSS generated box-shadow property [Taiga #12997](https://tree.taiga.io/project/penpot/issue/12997)
|
||||
- Fix inner shadow selector on shadow token [Taiga #12951](https://tree.taiga.io/project/penpot/issue/12951)
|
||||
- Fix missing text color token from selected shapes in selected colors list [Taiga #12956](https://tree.taiga.io/project/penpot/issue/12956)
|
||||
- Fix dropdown option width in Guides columns dropdown [Taiga #12959](https://tree.taiga.io/project/penpot/issue/12959)
|
||||
- Fix typos on download modal [Taiga #12865](https://tree.taiga.io/project/penpot/issue/12865)
|
||||
|
||||
|
||||
## 2.12.1
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
|
||||
:jmx-remote
|
||||
{:jvm-opts ["-Dcom.sun.management.jmxremote"
|
||||
"-Dcom.sun.management.jmxremote.port=9090"
|
||||
"-Dcom.sun.management.jmxremote.rmi.port=9090"
|
||||
"-Dcom.sun.management.jmxremote.port=9000"
|
||||
"-Dcom.sun.management.jmxremote.rmi.port=9000"
|
||||
"-Dcom.sun.management.jmxremote.local.only=false"
|
||||
"-Dcom.sun.management.jmxremote.authenticate=false"
|
||||
"-Dcom.sun.management.jmxremote.ssl=false"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
inner join team_profile_rel as tpr on (tpr.team_id = p.team_id)
|
||||
where tpr.profile_id = ?
|
||||
and p.team_id = ?
|
||||
and (p.deleted_at is null or p.deleted_at > now())
|
||||
and (p.deleted_at is null)
|
||||
and (tpr.is_admin = true or
|
||||
tpr.is_owner = true or
|
||||
tpr.can_edit = true)
|
||||
@@ -29,7 +29,7 @@
|
||||
inner join project_profile_rel as ppr on (ppr.project_id = p.id)
|
||||
where ppr.profile_id = ?
|
||||
and p.team_id = ?
|
||||
and (p.deleted_at is null or p.deleted_at > now())
|
||||
and (p.deleted_at is null)
|
||||
and (ppr.is_admin = true or
|
||||
ppr.is_owner = true or
|
||||
ppr.can_edit = true)
|
||||
@@ -47,7 +47,7 @@
|
||||
left join file_thumbnail as ft on (ft.file_id = f.id and ft.revn = f.revn)
|
||||
inner join projects as pr on (f.project_id = pr.id)
|
||||
where f.name ilike ('%' || ? || '%')
|
||||
and (f.deleted_at is null or f.deleted_at > now())
|
||||
and (f.deleted_at is null)
|
||||
order by f.created_at asc")
|
||||
|
||||
(defn search-files
|
||||
|
||||
@@ -1766,59 +1766,6 @@
|
||||
(update :pages-index d/update-vals update-container)
|
||||
(d/update-when :components d/update-vals update-container))))
|
||||
|
||||
(defmethod migrate-data "0017-remove-unneeded-objects-from-components"
|
||||
[data _]
|
||||
;; Some components have an `:objects` attribute, despite not being
|
||||
;; deleted. This migration removes it.
|
||||
(letfn [(check-component [component]
|
||||
(if (and (not (:deleted component))
|
||||
(contains? component :objects))
|
||||
(dissoc component :objects)
|
||||
component))]
|
||||
(d/update-when data :components d/update-vals check-component)))
|
||||
|
||||
(defmethod migrate-data "0018-sync-component-id-with-near-main"
|
||||
[data _]
|
||||
(let [libs (some-> (:libs data) deref)]
|
||||
(letfn [(fix-shape
|
||||
[data page shape]
|
||||
(if (and (ctk/subcopy-head? shape)
|
||||
(nil? (ctk/get-swap-slot shape)))
|
||||
(let [file {:id (:id data) :data data}
|
||||
ref-shape (ctf/find-ref-shape file page libs shape {:include-deleted? true :with-context? true})]
|
||||
(if (and (some? ref-shape)
|
||||
(or (not= (:component-id shape) (:component-id ref-shape))
|
||||
(not= (:component-file shape) (:component-file ref-shape))))
|
||||
(cond-> shape
|
||||
(some? (:component-id ref-shape))
|
||||
(assoc :component-id (:component-id ref-shape))
|
||||
|
||||
(nil? (:component-id ref-shape))
|
||||
(dissoc :component-id)
|
||||
|
||||
(some? (:component-file ref-shape))
|
||||
(assoc :component-file (:component-file ref-shape))
|
||||
|
||||
(nil? (:component-file ref-shape))
|
||||
(dissoc :component-file))
|
||||
shape))
|
||||
shape))
|
||||
|
||||
(update-page
|
||||
[data page]
|
||||
(d/update-when page :objects d/update-vals (partial fix-shape data page)))
|
||||
|
||||
(fix-data [data]
|
||||
(loop [current-data data
|
||||
iteration 0]
|
||||
(let [next-data (update current-data :pages-index d/update-vals (partial update-page current-data))]
|
||||
(if (or (= current-data next-data)
|
||||
(> iteration 20)) ;; safety bound
|
||||
next-data
|
||||
(recur next-data (inc iteration))))))]
|
||||
(fix-data data))))
|
||||
|
||||
|
||||
(def available-migrations
|
||||
(into (d/ordered-set)
|
||||
["legacy-2"
|
||||
@@ -1892,6 +1839,4 @@
|
||||
"0014-clear-components-nil-objects"
|
||||
"0015-fix-text-attrs-blank-strings"
|
||||
"0015-clean-shadow-color"
|
||||
"0016-copy-fills-from-position-data-to-text-node"
|
||||
"0017-remove-unneeded-objects-from-components"
|
||||
"0018-sync-component-id-with-near-main"]))
|
||||
"0016-copy-fills-from-position-data-to-text-node"]))
|
||||
|
||||
@@ -333,31 +333,6 @@
|
||||
(pcb/with-file-data file-data)
|
||||
(pcb/update-shapes [(:id shape)] repair-shape))))
|
||||
|
||||
(defmethod repair-error :component-id-mismatch
|
||||
[_ {:keys [shape page-id args] :as error} file-data _]
|
||||
(let [repair-shape
|
||||
(fn [shape]
|
||||
; Set the component-id and component-file to the ones of the near main
|
||||
(log/debug :hint (str " -> set component-id to " (:component-id args)))
|
||||
(log/debug :hint (str " -> set component-file to " (:component-file args)))
|
||||
(cond-> shape
|
||||
(some? (:component-id args))
|
||||
(assoc :component-id (:component-id args))
|
||||
|
||||
(nil? (:component-id args))
|
||||
(dissoc :component-id)
|
||||
|
||||
(some? (:component-file args))
|
||||
(assoc :component-file (:component-file args))
|
||||
|
||||
(nil? (:component-file args))
|
||||
(dissoc :component-file)))]
|
||||
|
||||
(log/dbg :hint "repairing shape :component-id-mismatch" :id (:id shape) :name (:name shape) :page-id page-id)
|
||||
(-> (pcb/empty-changes nil page-id)
|
||||
(pcb/with-file-data file-data)
|
||||
(pcb/update-shapes [(:id shape)] repair-shape))))
|
||||
|
||||
(defmethod repair-error :ref-shape-is-head
|
||||
[_ {:keys [shape page-id args] :as error} file-data _]
|
||||
(let [repair-shape
|
||||
@@ -524,7 +499,7 @@
|
||||
(pcb/update-shapes [(:id shape)] repair-shape))))
|
||||
|
||||
(defmethod repair-error :component-nil-objects-not-allowed
|
||||
[_ {component :shape} file-data _] ; in this error the :shape argument is the component
|
||||
[_ {:keys [shape] :as error} file-data _]
|
||||
(let [repair-component
|
||||
(fn [component]
|
||||
; Remove the objects key, or set it to {} if the component is deleted
|
||||
@@ -536,26 +511,10 @@
|
||||
(log/debug :hint " -> remove :objects")
|
||||
(dissoc component :objects))))]
|
||||
|
||||
(log/dbg :hint "repairing component :component-nil-objects-not-allowed" :id (:id component) :name (:name component))
|
||||
(log/dbg :hint "repairing component :component-nil-objects-not-allowed" :id (:id shape) :name (:name shape))
|
||||
(-> (pcb/empty-changes nil)
|
||||
(pcb/with-library-data file-data)
|
||||
(pcb/update-component (:id component) repair-component))))
|
||||
|
||||
(defmethod repair-error :non-deleted-component-cannot-have-objects
|
||||
[_ {component :shape} file-data _] ; in this error the :shape argument is the component
|
||||
(let [repair-component
|
||||
(fn [component]
|
||||
; Remove the :objects field
|
||||
(if-not (:deleted component)
|
||||
(do
|
||||
(log/debug :hint " -> remove :objects")
|
||||
(dissoc component :objects))
|
||||
component))]
|
||||
|
||||
(log/dbg :hint "repairing component :non-deleted-component-cannot-have-objects" :id (:id component) :name (:name component))
|
||||
(-> (pcb/empty-changes nil)
|
||||
(pcb/with-library-data file-data)
|
||||
(pcb/update-component (:id component) repair-component))))
|
||||
(pcb/update-component (:id shape) repair-component))))
|
||||
|
||||
(defmethod repair-error :invalid-text-touched
|
||||
[_ {:keys [shape page-id] :as error} file-data _]
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
:ref-shape-is-head
|
||||
:ref-shape-is-not-head
|
||||
:shape-ref-in-main
|
||||
:component-id-mismatch
|
||||
:root-main-not-allowed
|
||||
:nested-main-not-allowed
|
||||
:root-copy-not-allowed
|
||||
@@ -60,7 +59,6 @@
|
||||
:not-head-copy-not-allowed
|
||||
:not-component-not-allowed
|
||||
:component-nil-objects-not-allowed
|
||||
:non-deleted-component-cannot-have-objects
|
||||
:instance-head-not-frame
|
||||
:invalid-text-touched
|
||||
:misplaced-slot
|
||||
@@ -328,20 +326,6 @@
|
||||
:component-file (:component-file ref-shape)
|
||||
:component-id (:component-id ref-shape)))))
|
||||
|
||||
(defn- check-ref-component-id
|
||||
"Validate that if the copy has not been swwpped, the component-id and component-file are
|
||||
the same as in the referenced shape in the near main."
|
||||
[shape file page libraries]
|
||||
(when (nil? (ctk/get-swap-slot shape))
|
||||
(when-let [ref-shape (ctf/find-ref-shape file page libraries shape :include-deleted? true)]
|
||||
(when (or (not= (:component-id shape) (:component-id ref-shape))
|
||||
(not= (:component-file shape) (:component-file ref-shape)))
|
||||
(report-error :component-id-mismatch
|
||||
"Nested copy component-id and component-file must be the same as the near main"
|
||||
shape file page
|
||||
:component-id (:component-id ref-shape)
|
||||
:component-file (:component-file ref-shape))))))
|
||||
|
||||
(defn- check-empty-swap-slot
|
||||
"Validate that this shape does not have any swap slot."
|
||||
[shape file page]
|
||||
@@ -434,7 +418,6 @@
|
||||
(check-component-not-main-head shape file page libraries)
|
||||
(check-component-not-root shape file page)
|
||||
(check-valid-touched shape file page)
|
||||
(check-ref-component-id shape file page libraries)
|
||||
;; We can have situations where the nested copy and the ancestor copy come from different libraries and some of them have been dettached
|
||||
;; so we only validate the shape-ref if the ancestor is from a valid library
|
||||
(when library-exists
|
||||
@@ -665,13 +648,6 @@
|
||||
"Component main not allowed inside other component"
|
||||
main-instance file component-page))))
|
||||
|
||||
(defn- check-not-objects
|
||||
[component file]
|
||||
(when (d/not-empty? (:objects component))
|
||||
(report-error :non-deleted-component-cannot-have-objects
|
||||
"A non-deleted component cannot have shapes inside"
|
||||
component file nil)))
|
||||
|
||||
(defn- check-component
|
||||
"Validate semantic coherence of a component. Report all errors found."
|
||||
[component file]
|
||||
@@ -680,8 +656,7 @@
|
||||
"Objects list cannot be nil"
|
||||
component file nil))
|
||||
(when-not (:deleted component)
|
||||
(check-main-inside-main component file)
|
||||
(check-not-objects component file))
|
||||
(check-main-inside-main component file))
|
||||
(when (:deleted component)
|
||||
(check-component-duplicate-swap-slot component file)
|
||||
(check-ref-cycles component file))
|
||||
|
||||
@@ -1769,23 +1769,6 @@
|
||||
(pcb/update-shapes changes [(:id dest-shape)] ctk/unhead-shape {:ignore-touched true})
|
||||
changes))
|
||||
|
||||
(defn- check-swapped-main
|
||||
[changes dest-shape origin-shape]
|
||||
;; Only for direct updates (from main to copy). Check if the main shape
|
||||
;; has been swapped. If so, the new component-id and component-file must
|
||||
;; be put into the copy.
|
||||
(if (and (= (:shape-ref dest-shape) (:id origin-shape))
|
||||
(ctk/instance-head? dest-shape)
|
||||
(ctk/instance-head? origin-shape)
|
||||
(or (not= (:component-id dest-shape) (:component-id origin-shape))
|
||||
(not= (:component-file dest-shape) (:component-file origin-shape))))
|
||||
(pcb/update-shapes changes [(:id dest-shape)]
|
||||
#(assoc %
|
||||
:component-id (:component-id origin-shape)
|
||||
:component-file (:component-file origin-shape))
|
||||
{:ignore-touched true})
|
||||
changes))
|
||||
|
||||
(defn- update-attrs
|
||||
"The main function that implements the attribute sync algorithm. Copy
|
||||
attributes that have changed in the origin shape to the dest shape.
|
||||
@@ -1828,8 +1811,6 @@
|
||||
:always
|
||||
(check-detached-main dest-shape origin-shape)
|
||||
:always
|
||||
(check-swapped-main dest-shape origin-shape)
|
||||
:always
|
||||
(generate-update-tokens container dest-shape origin-shape touched omit-touched? nil))
|
||||
|
||||
(let [attr-group (get ctk/sync-attrs attr)
|
||||
|
||||
@@ -132,94 +132,3 @@ Some naming conventions:
|
||||
(if-let [last-period (str/last-index-of s ".")]
|
||||
[(subs s 0 (inc last-period)) (subs s (inc last-period))]
|
||||
[s ""]))
|
||||
|
||||
;; Tree building functions --------------------------------------------------
|
||||
|
||||
"Build tree structure from flat list of paths"
|
||||
|
||||
"`build-tree-root` is the main function to build the tree."
|
||||
|
||||
"Receives a list of segments with 'name' properties representing paths,
|
||||
and a separator string."
|
||||
"E.g segments = [{... :name 'one/two/three'} {... :name 'one/two/four'} {... :name 'one/five'}]"
|
||||
|
||||
"Transforms into a tree structure like:
|
||||
[{:name 'one'
|
||||
:path 'one'
|
||||
:depth 0
|
||||
:leaf nil
|
||||
:children-fn (fn [] [{:name 'two'
|
||||
:path 'one.two'
|
||||
:depth 1
|
||||
:leaf nil
|
||||
:children-fn (fn [] [{... :name 'three'} {... :name 'four'}])}
|
||||
{:name 'five'
|
||||
:path 'one.five'
|
||||
:depth 1
|
||||
:leaf {... :name 'five'}
|
||||
...}])}]"
|
||||
|
||||
(defn- sort-by-children
|
||||
"Sorts segments so that those with children come first."
|
||||
[segments separator]
|
||||
(sort-by (fn [segment]
|
||||
(let [path (split-path (:name segment) :separator separator)
|
||||
path-length (count path)]
|
||||
(if (= path-length 1)
|
||||
1
|
||||
0)))
|
||||
segments))
|
||||
|
||||
(defn- group-by-first-segment
|
||||
"Groups segments by their first path segment and update segment name."
|
||||
[segments separator]
|
||||
(reduce (fn [acc segment]
|
||||
(let [[first-segment & remaining-segments] (split-path (:name segment) :separator separator)
|
||||
rest-path (when (seq remaining-segments) (join-path remaining-segments :separator separator :with-spaces? false))]
|
||||
(update acc first-segment (fnil conj [])
|
||||
(if rest-path
|
||||
(assoc segment :name rest-path)
|
||||
segment))))
|
||||
{}
|
||||
segments))
|
||||
|
||||
(defn- sort-and-group-segments
|
||||
"Sorts elements and groups them by their first path segment."
|
||||
[segments separator]
|
||||
(let [sorted (sort-by-children segments separator)
|
||||
grouped (group-by-first-segment sorted separator)]
|
||||
grouped))
|
||||
|
||||
(defn- build-tree-node
|
||||
"Builds a single tree node with lazy children."
|
||||
[segment-name remaining-segments separator parent-path depth]
|
||||
(let [current-path (if parent-path
|
||||
(str parent-path "." segment-name)
|
||||
segment-name)
|
||||
|
||||
is-leaf? (and (seq remaining-segments)
|
||||
(every? (fn [segment]
|
||||
(let [remaining-segment-name (first (split-path (:name segment) :separator separator))]
|
||||
(= segment-name remaining-segment-name)))
|
||||
remaining-segments))
|
||||
|
||||
leaf-segment (when is-leaf? (first remaining-segments))
|
||||
node {:name segment-name
|
||||
:path current-path
|
||||
:depth depth
|
||||
:leaf leaf-segment
|
||||
:children-fn (when-not is-leaf?
|
||||
(fn []
|
||||
(let [grouped-elements (sort-and-group-segments remaining-segments separator)]
|
||||
(mapv (fn [[child-segment-name remaining-child-segments]]
|
||||
(build-tree-node child-segment-name remaining-child-segments separator current-path (inc depth)))
|
||||
grouped-elements))))}]
|
||||
node))
|
||||
|
||||
(defn build-tree-root
|
||||
"Builds the root level of the tree."
|
||||
[segments separator]
|
||||
(let [grouped-elements (sort-and-group-segments segments separator)]
|
||||
(mapv (fn [[segment-name remaining-segments]]
|
||||
(build-tree-node segment-name remaining-segments separator nil 0))
|
||||
grouped-elements)))
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
file-id
|
||||
{file-id file}
|
||||
file-id))]
|
||||
(thf/apply-changes file changes :validate? false)))
|
||||
(thf/apply-changes file changes)))
|
||||
|
||||
(defn swap-component
|
||||
"Swap the specified shape by the component specified by component-tag"
|
||||
@@ -305,13 +305,12 @@
|
||||
[changes nil])
|
||||
|
||||
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(when new-shape-label
|
||||
(thi/rm-id! (:id new-shape))
|
||||
(thi/set-id! new-shape-label (:id new-shape)))
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
(defn swap-component-in-shape [file shape-tag component-tag & {:keys [page-label propagate-fn]}]
|
||||
@@ -340,10 +339,9 @@
|
||||
(assoc shape :fills (ths/sample-fills-color :fill-color color)))
|
||||
(:objects page)
|
||||
{})
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
(defn update-bottom-color
|
||||
@@ -359,10 +357,9 @@
|
||||
(assoc shape :fills (ths/sample-fills-color :fill-color color)))
|
||||
(:objects page)
|
||||
{})
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
(defn reset-overrides [file shape & {:keys [page-label propagate-fn]}]
|
||||
@@ -377,10 +374,9 @@
|
||||
{file-id file}
|
||||
(ctn/make-container container :page)
|
||||
(:id shape)))
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
(defn reset-overrides-in-first-child [file shape-tag & {:keys [page-label propagate-fn]}]
|
||||
@@ -402,10 +398,9 @@
|
||||
#{(-> (ths/get-shape file shape-tag :page-label page-label)
|
||||
:id)}
|
||||
{})
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
(defn duplicate-shape [file shape-tag & {:keys [page-label propagate-fn]}]
|
||||
@@ -424,9 +419,8 @@
|
||||
(:id file)) ;; file-id
|
||||
(cll/generate-duplicate-changes-update-indices (:objects page) ;; objects
|
||||
#{(:id shape)}))
|
||||
file' (thf/apply-changes file changes :validate? (not propagate-fn))]
|
||||
file' (thf/apply-changes file changes)]
|
||||
(if propagate-fn
|
||||
(-> (propagate-fn file')
|
||||
(thf/validate-file!))
|
||||
(propagate-fn file')
|
||||
file')))
|
||||
|
||||
|
||||
@@ -54,14 +54,12 @@
|
||||
([file] (validate-file! file {}))
|
||||
([file libraries]
|
||||
(cfv/validate-file-schema! file)
|
||||
(cfv/validate-file! file libraries)
|
||||
file))
|
||||
(cfv/validate-file! file libraries)))
|
||||
|
||||
(defn apply-changes
|
||||
[file changes & {:keys [validate?] :or {validate? true}}]
|
||||
[file changes]
|
||||
(let [file' (ctf/update-file-data file #(cfc/process-changes % (:redo-changes changes) true))]
|
||||
(when validate?
|
||||
(validate-file! file'))
|
||||
(validate-file! file')
|
||||
file'))
|
||||
|
||||
(defn apply-undo-changes
|
||||
|
||||
@@ -146,15 +146,12 @@
|
||||
"Check if some attribute is one that is involved in component syncrhonization.
|
||||
Note that design tokens also are involved, although they go by an alternate
|
||||
route and thus they are not part of :sync-attrs.
|
||||
Also when detaching a nested copy or it also needs to trigger a synchronization,
|
||||
even though :shape-ref or :component-id are not synced attribute per se"
|
||||
Also when detaching a nested copy it also needs to trigger a synchronization,
|
||||
even though :shape-ref is not a synced attribute per se"
|
||||
[attr]
|
||||
(or (get sync-attrs attr)
|
||||
(= :shape-ref attr)
|
||||
(= :applied-tokens attr)
|
||||
(= :component-id attr)
|
||||
(= :component-file attr)
|
||||
(= :component-root attr)))
|
||||
(= :applied-tokens attr)))
|
||||
|
||||
(defn instance-root?
|
||||
"Check if this shape is the head of a top instance."
|
||||
|
||||
@@ -60,9 +60,6 @@
|
||||
(some? objects)
|
||||
(assoc :objects objects)
|
||||
|
||||
(nil? objects)
|
||||
(dissoc :objects)
|
||||
|
||||
(some? modified-at)
|
||||
(assoc :modified-at modified-at)
|
||||
|
||||
|
||||
@@ -465,10 +465,9 @@
|
||||
page
|
||||
{(:id file) file}
|
||||
(thi/id :nested-h-ellipse))
|
||||
file' (-> (thf/apply-changes file changes :validate? false)
|
||||
file' (-> (thf/apply-changes file changes)
|
||||
(tho/propagate-component-changes :c-board-with-ellipse)
|
||||
(tho/propagate-component-changes :c-big-board)
|
||||
(thf/validate-file!))
|
||||
(tho/propagate-component-changes :c-big-board))
|
||||
|
||||
;; ==== Get
|
||||
nested2-h-ellipse (ths/get-shape file' :nested-h-ellipse)
|
||||
|
||||
@@ -64,8 +64,9 @@
|
||||
|
||||
(reset-all-overrides [file]
|
||||
(-> file
|
||||
(tho/reset-overrides-in-first-child :frame-board-1 :page-label :page-1 :propagate-fn propagate-all-component-changes)
|
||||
(tho/reset-overrides-in-first-child :copy-board-1 :page-label :page-2 :propagate-fn propagate-all-component-changes)))
|
||||
(tho/reset-overrides-in-first-child :frame-board-1 :page-label :page-1)
|
||||
(tho/reset-overrides-in-first-child :copy-board-1 :page-label :page-2)
|
||||
(propagate-all-component-changes)))
|
||||
|
||||
(fill-colors [file]
|
||||
[(tho/bottom-fill-color file :frame-ellipse-1 :page-label :page-1)
|
||||
|
||||
@@ -56,9 +56,10 @@
|
||||
|
||||
(reset-all-overrides [file]
|
||||
(-> file
|
||||
(tho/reset-overrides (ths/get-shape file :copy-simple-1 :propagate-fn propagate-all-component-changes))
|
||||
(tho/reset-overrides (ths/get-shape file :copy-frame-composed-1 :propagate-fn propagate-all-component-changes))
|
||||
(tho/reset-overrides (ths/get-shape file :composed-1-composed-2-copy :propagate-fn propagate-all-component-changes))))
|
||||
(tho/reset-overrides (ths/get-shape file :copy-simple-1))
|
||||
(tho/reset-overrides (ths/get-shape file :copy-frame-composed-1))
|
||||
(tho/reset-overrides (ths/get-shape file :composed-1-composed-2-copy))
|
||||
(propagate-all-component-changes)))
|
||||
|
||||
(fill-colors [file]
|
||||
[(tho/bottom-fill-color file :frame-simple-1)
|
||||
|
||||
@@ -6,12 +6,20 @@
|
||||
|
||||
(ns common-tests.logic.swap-as-override-test
|
||||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.files.changes :as ch]
|
||||
[app.common.files.changes-builder :as pcb]
|
||||
[app.common.logic.libraries :as cll]
|
||||
[app.common.logic.shapes :as cls]
|
||||
[app.common.pprint :as pp]
|
||||
[app.common.test-helpers.components :as thc]
|
||||
[app.common.test-helpers.compositions :as tho]
|
||||
[app.common.test-helpers.files :as thf]
|
||||
[app.common.test-helpers.ids-map :as thi]
|
||||
[app.common.test-helpers.shapes :as ths]
|
||||
[app.common.types.component :as ctk]
|
||||
[app.common.types.container :as ctn]
|
||||
[app.common.types.file :as ctf]
|
||||
[app.common.uuid :as uuid]
|
||||
[clojure.test :as t]))
|
||||
|
||||
(t/use-fixtures :each thi/test-fixture)
|
||||
@@ -19,40 +27,23 @@
|
||||
(defn- setup []
|
||||
(-> (thf/sample-file :file1)
|
||||
|
||||
(tho/add-simple-component :component-1 :frame-component-1 :child-component-1
|
||||
:root-params {:name "component-1"}
|
||||
:child-params {:name "child-component-1"
|
||||
:type :rect
|
||||
:fills (ths/sample-fills-color :fill-color "#111111")})
|
||||
(tho/add-simple-component :component-2 :frame-component-2 :child-component-2
|
||||
:root-params {:name "component-2"}
|
||||
:child-params {:name "child-component-2"
|
||||
:type :rect
|
||||
:fills (ths/sample-fills-color :fill-color "#222222")})
|
||||
(tho/add-simple-component :component-3 :frame-component-3 :child-component-3
|
||||
:root-params {:name "component-3"}
|
||||
:child-params {:name "child-component-3"
|
||||
:type :rect
|
||||
:fills (ths/sample-fills-color :fill-color "#333333")})
|
||||
(tho/add-simple-component :component-1 :frame-component-1 :child-component-1 :child-params {:name "child-component-1" :type :rect :fills (ths/sample-fills-color :fill-color "#111111")})
|
||||
(tho/add-simple-component :component-2 :frame-component-2 :child-component-2 :child-params {:name "child-component-2" :type :rect :fills (ths/sample-fills-color :fill-color "#222222")})
|
||||
(tho/add-simple-component :component-3 :frame-component-3 :child-component-3 :child-params {:name "child-component-3" :type :rect :fills (ths/sample-fills-color :fill-color "#333333")})
|
||||
|
||||
(tho/add-frame :frame-icon-and-text :name "copy-component-1")
|
||||
(thc/instantiate-component :component-1 :copy-component-1
|
||||
:parent-label :frame-icon-and-text
|
||||
:children-labels [:component-1-icon-and-text])
|
||||
(tho/add-frame :frame-icon-and-text)
|
||||
(thc/instantiate-component :component-1 :copy-component-1 :parent-label :frame-icon-and-text :children-labels [:component-1-icon-and-text])
|
||||
(ths/add-sample-shape :text
|
||||
{:type :text
|
||||
:name "icon+text"
|
||||
:parent-label :frame-icon-and-text})
|
||||
(thc/make-component :icon-and-text :frame-icon-and-text)
|
||||
|
||||
(tho/add-frame :frame-panel :name "icon-and-text")
|
||||
(thc/instantiate-component :icon-and-text :copy-icon-and-text
|
||||
:parent-label :frame-panel
|
||||
:children-labels [:icon-and-text-panel])
|
||||
(tho/add-frame :frame-panel)
|
||||
(thc/instantiate-component :icon-and-text :copy-icon-and-text :parent-label :frame-panel :children-labels [:icon-and-text-panel])
|
||||
(thc/make-component :panel :frame-panel)
|
||||
|
||||
(thc/instantiate-component :panel :copy-panel
|
||||
:children-labels [:copy-icon-and-text-panel])))
|
||||
(thc/instantiate-component :panel :copy-panel :children-labels [:copy-icon-and-text-panel])))
|
||||
|
||||
(defn- propagate-all-component-changes [file]
|
||||
(-> file
|
||||
|
||||
@@ -41,7 +41,10 @@ services:
|
||||
- 6062:6062
|
||||
- 6063:6063
|
||||
- 6064:6064
|
||||
- 9000:9000
|
||||
- 9001:9001
|
||||
- 9090:9090
|
||||
- 9091:9091
|
||||
|
||||
environment:
|
||||
- EXTERNAL_UID=${CURRENT_USER_ID}
|
||||
|
||||
@@ -145,8 +145,8 @@ http {
|
||||
proxy_pass http://127.0.0.1:3000/;
|
||||
}
|
||||
|
||||
location /playground {
|
||||
alias /home/penpot/penpot/experiments/;
|
||||
location /wasm-playground {
|
||||
alias /home/penpot/penpot/frontend/resources/public/wasm-playground/;
|
||||
add_header Cache-Control "no-cache, max-age=0";
|
||||
autoindex on;
|
||||
}
|
||||
|
||||
@@ -20,12 +20,7 @@ test.describe("Dashboard Deleted Page", () => {
|
||||
// Navigate directly to deleted page
|
||||
await dashboardPage.goToDeleted();
|
||||
|
||||
// Check for the restore all and clear trash buttons
|
||||
await expect(
|
||||
page.getByRole("button", { name: "Restore All" }),
|
||||
).toBeVisible();
|
||||
await expect(
|
||||
page.getByRole("button", { name: "Clear trash" }),
|
||||
).toBeVisible();
|
||||
// Check for the delete-page-section element
|
||||
await expect(page.getByTestId("deleted-page-section")).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -40,7 +40,6 @@ const setupEmptyTokensFile = async (page, options = {}) => {
|
||||
tokensUpdateCreateModal: workspacePage.tokensUpdateCreateModal,
|
||||
tokenThemesSetsSidebar: workspacePage.tokenThemesSetsSidebar,
|
||||
tokenSetItems: workspacePage.tokenSetItems,
|
||||
tokensSidebar: workspacePage.tokensSidebar,
|
||||
tokenSetGroupItems: workspacePage.tokenSetGroupItems,
|
||||
tokenContextMenuForSet: workspacePage.tokenContextMenuForSet,
|
||||
};
|
||||
@@ -111,12 +110,15 @@ const checkInputFieldWithError = async (
|
||||
).toBeVisible();
|
||||
};
|
||||
|
||||
const checkInputFieldWithoutError = async (inputLocator) => {
|
||||
const checkInputFieldWithoutError = async (
|
||||
tokenThemeUpdateCreateModal,
|
||||
inputLocator,
|
||||
) => {
|
||||
expect(await inputLocator.getAttribute("aria-invalid")).toBeNull();
|
||||
expect(await inputLocator.getAttribute("aria-describedby")).toBeNull();
|
||||
};
|
||||
|
||||
const testTokenCreationFlow = async (
|
||||
async function testTokenCreationFlow(
|
||||
page,
|
||||
{
|
||||
tokenLabel,
|
||||
@@ -130,7 +132,7 @@ const testTokenCreationFlow = async (
|
||||
resolvedValueText,
|
||||
secondResolvedValueText,
|
||||
},
|
||||
) => {
|
||||
) {
|
||||
const invalidValueError = "Invalid token value";
|
||||
const emptyNameError = "Name should be at least 1 character";
|
||||
const selfReferenceError = "Token has self reference";
|
||||
@@ -240,45 +242,7 @@ const testTokenCreationFlow = async (
|
||||
await expect(
|
||||
tokensTabPanel.getByRole("button", { name: "my-token-2" }),
|
||||
).toBeEnabled();
|
||||
};
|
||||
|
||||
const unfoldTokenTree = async (tokensTabPanel, type, tokenName) => {
|
||||
const tokenSegments = tokenName.split(".");
|
||||
const tokenFolderTree = tokenSegments.slice(0, -1);
|
||||
const tokenLeafName = tokenSegments.pop();
|
||||
|
||||
const typeParentWrapper = tokensTabPanel.getByTestId(`section-${type}`);
|
||||
const typeSectionButton = typeParentWrapper
|
||||
.getByRole("button", {
|
||||
name: type,
|
||||
})
|
||||
.first();
|
||||
|
||||
const isSectionExpanded =
|
||||
await typeSectionButton.getAttribute("aria-expanded");
|
||||
|
||||
if (isSectionExpanded === "false") {
|
||||
await typeSectionButton.click();
|
||||
}
|
||||
|
||||
for (const segment of tokenFolderTree) {
|
||||
const segmentButton = typeParentWrapper
|
||||
.getByRole("listitem")
|
||||
.getByRole("button", { name: segment })
|
||||
.first();
|
||||
|
||||
const isExpanded = await segmentButton.getAttribute("aria-expanded");
|
||||
if (isExpanded === "false") {
|
||||
await segmentButton.click();
|
||||
}
|
||||
}
|
||||
|
||||
await expect(
|
||||
typeParentWrapper.getByRole("button", {
|
||||
name: tokenLeafName,
|
||||
}),
|
||||
).toBeEnabled();
|
||||
};
|
||||
}
|
||||
|
||||
test.describe("Tokens: Tokens Tab", () => {
|
||||
test("Clicking tokens tab button opens tokens sidebar tab", async ({
|
||||
@@ -434,12 +398,15 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
const emptyNameError = "Name should be at least 1 character";
|
||||
const selfReferenceError = "Token has self reference";
|
||||
const missingReferenceError = "Missing token references";
|
||||
const { tokensUpdateCreateModal, tokenThemesSetsSidebar, tokensSidebar } =
|
||||
const { tokensUpdateCreateModal, tokenThemesSetsSidebar } =
|
||||
await setupEmptyTokensFile(page);
|
||||
|
||||
await tokensSidebar
|
||||
.getByRole("button", { name: "Add Token: Color" })
|
||||
.click();
|
||||
const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
|
||||
const addTokenButton = tokensTabPanel.getByRole("button", {
|
||||
name: `Add Token: Color`,
|
||||
});
|
||||
|
||||
await addTokenButton.click();
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
|
||||
// Placeholder checks
|
||||
@@ -504,34 +471,38 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
await expect(submitButton).toBeEnabled();
|
||||
await submitButton.click();
|
||||
|
||||
await unfoldTokenTree(tokensSidebar, "color", "color.primary");
|
||||
await expect(
|
||||
tokensTabPanel.getByRole("button", {
|
||||
name: "color.primary",
|
||||
}),
|
||||
).toBeEnabled();
|
||||
|
||||
// Create token referencing the previous one with keyboard
|
||||
|
||||
await tokensSidebar
|
||||
await tokensTabPanel
|
||||
.getByRole("button", { name: "Add Token: Color" })
|
||||
.click();
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
|
||||
await nameField.click();
|
||||
await nameField.fill("secondary");
|
||||
await nameField.fill("color.secondary");
|
||||
await nameField.press("Tab");
|
||||
|
||||
await valueField.click();
|
||||
await valueField.fill("{color.primary}");
|
||||
|
||||
await expect(submitButton).toBeEnabled();
|
||||
await submitButton.press("Enter");
|
||||
await nameField.press("Enter");
|
||||
|
||||
await expect(
|
||||
tokensSidebar.getByRole("button", {
|
||||
name: "secondary",
|
||||
tokensTabPanel.getByRole("button", {
|
||||
name: "color.secondary",
|
||||
}),
|
||||
).toBeEnabled();
|
||||
|
||||
// Tokens tab panel should have two tokens with the color red / #ff0000
|
||||
await expect(
|
||||
tokensSidebar.getByRole("button", { name: "#ff0000" }),
|
||||
tokensTabPanel.getByRole("button", { name: "#ff0000" }),
|
||||
).toHaveCount(2);
|
||||
|
||||
// Global set has been auto created and is active
|
||||
@@ -547,7 +518,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
).toHaveAttribute("aria-checked", "true");
|
||||
|
||||
// Check color picker
|
||||
await tokensSidebar
|
||||
await tokensTabPanel
|
||||
.getByRole("button", { name: "Add Token: Color" })
|
||||
.click();
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
@@ -1108,7 +1079,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
const emptyNameError = "Name should be at least 1 character";
|
||||
|
||||
const { tokensUpdateCreateModal, tokenThemesSetsSidebar } =
|
||||
await setupEmptyTokensFile(page, { flags: ["enable-token-shadow"] });
|
||||
await setupEmptyTokensFile(page, {flags: ["enable-token-shadow"]});
|
||||
|
||||
// Open modal
|
||||
const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
|
||||
@@ -1536,15 +1507,24 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
test("User edits token and auto created set show up in the sidebar", async ({
|
||||
page,
|
||||
}) => {
|
||||
const { tokensUpdateCreateModal, tokensSidebar, tokenContextMenuForToken } =
|
||||
await setupTokensFile(page);
|
||||
const {
|
||||
workspacePage,
|
||||
tokensUpdateCreateModal,
|
||||
tokenThemesSetsSidebar,
|
||||
tokensSidebar,
|
||||
tokenContextMenuForToken,
|
||||
} = await setupTokensFile(page);
|
||||
|
||||
await expect(tokensSidebar).toBeVisible();
|
||||
|
||||
await unfoldTokenTree(tokensSidebar, "color", "colors.blue.100");
|
||||
const tokensColorGroup = tokensSidebar.getByRole("button", {
|
||||
name: "Color 92",
|
||||
});
|
||||
await expect(tokensColorGroup).toBeVisible();
|
||||
await tokensColorGroup.click();
|
||||
|
||||
const colorToken = tokensSidebar.getByRole("button", {
|
||||
name: "100",
|
||||
name: "colors.blue.100",
|
||||
});
|
||||
await expect(colorToken).toBeVisible();
|
||||
await colorToken.click({ button: "right" });
|
||||
@@ -1561,10 +1541,8 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
|
||||
await expect(tokensUpdateCreateModal).not.toBeVisible();
|
||||
|
||||
await unfoldTokenTree(tokensSidebar, "color", "colors.blue.100.changed");
|
||||
|
||||
const colorTokenChanged = tokensSidebar.getByRole("button", {
|
||||
name: "changed",
|
||||
name: "colors.blue.100.changed",
|
||||
});
|
||||
await expect(colorTokenChanged).toBeVisible();
|
||||
});
|
||||
@@ -1655,10 +1633,11 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
});
|
||||
|
||||
test("User creates grouped color token", async ({ page }) => {
|
||||
const { workspacePage, tokensUpdateCreateModal, tokensSidebar } =
|
||||
const { workspacePage, tokensUpdateCreateModal, tokenThemesSetsSidebar } =
|
||||
await setupEmptyTokensFile(page);
|
||||
|
||||
await tokensSidebar
|
||||
const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
|
||||
await tokensTabPanel
|
||||
.getByRole("button", { name: "Add Token: Color" })
|
||||
.click();
|
||||
|
||||
@@ -1670,7 +1649,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
const valueField = tokensUpdateCreateModal.getByLabel("Value");
|
||||
|
||||
await nameField.click();
|
||||
await nameField.fill("dark.primary");
|
||||
await nameField.fill("color.dark.primary");
|
||||
|
||||
await valueField.click();
|
||||
await valueField.fill("red");
|
||||
@@ -1681,9 +1660,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
await expect(submitButton).toBeEnabled();
|
||||
await submitButton.click();
|
||||
|
||||
await unfoldTokenTree(tokensSidebar, "color", "dark.primary");
|
||||
|
||||
await expect(tokensSidebar.getByLabel("primary")).toBeEnabled();
|
||||
await expect(tokensTabPanel.getByLabel("color.dark.primary")).toBeEnabled();
|
||||
});
|
||||
|
||||
test("User cant create regular token with value missing", async ({
|
||||
@@ -1699,6 +1676,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
|
||||
const nameField = tokensUpdateCreateModal.getByLabel("Name");
|
||||
const valueField = tokensUpdateCreateModal.getByLabel("Value");
|
||||
const submitButton = tokensUpdateCreateModal.getByRole("button", {
|
||||
name: "Save",
|
||||
});
|
||||
@@ -1708,7 +1686,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
|
||||
// Fill in name but leave value empty
|
||||
await nameField.click();
|
||||
await nameField.fill("primary");
|
||||
await nameField.fill("color.primary");
|
||||
|
||||
// Submit button should remain disabled when value is empty
|
||||
await expect(submitButton).toBeDisabled();
|
||||
@@ -1726,6 +1704,7 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
.click();
|
||||
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
const nameField = tokensUpdateCreateModal.getByLabel("Name");
|
||||
const valueField = tokensUpdateCreateModal.getByLabel("Value");
|
||||
|
||||
await valueField.click();
|
||||
@@ -1775,10 +1754,15 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
|
||||
await expect(tokensSidebar).toBeVisible();
|
||||
|
||||
unfoldTokenTree(tokensSidebar, "color", "colors.blue.100");
|
||||
const tokensColorGroup = tokensSidebar.getByRole("button", {
|
||||
name: "Color 92",
|
||||
});
|
||||
|
||||
await expect(tokensColorGroup).toBeVisible();
|
||||
await tokensColorGroup.click();
|
||||
|
||||
const colorToken = tokensSidebar.getByRole("button", {
|
||||
name: "100",
|
||||
name: "colors.blue.100",
|
||||
});
|
||||
|
||||
await colorToken.click({ button: "right" });
|
||||
@@ -1798,10 +1782,15 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
|
||||
await expect(tokensSidebar).toBeVisible();
|
||||
|
||||
unfoldTokenTree(tokensSidebar, "color", "colors.blue.100");
|
||||
const tokensColorGroup = tokensSidebar.getByRole("button", {
|
||||
name: "Color 92",
|
||||
});
|
||||
await expect(tokensColorGroup).toBeVisible();
|
||||
|
||||
await tokensColorGroup.click();
|
||||
|
||||
const colorToken = tokensSidebar.getByRole("button", {
|
||||
name: "100",
|
||||
name: "colors.blue.100",
|
||||
});
|
||||
await expect(colorToken).toBeVisible();
|
||||
await colorToken.click({ button: "right" });
|
||||
@@ -1814,7 +1803,8 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
});
|
||||
|
||||
test("User fold/unfold color tokens", async ({ page }) => {
|
||||
const { tokensSidebar } = await setupTokensFile(page);
|
||||
const { tokensSidebar, tokenContextMenuForToken } =
|
||||
await setupTokensFile(page);
|
||||
|
||||
await expect(tokensSidebar).toBeVisible();
|
||||
|
||||
@@ -1824,10 +1814,8 @@ test.describe("Tokens: Tokens Tab", () => {
|
||||
await expect(tokensColorGroup).toBeVisible();
|
||||
await tokensColorGroup.click();
|
||||
|
||||
unfoldTokenTree(tokensSidebar, "color", "colors.blue.100");
|
||||
|
||||
const colorToken = tokensSidebar.getByRole("button", {
|
||||
name: "100",
|
||||
name: "colors.blue.100",
|
||||
});
|
||||
await expect(colorToken).toBeVisible();
|
||||
await tokensColorGroup.click();
|
||||
@@ -2230,10 +2218,13 @@ test.describe("Tokens: Apply token", () => {
|
||||
const tokensTabButton = page.getByRole("tab", { name: "Tokens" });
|
||||
await tokensTabButton.click();
|
||||
|
||||
unfoldTokenTree(tokensSidebar, "color", "colors.black");
|
||||
await tokensSidebar
|
||||
.getByRole("button")
|
||||
.filter({ hasText: "Color" })
|
||||
.click();
|
||||
|
||||
await tokensSidebar
|
||||
.getByRole("button", { name: "black" })
|
||||
.getByRole("button", { name: "colors.black" })
|
||||
.click({ button: "right" });
|
||||
await tokenContextMenuForToken.getByText("Fill").click();
|
||||
|
||||
@@ -2471,7 +2462,7 @@ test.describe("Tokens: Apply token", () => {
|
||||
await expect(tokensUpdateCreateModal).toBeVisible();
|
||||
|
||||
const nameField = tokensUpdateCreateModal.getByLabel("Name");
|
||||
await nameField.fill("primary");
|
||||
await nameField.fill("shadow.primary");
|
||||
|
||||
// User adds first shadow with a color from the color ramp
|
||||
const firstShadowFields = tokensUpdateCreateModal.getByTestId(
|
||||
@@ -2718,11 +2709,9 @@ test.describe("Tokens: Apply token", () => {
|
||||
await submitButton.click();
|
||||
await expect(tokensUpdateCreateModal).not.toBeVisible();
|
||||
|
||||
unfoldTokenTree(tokensSidebar, "shadow", "primary");
|
||||
|
||||
// Verify token appears in sidebar
|
||||
const shadowToken = tokensSidebar.getByRole("button", {
|
||||
name: "primary",
|
||||
name: "shadow.primary",
|
||||
});
|
||||
await expect(shadowToken).toBeEnabled();
|
||||
|
||||
|
||||
@@ -667,6 +667,9 @@
|
||||
}
|
||||
|
||||
// UI ELEMENTS
|
||||
|
||||
// FIXME: This is used multiple times accross the app. We should design this in
|
||||
// the DS and create a proper component for it.
|
||||
.asset-element {
|
||||
@include bodySmallTypography;
|
||||
display: flex;
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
Uses `font-size-value` to calculate the relative line-height value.
|
||||
Returns an error for an invalid font-size value."
|
||||
[line-height-value font-size-value font-size-errors]
|
||||
(let [missing-references (seq (some cto/find-token-value-references line-height-value))
|
||||
(let [missing-references (seq (cto/find-token-value-references line-height-value))
|
||||
error
|
||||
(cond
|
||||
missing-references
|
||||
|
||||
@@ -1122,7 +1122,7 @@
|
||||
ref-id (:stroke-color-ref-id stroke)
|
||||
|
||||
colors (-> libraries
|
||||
(get ref-id)
|
||||
(get ref-file)
|
||||
(get :data)
|
||||
(ctl/get-colors))
|
||||
shared? (contains? colors ref-id)
|
||||
@@ -1167,7 +1167,7 @@
|
||||
ref-file (get color :ref-file)
|
||||
ref-id (get color :ref-id)
|
||||
colors (-> libraries
|
||||
(get ref-id)
|
||||
(get ref-file)
|
||||
(get :data)
|
||||
(ctl/get-colors))
|
||||
shared? (contains? colors ref-id)
|
||||
@@ -1180,19 +1180,20 @@
|
||||
:index (:index shadow)}))
|
||||
|
||||
(defn- text->color-att
|
||||
[fill file-id libraries]
|
||||
[fill file-id libraries & {:keys [has-token-applied token-name]}]
|
||||
(let [ref-file (:fill-color-ref-file fill)
|
||||
ref-id (:fill-color-ref-id fill)
|
||||
colors (-> libraries
|
||||
(get ref-id)
|
||||
(get ref-file)
|
||||
(get :data)
|
||||
(ctl/get-colors))
|
||||
|
||||
shared? (contains? colors ref-id)
|
||||
attrs (cond-> (types.fills/fill->color fill)
|
||||
(not (or shared? (= ref-file file-id)))
|
||||
(dissoc :ref-file :ref-id))]
|
||||
|
||||
base-attrs (cond-> (types.fills/fill->color fill)
|
||||
(not (or shared? (= ref-file file-id)))
|
||||
(dissoc :ref-file :ref-id))
|
||||
attrs (cond-> base-attrs
|
||||
has-token-applied (assoc :has-token-applied true)
|
||||
token-name (assoc :token-name token-name))]
|
||||
{:attrs attrs
|
||||
:prop :content
|
||||
:shape-id (:shape-id fill)
|
||||
@@ -1200,13 +1201,18 @@
|
||||
|
||||
(defn- extract-text-colors
|
||||
[text file-id libraries]
|
||||
(let [treat-node
|
||||
(let [applied-fill-token (get-in text [:applied-tokens :fill])
|
||||
treat-node
|
||||
(fn [node shape-id]
|
||||
(map-indexed #(assoc %2 :shape-id shape-id :index %1) node))]
|
||||
(map-indexed (fn [idx fill]
|
||||
(let [args (cond-> []
|
||||
(and (= idx 0) applied-fill-token)
|
||||
(conj :has-token-applied true :token-name applied-fill-token))]
|
||||
(apply text->color-att (assoc fill :shape-id shape-id :index idx) file-id libraries args)))
|
||||
node))]
|
||||
(->> (txt/node-seq txt/is-text-node? (:content text))
|
||||
(map :fills)
|
||||
(mapcat #(treat-node % (:id text)))
|
||||
(map #(text->color-att % file-id libraries)))))
|
||||
(mapcat #(treat-node % (:id text))))))
|
||||
|
||||
(defn- fill->color-att
|
||||
"Given a fill map enriched with :shape-id, :index, and optionally
|
||||
@@ -1232,7 +1238,7 @@
|
||||
ref-id (:fill-color-ref-id fill)
|
||||
|
||||
colors (-> libraries
|
||||
(get ref-id)
|
||||
(get ref-file)
|
||||
(get :data)
|
||||
(ctl/get-colors))
|
||||
shared? (contains? colors ref-id)
|
||||
|
||||
@@ -4,22 +4,29 @@
|
||||
//
|
||||
// Copyright (c) KALEIDOS INC
|
||||
|
||||
@use "refactor/common-refactor.scss" as deprecated;
|
||||
// FIXME: we need this import for .asset-element
|
||||
@use "refactor/basic-rules.scss" as deprecated;
|
||||
|
||||
@use "ds/_borders.scss" as *;
|
||||
@use "ds/_sizes.scss" as *;
|
||||
@use "ds/_utils.scss" as *;
|
||||
@use "ds/spacing.scss" as *;
|
||||
|
||||
.editable-select {
|
||||
@extend .asset-element;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: deprecated.$s-1 solid var(--input-border-color);
|
||||
border: $b-1 solid var(--input-border-color);
|
||||
position: relative;
|
||||
display: flex;
|
||||
height: deprecated.$s-32;
|
||||
height: $sz-32;
|
||||
width: 100%;
|
||||
padding: deprecated.$s-8;
|
||||
border-radius: deprecated.$br-8;
|
||||
padding: var(--sp-s);
|
||||
border-radius: $br-8;
|
||||
cursor: pointer;
|
||||
.dropdown-button {
|
||||
@include deprecated.flexCenter;
|
||||
display: flex;
|
||||
place-content: center;
|
||||
svg {
|
||||
@extend .button-icon-small;
|
||||
transform: rotate(90deg);
|
||||
@@ -29,10 +36,11 @@
|
||||
|
||||
.custom-select-dropdown {
|
||||
@extend .dropdown-wrapper;
|
||||
max-height: deprecated.$s-320;
|
||||
width: fit-content;
|
||||
max-height: px2rem(320); // TODO: when this gets addressed in the DS, use a token
|
||||
.separator {
|
||||
margin: 0;
|
||||
height: deprecated.$s-12;
|
||||
height: $sz-12;
|
||||
}
|
||||
.dropdown-element {
|
||||
@extend .dropdown-element-base;
|
||||
@@ -43,7 +51,8 @@
|
||||
}
|
||||
|
||||
.check-icon {
|
||||
@include deprecated.flexCenter;
|
||||
display: flex;
|
||||
place-content: center;
|
||||
svg {
|
||||
@extend .button-icon-small;
|
||||
visibility: hidden;
|
||||
|
||||
@@ -32,6 +32,27 @@
|
||||
(def ^:private menu-icon
|
||||
(deprecated-icon/icon-xref :menu (stl/css :menu-icon)))
|
||||
|
||||
(defn- on-restore-project
|
||||
[project]
|
||||
(let [on-accept #(st/emit! (dd/restore-project-immediately project))]
|
||||
(st/emit! (modal/show
|
||||
{:type :confirm
|
||||
:title (tr "dashboard.restore-project-confirmation.title")
|
||||
:message (tr "dashboard.restore-project-confirmation.description" (:name project))
|
||||
:accept-style :primary
|
||||
:accept-label (tr "labels.continue")
|
||||
:on-accept on-accept}))))
|
||||
|
||||
(defn- on-delete-project
|
||||
[project]
|
||||
(let [accept-fn #(st/emit! (dd/delete-project-immediately project))]
|
||||
(st/emit! (modal/show
|
||||
{:type :confirm
|
||||
:title (tr "dashboard.delete-forever-confirmation.title")
|
||||
:message (tr "dashboard.delete-project-forever-confirmation.description" (:name project))
|
||||
:accept-label (tr "dashboard.delete-forever-confirmation.title")
|
||||
:on-accept accept-fn}))))
|
||||
|
||||
(mf/defc header*
|
||||
{::mf/props :obj
|
||||
::mf/private true}
|
||||
@@ -41,6 +62,7 @@
|
||||
[:h1 (tr "dashboard.projects-title")]]])
|
||||
|
||||
(mf/defc deleted-project-menu*
|
||||
{::mf/private true}
|
||||
[{:keys [project show on-close top left]}]
|
||||
(let [top (d/nilv top 0)
|
||||
left (d/nilv left 0)
|
||||
@@ -48,25 +70,13 @@
|
||||
on-restore-project
|
||||
(mf/use-fn
|
||||
(mf/deps project)
|
||||
(fn []
|
||||
(let [on-accept #(st/emit! (dd/restore-project-immediately project))]
|
||||
(st/emit! (modal/show {:type :confirm
|
||||
:title (tr "dashboard.restore-project-confirmation.title")
|
||||
:message (tr "dashboard.restore-project-confirmation.description" (:name project))
|
||||
:accept-style :primary
|
||||
:accept-label (tr "labels.continue")
|
||||
:on-accept on-accept})))))
|
||||
(partial on-restore-project project))
|
||||
|
||||
on-delete-project
|
||||
(mf/use-fn
|
||||
(mf/deps project)
|
||||
(fn []
|
||||
(let [accept-fn #(st/emit! (dd/delete-project-immediately project))]
|
||||
(st/emit! (modal/show {:type :confirm
|
||||
:title (tr "dashboard.delete-forever-confirmation.title")
|
||||
:message (tr "dashboard.delete-project-forever-confirmation.description" (:name project))
|
||||
:accept-label (tr "dashboard.delete-forever-confirmation.title")
|
||||
:on-accept accept-fn})))))
|
||||
(partial on-delete-project project))
|
||||
|
||||
options
|
||||
(mf/with-memo [on-restore-project on-delete-project]
|
||||
[{:name (tr "dashboard.restore-project-button")
|
||||
@@ -174,8 +184,8 @@
|
||||
:limit limit
|
||||
:selected-files selected-files}])]]))
|
||||
|
||||
|
||||
(mf/defc menu*
|
||||
{::mf/private true}
|
||||
[{:keys [team-id section]}]
|
||||
(let [on-recent-click
|
||||
(mf/use-fn
|
||||
@@ -222,7 +232,8 @@
|
||||
(some #(= (:id project) (:project-id %))
|
||||
(vals deleted-map)))))
|
||||
(sort-by :modified-at)
|
||||
(reverse)))
|
||||
(reverse)
|
||||
(not-empty)))
|
||||
|
||||
team-id
|
||||
(get team :id)
|
||||
@@ -273,37 +284,44 @@
|
||||
|
||||
[:*
|
||||
[:> header* {:team team}]
|
||||
[:section {:class (stl/css :dashboard-container :no-bg)}
|
||||
[:section {:class (stl/css :dashboard-container :no-bg)
|
||||
:data-testid "deleted-page-section"}
|
||||
[:*
|
||||
[:div {:class (stl/css :no-bg)}
|
||||
|
||||
[:> menu* {:team-id team-id :section :dashboard-deleted}]
|
||||
|
||||
[:div {:class (stl/css :deleted-info-content)}
|
||||
[:p {:class (stl/css :deleted-info)}
|
||||
(tr "dashboard.trash-info-text-part1")
|
||||
[:span {:class (stl/css :info-text-highlight)}
|
||||
(tr "dashboard.trash-info-text-part2" deletion-days)]
|
||||
(tr "dashboard.trash-info-text-part3")
|
||||
[:br]
|
||||
(tr "dashboard.trash-info-text-part4")]
|
||||
[:div {:class (stl/css :deleted-options)}
|
||||
[:> button* {:variant "ghost"
|
||||
:type "button"
|
||||
:on-click on-restore-all}
|
||||
(tr "dashboard.restore-all-deleted-button")]
|
||||
[:> button* {:variant "destructive"
|
||||
:type "button"
|
||||
:icon "delete"
|
||||
:on-click on-delete-all}
|
||||
(tr "dashboard.clear-trash-button")]]]
|
||||
(if (seq projects)
|
||||
[:*
|
||||
[:div {:class (stl/css :deleted-info-content)}
|
||||
[:p {:class (stl/css :deleted-info)}
|
||||
(tr "dashboard.trash-info-text-part1")
|
||||
[:span {:class (stl/css :info-text-highlight)}
|
||||
(tr "dashboard.trash-info-text-part2" deletion-days)]
|
||||
(tr "dashboard.trash-info-text-part3")
|
||||
[:br]
|
||||
(tr "dashboard.trash-info-text-part4")]
|
||||
[:div {:class (stl/css :deleted-options)}
|
||||
[:> button* {:variant "ghost"
|
||||
:type "button"
|
||||
:on-click on-restore-all}
|
||||
(tr "dashboard.restore-all-deleted-button")]
|
||||
[:> button* {:variant "destructive"
|
||||
:type "button"
|
||||
:icon "delete"
|
||||
:on-click on-delete-all}
|
||||
(tr "dashboard.clear-trash-button")]]]
|
||||
|
||||
(when (seq projects)
|
||||
(for [{:keys [id] :as project} projects]
|
||||
(let [files (when deleted-map
|
||||
(->> (vals deleted-map)
|
||||
(filterv #(= id (:project-id %)))
|
||||
(sort-by :modified-at #(compare %2 %1))))]
|
||||
[:> deleted-project-item* {:project project
|
||||
:files files
|
||||
:key id}])))]]]]))
|
||||
(for [{:keys [id] :as project} projects]
|
||||
(let [files (when deleted-map
|
||||
(->> (vals deleted-map)
|
||||
(filterv #(= id (:project-id %)))
|
||||
(sort-by :modified-at #(compare %2 %1))))]
|
||||
[:> deleted-project-item* {:project project
|
||||
:files files
|
||||
:key id}]))]
|
||||
|
||||
;; when no deleted projects
|
||||
[:div {:class (stl/css :deleted-info-content)}
|
||||
[:p {:class (stl/css :deleted-info)}
|
||||
(tr "dashboard.trash-info-text-no-projects")]])]]]]))
|
||||
|
||||
@@ -4,35 +4,36 @@
|
||||
//
|
||||
// Copyright (c) KALEIDOS INC
|
||||
|
||||
@use "common/refactor/common-refactor.scss" as deprecated;
|
||||
@use "common/refactor/common-dashboard";
|
||||
@use "../ds/typography.scss" as t;
|
||||
@use "../ds/_borders.scss" as *;
|
||||
@use "../ds/spacing.scss" as *;
|
||||
@use "../ds/_sizes.scss" as *;
|
||||
@use "../ds/z-index.scss" as *;
|
||||
@use "ds/typography.scss" as t;
|
||||
@use "ds/_borders.scss" as *;
|
||||
@use "ds/spacing.scss" as *;
|
||||
@use "ds/_sizes.scss" as *;
|
||||
@use "ds/z-index.scss" as *;
|
||||
@use "ds/mixins.scss" as *;
|
||||
@use "ds/_utils.scss" as *;
|
||||
|
||||
.dashboard-container {
|
||||
flex: 1 0 0;
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
margin-inline-end: var(--sp-l);
|
||||
border-top: $b-1 solid var(--panel-border-color);
|
||||
border-block-start: $b-1 solid var(--panel-border-color);
|
||||
overflow-y: auto;
|
||||
padding-bottom: var(--sp-xxxl);
|
||||
padding-block-end: var(--sp-xxxl);
|
||||
}
|
||||
|
||||
.dashboard-projects {
|
||||
user-select: none;
|
||||
height: calc(100vh - deprecated.$s-64);
|
||||
block-size: calc(100vh - px2rem(64));
|
||||
}
|
||||
|
||||
.with-team-hero {
|
||||
height: calc(100vh - deprecated.$s-280);
|
||||
block-size: calc(100vh - px2rem(280));
|
||||
}
|
||||
|
||||
.dashboard-shared {
|
||||
width: calc(100vw - deprecated.$s-320);
|
||||
margin-inline-end: deprecated.$s-52;
|
||||
inline-size: calc(100vw - px2rem(320));
|
||||
margin-inline-end: px2rem(52);
|
||||
}
|
||||
|
||||
.search {
|
||||
@@ -66,8 +67,8 @@
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: var(--sp-s);
|
||||
width: 99%;
|
||||
max-height: $sz-40;
|
||||
inline-size: 99%;
|
||||
max-block-size: $sz-40;
|
||||
padding: var(--sp-s) var(--sp-s) var(--sp-s) var(--sp-l);
|
||||
margin-block-start: var(--sp-l);
|
||||
border-radius: $br-4;
|
||||
@@ -77,19 +78,19 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
width: 100%;
|
||||
min-height: var(--sp-xxxl);
|
||||
inline-size: 100%;
|
||||
min-block-size: $sz-32;
|
||||
margin-inline-start: var(--sp-s);
|
||||
}
|
||||
|
||||
.project-name {
|
||||
@include textEllipsis;
|
||||
@include t.use-typography("body-large");
|
||||
width: fit-content;
|
||||
margin-inline-end: var(--sp-m);
|
||||
line-height: 0.8;
|
||||
color: var(--title-foreground-color-hover);
|
||||
cursor: pointer;
|
||||
height: var(--sp-l);
|
||||
block-size: $sz-16;
|
||||
line-height: 0.8;
|
||||
margin-inline-end: var(--sp-m);
|
||||
}
|
||||
|
||||
.info-wrapper {
|
||||
@@ -116,8 +117,8 @@
|
||||
.add-file-btn,
|
||||
.options-btn {
|
||||
@extend .button-tertiary;
|
||||
height: var(--sp-xxxl);
|
||||
width: var(--sp-xxxl);
|
||||
block-size: $sz-32;
|
||||
inline-size: $sz-32;
|
||||
margin: 0 var(--sp-s);
|
||||
padding: var(--sp-s);
|
||||
}
|
||||
@@ -129,7 +130,7 @@
|
||||
}
|
||||
|
||||
.grid-container {
|
||||
width: 100%;
|
||||
inline-size: 100%;
|
||||
padding: 0 var(--sp-xs);
|
||||
}
|
||||
|
||||
@@ -139,11 +140,13 @@
|
||||
|
||||
.show-more {
|
||||
--show-more-color: var(--button-secondary-foreground-color-rest);
|
||||
@include deprecated.buttonStyle;
|
||||
@include t.use-typography("body-medium");
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: var(--sp-s);
|
||||
right: deprecated.$s-52;
|
||||
inset-block-start: var(--sp-s);
|
||||
inset-inline-end: px2rem(52);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
@@ -156,8 +159,8 @@
|
||||
}
|
||||
|
||||
.show-more-icon {
|
||||
height: var(--sp-l);
|
||||
width: var(--sp-l);
|
||||
block-size: $sz-16;
|
||||
inline-size: $sz-16;
|
||||
fill: none;
|
||||
stroke: var(--show-more-color);
|
||||
}
|
||||
@@ -165,7 +168,7 @@
|
||||
// Team hero
|
||||
.team-hero {
|
||||
background-color: var(--color-background-tertiary);
|
||||
border-radius: deprecated.$br-8;
|
||||
border-radius: $br-8;
|
||||
border: none;
|
||||
display: flex;
|
||||
margin: var(--sp-l);
|
||||
@@ -174,12 +177,11 @@
|
||||
|
||||
img {
|
||||
border-radius: $br-4;
|
||||
height: var(--sp-xl) 0;
|
||||
width: auto;
|
||||
inline-size: auto;
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
display: none;
|
||||
width: 0;
|
||||
inline-size: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -193,9 +195,8 @@
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: $sz-24;
|
||||
color: var(--color-foreground-primary);
|
||||
font-weight: deprecated.$fw400;
|
||||
font-size: px2rem(24);
|
||||
}
|
||||
|
||||
.info {
|
||||
@@ -215,8 +216,8 @@
|
||||
--close-icon-foreground-color: var(--icon-foreground);
|
||||
position: absolute;
|
||||
top: var(--sp-xl);
|
||||
right: var(--sp-xxl);
|
||||
width: var(--sp-xxl);
|
||||
inset-inline-end: var(--sp-xxl);
|
||||
inline-size: var(--sp-xxl);
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
@@ -231,20 +232,20 @@
|
||||
}
|
||||
|
||||
.invite {
|
||||
height: var(--sp-xxxl);
|
||||
width: deprecated.$s-180;
|
||||
block-size: $sz-32;
|
||||
inline-size: px2rem(180);
|
||||
}
|
||||
|
||||
.img-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: var(--sp-xl) 0;
|
||||
height: var(--sp-xl) 0;
|
||||
inline-size: var(--sp-xl) 0;
|
||||
block-size: var(--sp-xl) 0;
|
||||
overflow: hidden;
|
||||
border-radius: deprecated.$br-4;
|
||||
border-radius: $br-4;
|
||||
@media (max-width: 1200px) {
|
||||
display: none;
|
||||
width: 0;
|
||||
inline-size: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS INC
|
||||
|
||||
(ns app.main.ui.ds.layers.layer-button
|
||||
(:require-macros
|
||||
[app.main.style :as stl])
|
||||
(:require
|
||||
[app.main.ui.ds.foundations.assets.icon :as i :refer [icon*]]
|
||||
[rumext.v2 :as mf]))
|
||||
|
||||
(def ^:private schema:layer-button
|
||||
[:map
|
||||
[:label :string]
|
||||
[:description {:optional true} [:maybe :string]]
|
||||
[:class {:optional true} :string]
|
||||
[:expandable {:optional true} :boolean]
|
||||
[:expanded {:optional true} :boolean]
|
||||
[:icon {:optional true} :string]
|
||||
[:on-toggle-expand fn?]])
|
||||
|
||||
(mf/defc layer-button*
|
||||
{::mf/schema schema:layer-button}
|
||||
[{:keys [label description class is-expandable expanded icon on-toggle-expand children] :rest props}]
|
||||
(let [button-props (mf/spread-props props
|
||||
{:class [class (stl/css-case :layer-button true
|
||||
:layer-button--expandable is-expandable
|
||||
:layer-button--expanded expanded)]
|
||||
:type "button"
|
||||
:on-click on-toggle-expand})]
|
||||
[:div {:class (stl/css :layer-button-wrapper)}
|
||||
[:> "button" button-props
|
||||
[:div {:class (stl/css :layer-button-content)}
|
||||
(when is-expandable
|
||||
(if expanded
|
||||
[:> icon* {:icon-id i/arrow-down :class (stl/css :folder-node-icon)}]
|
||||
[:> icon* {:icon-id i/arrow-right :class (stl/css :folder-node-icon)}]))
|
||||
(when icon
|
||||
[:> icon* {:icon-id icon :class (stl/css :layer-button-icon)}])
|
||||
[:span {:class (stl/css :layer-button-name)}
|
||||
label]
|
||||
(when description
|
||||
[:span {:class (stl/css :layer-button-description)}
|
||||
description])
|
||||
[:span {:class (stl/css :layer-button-quantity)}]]]
|
||||
[:div {:class (stl/css :layer-button-actions)}
|
||||
children]]))
|
||||
@@ -1,56 +0,0 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
//
|
||||
// Copyright (c) KALEIDOS INC
|
||||
|
||||
@use "ds/_borders.scss" as *;
|
||||
@use "ds/_sizes.scss" as *;
|
||||
@use "ds/typography.scss" as *;
|
||||
@use "ds/colors.scss" as *;
|
||||
|
||||
.layer-button-wrapper {
|
||||
--layer-button-block-size: #{$sz-32};
|
||||
--layer-button-background: var(--color-background-primary);
|
||||
--layer-button-text: var(--color-foreground-secondary);
|
||||
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
block-size: var(--layer-button-block-size);
|
||||
|
||||
background: var(--layer-button-background);
|
||||
color: var(--layer-button-text);
|
||||
}
|
||||
|
||||
.layer-button {
|
||||
@include use-typography("body-small");
|
||||
|
||||
appearance: none;
|
||||
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
border: none;
|
||||
background: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.layer-button--expanded {
|
||||
& .layer-button-name {
|
||||
color: var(--color-foreground-primary);
|
||||
}
|
||||
}
|
||||
|
||||
.layer-button-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--sp-xs);
|
||||
}
|
||||
|
||||
.layer-button-description {
|
||||
padding: var(--sp-xs);
|
||||
background-color: var(--color-background-tertiary);
|
||||
border-radius: $br-6;
|
||||
}
|
||||
@@ -121,7 +121,7 @@
|
||||
[:div {:class (stl/css :modal-container)}
|
||||
[:div {:class (stl/css :modal-header)}
|
||||
[:h2 {:class (stl/css :modal-title)}
|
||||
(tr "dashboard.export.title")]
|
||||
(tr "files-download-modal.title")]
|
||||
[:button {:class (stl/css :modal-close-btn)
|
||||
:on-click on-cancel} deprecated-icon/close]]
|
||||
|
||||
@@ -129,8 +129,8 @@
|
||||
(= status :prepare)
|
||||
[:*
|
||||
[:div {:class (stl/css :modal-content)}
|
||||
[:p {:class (stl/css :modal-msg)} (tr "dashboard.export.explain")]
|
||||
[:p {:class (stl/css :modal-scd-msg)} (tr "dashboard.export.detail")]
|
||||
[:p {:class (stl/css :modal-msg)} (tr "files-download-modal.description-1")]
|
||||
[:p {:class (stl/css :modal-scd-msg)} (tr "files-download-modal.description-2")]
|
||||
|
||||
(for [type fexp/valid-types]
|
||||
[:div {:class (stl/css :export-option true)
|
||||
@@ -138,20 +138,20 @@
|
||||
[:label {:for (str "export-" type)
|
||||
:class (stl/css-case :global/checked (= selected type))}
|
||||
;; Execution time translation strings:
|
||||
;; (tr "dashboard.export.options.all.message")
|
||||
;; (tr "dashboard.export.options.all.title")
|
||||
;; (tr "dashboard.export.options.detach.message")
|
||||
;; (tr "dashboard.export.options.detach.title")
|
||||
;; (tr "dashboard.export.options.merge.message")
|
||||
;; (tr "dashboard.export.options.merge.title")
|
||||
;; (tr "files-download-modal.options.all.message")
|
||||
;; (tr "files-download-modal.options.all.title")
|
||||
;; (tr "files-download-modal.options.detach.message")
|
||||
;; (tr "files-download-modal.options.detach.title")
|
||||
;; (tr "files-download-modal.options.merge.message")
|
||||
;; (tr "files-download-modal.options.merge.title")
|
||||
[:span {:class (stl/css-case :global/checked (= selected type))}
|
||||
(when (= selected type)
|
||||
deprecated-icon/status-tick)]
|
||||
[:div {:class (stl/css :option-content)}
|
||||
[:h3 {:class (stl/css :modal-subtitle)}
|
||||
(tr (dm/str "dashboard.export.options." (d/name type) ".title"))]
|
||||
(tr (dm/str "files-download-modal.options." (d/name type) ".title"))]
|
||||
[:p {:class (stl/css :modal-msg)}
|
||||
(tr (dm/str "dashboard.export.options." (d/name type) ".message"))]]
|
||||
(tr (dm/str "files-download-modal.options." (d/name type) ".message"))]]
|
||||
|
||||
[:input {:type "radio"
|
||||
:class (stl/css :option-input)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
modifiers (dm/get-in modifiers [shape-id :modifiers])
|
||||
|
||||
shape (gsh/transform-shape shape modifiers)
|
||||
props (mf/spread-props props {:shape shape :file-id file-id :page-id page-id})]
|
||||
props (mf/spread-props props {:shape shape :file-id file-id :page-id page-id :libraries libraries})]
|
||||
|
||||
(case shape-type
|
||||
:frame [:> frame/options* props]
|
||||
|
||||
@@ -44,39 +44,6 @@
|
||||
[(seq (array/sort! empty))
|
||||
(seq (array/sort! filled))]))))
|
||||
|
||||
(mf/defc selected-set-info*
|
||||
{::mf/private true}
|
||||
[{:keys [tokens-lib selected-token-set-id]}]
|
||||
(let [selected-token-set
|
||||
(mf/with-memo [tokens-lib]
|
||||
(when selected-token-set-id
|
||||
(some-> tokens-lib (ctob/get-set selected-token-set-id))))
|
||||
|
||||
active-token-sets-names
|
||||
(mf/with-memo [tokens-lib]
|
||||
(some-> tokens-lib (ctob/get-active-themes-set-names)))
|
||||
|
||||
token-set-active?
|
||||
(mf/use-fn
|
||||
(mf/deps active-token-sets-names)
|
||||
(fn [name]
|
||||
(contains? active-token-sets-names name)))]
|
||||
[:div {:class (stl/css :sets-header-container)}
|
||||
[:> text* {:as "span"
|
||||
:typography "headline-small"
|
||||
:class (stl/css :sets-header)}
|
||||
(tr "workspace.tokens.tokens-section-title" (ctob/get-name selected-token-set))]
|
||||
[:div {:class (stl/css :sets-header-status) :title (tr "workspace.tokens.inactive-set-description")}
|
||||
;; NOTE: when no set in tokens-lib, the selected-token-set-id
|
||||
;; will be `nil`, so for properly hide the inactive message we
|
||||
;; check that at least `selected-token-set-id` has a value
|
||||
(when (and (some? selected-token-set-id)
|
||||
(not (token-set-active? (ctob/get-name selected-token-set))))
|
||||
[:*
|
||||
[:> icon* {:class (stl/css :sets-header-status-icon) :icon-id i/eye-off}]
|
||||
[:> text* {:as "span" :typography "body-small" :class (stl/css :sets-header-status-text)}
|
||||
(tr "workspace.tokens.inactive-set")]])]]))
|
||||
|
||||
(mf/defc tokens-section*
|
||||
{::mf/private true}
|
||||
[{:keys [tokens-lib active-tokens resolved-active-tokens]}]
|
||||
@@ -98,7 +65,9 @@
|
||||
selected-token-set-id
|
||||
(mf/deref refs/selected-token-set-id)
|
||||
|
||||
|
||||
selected-token-set
|
||||
(when selected-token-set-id
|
||||
(some-> tokens-lib (ctob/get-set selected-token-set-id)))
|
||||
|
||||
;; If we have not selected any set explicitly we just
|
||||
;; select the first one from the list of sets
|
||||
@@ -123,9 +92,15 @@
|
||||
tokens)]
|
||||
(ctob/group-by-type tokens)))
|
||||
|
||||
active-token-sets-names
|
||||
(mf/with-memo [tokens-lib]
|
||||
(some-> tokens-lib (ctob/get-active-themes-set-names)))
|
||||
|
||||
|
||||
|
||||
token-set-active?
|
||||
(mf/use-fn
|
||||
(mf/deps active-token-sets-names)
|
||||
(fn [name]
|
||||
(contains? active-token-sets-names name)))
|
||||
|
||||
[empty-group filled-group]
|
||||
(mf/with-memo [tokens-by-type]
|
||||
@@ -143,27 +118,34 @@
|
||||
|
||||
[:*
|
||||
[:& token-context-menu]
|
||||
|
||||
[:& selected-set-info* {:tokens-lib tokens-lib
|
||||
:selected-token-set-id selected-token-set-id}]
|
||||
[:div {:class (stl/css :sets-header-container)}
|
||||
[:> text* {:as "span" :typography "headline-small" :class (stl/css :sets-header)} (tr "workspace.tokens.tokens-section-title" (ctob/get-name selected-token-set))]
|
||||
[:div {:class (stl/css :sets-header-status) :title (tr "workspace.tokens.inactive-set-description")}
|
||||
;; NOTE: when no set in tokens-lib, the selected-token-set-id
|
||||
;; will be `nil`, so for properly hide the inactive message we
|
||||
;; check that at least `selected-token-set-id` has a value
|
||||
(when (and (some? selected-token-set-id)
|
||||
(not (token-set-active? (ctob/get-name selected-token-set))))
|
||||
[:*
|
||||
[:> icon* {:class (stl/css :sets-header-status-icon) :icon-id i/eye-off}]
|
||||
[:> text* {:as "span" :typography "body-small" :class (stl/css :sets-header-status-text)}
|
||||
(tr "workspace.tokens.inactive-set")]])]]
|
||||
|
||||
(for [type filled-group]
|
||||
(let [tokens (get tokens-by-type type)]
|
||||
[:> token-group* {:key (name type)
|
||||
:tokens tokens
|
||||
:is-expanded (get open-status type false)
|
||||
:is-open (get open-status type false)
|
||||
:type type
|
||||
:selected-ids selected
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens resolved-active-tokens
|
||||
:tokens-lib tokens-lib
|
||||
:selected-token-set-id selected-token-set-id}]))
|
||||
:tokens tokens}]))
|
||||
|
||||
(for [type empty-group]
|
||||
[:> token-group* {:key (name type)
|
||||
:tokens []
|
||||
:type type
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens resolved-active-tokens}])]))
|
||||
:is-selected-inside-layout :is-selected-inside-layout
|
||||
:active-theme-tokens resolved-active-tokens
|
||||
:tokens []}])]))
|
||||
|
||||
@@ -349,6 +349,7 @@
|
||||
(let [form (mf/use-ctx fc/context)
|
||||
input-name name
|
||||
|
||||
|
||||
error
|
||||
(get-in @form [:errors :value value-subfield index input-name])
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
on-change
|
||||
(mf/use-fn
|
||||
(mf/deps input-name)
|
||||
(fn [type]
|
||||
(let [is-inner? (= type "inner")]
|
||||
(fn [id]
|
||||
(let [is-inner? (= id "inner")]
|
||||
(swap! form assoc-in [:data :value indexed-type index input-name] is-inner?))))
|
||||
|
||||
props (mf/spread-props props {:default-selected (if value "inner" "drop")
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
[token index prop value-subfield]
|
||||
(let [value (get-in token [:value value-subfield index prop])]
|
||||
(d/without-nils
|
||||
{:type (if (= prop :color) :color :number)
|
||||
{:type (if (= prop :color) :color :dimensions)
|
||||
:value value})))
|
||||
|
||||
(mf/defc shadow-formset*
|
||||
@@ -114,7 +114,7 @@
|
||||
:token inset-token
|
||||
:tokens tokens
|
||||
:index index
|
||||
:value-subfield value-subfield
|
||||
:indexed-type value-subfield
|
||||
:name :inset}]
|
||||
(when show-button
|
||||
[:> icon-button* {:variant "ghost"
|
||||
@@ -269,13 +269,25 @@
|
||||
|
||||
[:value
|
||||
[:map
|
||||
[:shadow {:optinal true}
|
||||
[:shadow {:optional true}
|
||||
[:vector
|
||||
[:map
|
||||
[:offset-x {:optional true} [:maybe :string]]
|
||||
[:offset-y {:optional true} [:maybe :string]]
|
||||
[:blur {:optional true} [:maybe :string]]
|
||||
[:spread {:optional true} [:maybe :string]]
|
||||
[:blur {:optional true}
|
||||
[:and
|
||||
[:maybe :string]
|
||||
[:fn {:error/fn #(tr "workspace.tokens.shadow-token-blur-value-error")}
|
||||
(fn [blur]
|
||||
(let [n (d/parse-double blur)]
|
||||
(or (nil? n) (not (< n 0)))))]]]
|
||||
[:spread {:optional true}
|
||||
[:and
|
||||
[:maybe :string]
|
||||
[:fn {:error/fn #(tr "workspace.tokens.shadow-token-spread-value-error")}
|
||||
(fn [spread]
|
||||
(let [n (d/parse-double spread)]
|
||||
(or (nil? n) (not (< n 0)))))]]]
|
||||
[:color {:optional true} [:maybe :string]]
|
||||
[:color-result {:optional true} ::sm/any]
|
||||
[:inset {:optional true} [:maybe :boolean]]]]]
|
||||
|
||||
@@ -8,9 +8,6 @@
|
||||
(ns app.main.ui.workspace.tokens.management.group
|
||||
(:require-macros [app.main.style :as stl])
|
||||
(:require
|
||||
[app.common.data :as d]
|
||||
[app.common.data.macros :as dm]
|
||||
[app.common.types.tokens-lib :as ctob]
|
||||
[app.main.data.modal :as modal]
|
||||
[app.main.data.workspace.tokens.application :as dwta]
|
||||
[app.main.data.workspace.tokens.library-edit :as dwtl]
|
||||
@@ -19,70 +16,51 @@
|
||||
[app.main.ui.context :as ctx]
|
||||
[app.main.ui.ds.buttons.icon-button :refer [icon-button*]]
|
||||
[app.main.ui.ds.foundations.assets.icon :as i]
|
||||
[app.main.ui.ds.layers.layer-button :refer [layer-button*]]
|
||||
[app.main.ui.workspace.tokens.management.token-tree :refer [token-tree*]]
|
||||
[app.main.ui.workspace.sidebar.assets.common :as cmm]
|
||||
[app.main.ui.workspace.tokens.management.token-pill :refer [token-pill*]]
|
||||
[app.util.dom :as dom]
|
||||
[app.util.i18n :refer [tr]]
|
||||
[rumext.v2 :as mf]))
|
||||
|
||||
|
||||
(defn token-section-icon
|
||||
[type]
|
||||
(case type
|
||||
:border-radius i/corner-radius
|
||||
:color i/drop
|
||||
:boolean i/boolean-difference
|
||||
:font-family i/text-font-family
|
||||
:font-size i/text-font-size
|
||||
:letter-spacing i/text-letterspacing
|
||||
:text-case i/text-mixed
|
||||
:text-decoration i/text-underlined
|
||||
:font-weight i/text-font-weight
|
||||
:typography i/text-typography
|
||||
:opacity i/percentage
|
||||
:number i/number
|
||||
:rotation i/rotation
|
||||
:spacing i/padding-extended
|
||||
:string i/text-mixed
|
||||
:stroke-width i/stroke-size
|
||||
:dimensions i/expand
|
||||
:sizing i/expand
|
||||
:shadow i/drop-shadow
|
||||
:border-radius "corner-radius"
|
||||
:color "drop"
|
||||
:boolean "boolean-difference"
|
||||
:font-family "text-font-family"
|
||||
:font-size "text-font-size"
|
||||
:letter-spacing "text-letterspacing"
|
||||
:text-case "text-mixed"
|
||||
:text-decoration "text-underlined"
|
||||
:font-weight "text-font-weight"
|
||||
:typography "text-typography"
|
||||
:opacity "percentage"
|
||||
:number "number"
|
||||
:rotation "rotation"
|
||||
:spacing "padding-extended"
|
||||
:string "text-mixed"
|
||||
:stroke-width "stroke-size"
|
||||
:dimensions "expand"
|
||||
:sizing "expand"
|
||||
:shadow "drop-shadow"
|
||||
"add"))
|
||||
|
||||
(def ^:private schema:token-group
|
||||
[:map
|
||||
[:type :keyword]
|
||||
[:tokens :any]
|
||||
[:selected-shapes :any]
|
||||
[:is-selected-inside-layout {:optional true} [:maybe :boolean]]
|
||||
[:active-theme-tokens {:optional true} :any]
|
||||
[:selected-token-set-id {:optional true} :any]
|
||||
[:tokens-lib {:optional true} :any]
|
||||
[:on-token-pill-click {:optional true} fn?]
|
||||
[:on-context-menu {:optional true} fn?]])
|
||||
|
||||
(mf/defc token-group*
|
||||
{::mf/schema schema:token-group}
|
||||
[{:keys [type tokens selected-shapes is-selected-inside-layout active-theme-tokens selected-token-set-id tokens-lib is-expanded selected-ids]}]
|
||||
{::mf/private true}
|
||||
[{:keys [type tokens selected-shapes is-selected-inside-layout active-theme-tokens is-open selected-ids]}]
|
||||
(let [{:keys [modal title]}
|
||||
(get dwta/token-properties type)
|
||||
editing-ref (mf/deref refs/workspace-editor-state)
|
||||
not-editing? (empty? editing-ref)
|
||||
|
||||
is-expanded (d/nilv is-expanded false)
|
||||
|
||||
can-edit?
|
||||
(mf/use-ctx ctx/can-edit?)
|
||||
|
||||
is-selected-inside-layout (d/nilv is-selected-inside-layout false)
|
||||
|
||||
tokens
|
||||
(mf/with-memo [tokens]
|
||||
(vec (sort-by :name tokens)))
|
||||
|
||||
expandable? (d/nilv (seq tokens) false)
|
||||
|
||||
on-context-menu
|
||||
(mf/use-fn
|
||||
(fn [event token]
|
||||
@@ -95,8 +73,8 @@
|
||||
|
||||
on-toggle-open-click
|
||||
(mf/use-fn
|
||||
(mf/deps is-expanded type)
|
||||
#(st/emit! (dwtl/set-token-type-section-open type (not is-expanded))))
|
||||
(mf/deps is-open type)
|
||||
#(st/emit! (dwtl/set-token-type-section-open type (not is-open))))
|
||||
|
||||
on-popover-open-click
|
||||
(mf/use-fn
|
||||
@@ -118,36 +96,33 @@
|
||||
(mf/use-fn
|
||||
(mf/deps not-editing? selected-ids)
|
||||
(fn [event token]
|
||||
(let [token (ctob/get-token tokens-lib selected-token-set-id (:id token))]
|
||||
(dom/stop-propagation event)
|
||||
(when (and not-editing? (seq selected-shapes) (not= (:type token) :number))
|
||||
(st/emit! (dwta/toggle-token {:token token
|
||||
:shape-ids selected-ids}))))))]
|
||||
(dom/stop-propagation event)
|
||||
(when (and not-editing? (seq selected-shapes) (not= (:type token) :number))
|
||||
(st/emit! (dwta/toggle-token {:token token
|
||||
:shape-ids selected-ids})))))]
|
||||
|
||||
[:div {:class (stl/css :token-section-wrapper)
|
||||
:data-testid (dm/str "section-" (name type))}
|
||||
[:> layer-button* {:label title
|
||||
:expanded is-expanded
|
||||
:description (when expandable? (dm/str (count tokens)))
|
||||
:is-expandable expandable?
|
||||
:aria-expanded is-expanded
|
||||
:aria-controls (dm/str "token-tree-" (name type))
|
||||
:on-toggle-expand on-toggle-open-click
|
||||
:icon (token-section-icon type)}
|
||||
(when can-edit?
|
||||
[:> icon-button* {:id (str "add-token-button-" title)
|
||||
:icon "add"
|
||||
:aria-label (tr "workspace.tokens.add-token" title)
|
||||
:variant "ghost"
|
||||
:on-click on-popover-open-click
|
||||
:class (stl/css :token-section-icon)}])]
|
||||
(when is-expanded
|
||||
[:> token-tree* {:tokens tokens
|
||||
:id (dm/str "token-tree-" (name type))
|
||||
:tokens-lib tokens-lib
|
||||
:selected-shapes selected-shapes
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:selected-token-set-id selected-token-set-id
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:on-token-pill-click on-token-pill-click
|
||||
:on-context-menu on-context-menu}])]))
|
||||
[:div {:on-click on-toggle-open-click :class (stl/css :token-section-wrapper)}
|
||||
[:> cmm/asset-section* {:icon (token-section-icon type)
|
||||
:title title
|
||||
:section :tokens
|
||||
:assets-count (count tokens)
|
||||
:is-open is-open}
|
||||
[:> cmm/asset-section-block* {:role :title-button}
|
||||
(when can-edit?
|
||||
[:> icon-button* {:on-click on-popover-open-click
|
||||
:variant "ghost"
|
||||
:icon i/add
|
||||
:id (str "add-token-button-" title)
|
||||
:aria-label (tr "workspace.tokens.add-token" title)}])]
|
||||
(when is-open
|
||||
[:> cmm/asset-section-block* {:role :content}
|
||||
[:div {:class (stl/css :token-pills-wrapper)}
|
||||
(for [token tokens]
|
||||
[:> token-pill*
|
||||
{:key (:name token)
|
||||
:token token
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:on-click on-token-pill-click
|
||||
:on-context-menu on-context-menu}])]])]]))
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
//
|
||||
// Copyright (c) KALEIDOS INC
|
||||
|
||||
.token-pills-wrapper {
|
||||
display: flex;
|
||||
gap: var(--sp-xs);
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
@@ -307,9 +307,10 @@
|
||||
:class (stl/css :token-pill-icon)}])
|
||||
|
||||
(if contains-path?
|
||||
(let [[_ last-part] (cpn/split-by-last-period name)]
|
||||
(let [[first-part last-part] (cpn/split-by-last-period name)]
|
||||
[:span {:class (stl/css :divided-name-wrapper)
|
||||
:aria-label name}
|
||||
[:span {:class (stl/css :first-name-wrapper)} first-part]
|
||||
[:span {:class (stl/css :last-name-wrapper)} last-part]])
|
||||
[:span {:class (stl/css :name-wrapper)
|
||||
:aria-label name}
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
;;
|
||||
;; Copyright (c) KALEIDOS INC
|
||||
|
||||
(ns app.main.ui.workspace.tokens.management.token-tree
|
||||
(:require-macros [app.main.style :as stl])
|
||||
(:require
|
||||
[app.common.path-names :as cpn]
|
||||
[app.common.types.tokens-lib :as ctob]
|
||||
[app.main.ui.ds.layers.layer-button :refer [layer-button*]]
|
||||
[app.main.ui.workspace.tokens.management.token-pill :refer [token-pill*]]
|
||||
[rumext.v2 :as mf]))
|
||||
|
||||
(def ^:private schema:folder-node
|
||||
[:map
|
||||
[:node :any]
|
||||
[:selected-shapes :any]
|
||||
[:is-selected-inside-layout {:optional true} :boolean]
|
||||
[:active-theme-tokens {:optional true} :any]
|
||||
[:selected-token-set-id {:optional true} :any]
|
||||
[:tokens-lib {:optional true} :any]
|
||||
[:on-token-pill-click {:optional true} fn?]
|
||||
[:on-context-menu {:optional true} fn?]])
|
||||
|
||||
(mf/defc folder-node*
|
||||
{::mf/schema schema:folder-node}
|
||||
[{:keys [node selected-shapes is-selected-inside-layout active-theme-tokens selected-token-set-id tokens-lib on-token-pill-click on-context-menu]}]
|
||||
(let [expanded* (mf/use-state false)
|
||||
expanded (deref expanded*)
|
||||
swap-folder-expanded #(swap! expanded* not)]
|
||||
[:li {:class (stl/css :folder-node)}
|
||||
[:> layer-button* {:label (:name node)
|
||||
:expanded expanded
|
||||
:aria-expanded expanded
|
||||
:aria-controls (str "folder-children-" (:path node))
|
||||
:is-expandable (not (:leaf node))
|
||||
:on-toggle-expand swap-folder-expanded}]
|
||||
(when expanded
|
||||
(let [children-fn (:children-fn node)]
|
||||
[:div {:class (stl/css :folder-children-wrapper)
|
||||
:id (str "folder-children-" (:path node))}
|
||||
(when children-fn
|
||||
(let [children (children-fn)]
|
||||
(for [child children]
|
||||
(if (not (:leaf child))
|
||||
[:ul {:class (stl/css :node-parent)}
|
||||
[:> folder-node* {:key (:path child)
|
||||
:node child
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:on-token-pill-click on-token-pill-click
|
||||
:on-context-menu on-context-menu
|
||||
:tokens-lib tokens-lib
|
||||
:selected-token-set-id selected-token-set-id}]]
|
||||
(let [id (:id (:leaf child))
|
||||
token (ctob/get-token tokens-lib selected-token-set-id id)]
|
||||
[:> token-pill*
|
||||
{:key id
|
||||
:token token
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:on-click on-token-pill-click
|
||||
:on-context-menu on-context-menu}])))))]))]))
|
||||
|
||||
(def ^:private schema:token-tree
|
||||
[:map
|
||||
[:tokens :any]
|
||||
[:selected-shapes :any]
|
||||
[:is-selected-inside-layout {:optional true} :boolean]
|
||||
[:active-theme-tokens {:optional true} :any]
|
||||
[:selected-token-set-id {:optional true} :any]
|
||||
[:tokens-lib {:optional true} :any]
|
||||
[:on-token-pill-click {:optional true} fn?]
|
||||
[:on-context-menu {:optional true} fn?]])
|
||||
|
||||
(mf/defc token-tree*
|
||||
{::mf/schema schema:token-tree}
|
||||
[{:keys [tokens selected-shapes is-selected-inside-layout active-theme-tokens tokens-lib selected-token-set-id on-token-pill-click on-context-menu]}]
|
||||
(let [separator "."
|
||||
tree (mf/use-memo
|
||||
(mf/deps tokens)
|
||||
(fn []
|
||||
(cpn/build-tree-root tokens separator)))]
|
||||
[:div {:class (stl/css :token-tree-wrapper)}
|
||||
(for [node tree]
|
||||
[:ul {:class (stl/css :node-parent)
|
||||
:key (:path node)
|
||||
:style {:--node-depth (inc (:depth node))}}
|
||||
(if (:leaf node)
|
||||
(let [token (ctob/get-token tokens-lib selected-token-set-id (get-in node [:leaf :id]))]
|
||||
[:> token-pill*
|
||||
{:token token
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:on-click on-token-pill-click
|
||||
:on-context-menu on-context-menu}])
|
||||
;; Render segment folder
|
||||
[:> folder-node* {:node node
|
||||
:selected-shapes selected-shapes
|
||||
:is-selected-inside-layout is-selected-inside-layout
|
||||
:active-theme-tokens active-theme-tokens
|
||||
:on-token-pill-click on-token-pill-click
|
||||
:on-context-menu on-context-menu
|
||||
:tokens-lib tokens-lib
|
||||
:selected-token-set-id selected-token-set-id}])])]))
|
||||
@@ -1,39 +0,0 @@
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
//
|
||||
// Copyright (c) KALEIDOS INC
|
||||
|
||||
@use "ds/_borders.scss" as *;
|
||||
|
||||
.token-tree-wrapper {
|
||||
padding-block-end: var(--sp-s);
|
||||
}
|
||||
|
||||
.node-parent {
|
||||
--node-spacing: var(--sp-l);
|
||||
--node-depth: 0;
|
||||
|
||||
margin-block-end: 0;
|
||||
padding-inline-start: calc(var(--node-spacing) * var(--node-depth));
|
||||
}
|
||||
|
||||
.folder-children-wrapper:has(> button) {
|
||||
margin-inline-start: var(--sp-s);
|
||||
padding-inline-start: var(--sp-s);
|
||||
border-inline-start: $b-2 solid var(--color-background-quaternary);
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
column-gap: var(--sp-xs);
|
||||
|
||||
& .node-parent {
|
||||
flex: 1 0 100%;
|
||||
|
||||
&:last-of-type {
|
||||
margin-block-end: var(--sp-s);
|
||||
}
|
||||
}
|
||||
& .token-pill {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
}
|
||||
@@ -199,7 +199,7 @@
|
||||
:string-or-size-array (format-string-or-size-array value)
|
||||
:keyword (format-keyword value)
|
||||
:tracks (format-tracks value)
|
||||
:shadow (format-shadow value options)
|
||||
:shadows (format-shadow value options)
|
||||
:blur (format-blur value)
|
||||
:matrix (format-matrix value)
|
||||
(if (keyword? value) (d/name value) value))))
|
||||
|
||||
@@ -47,17 +47,18 @@
|
||||
[acc {:keys [schema in value type] :as problem}]
|
||||
(let [props (m/properties schema)
|
||||
tprops (m/type-properties schema)
|
||||
field (or (first in)
|
||||
(:error/field props))
|
||||
|
||||
field (or (:error/field props)
|
||||
in)
|
||||
field (if (vector? field)
|
||||
field
|
||||
[field])]
|
||||
|
||||
(if (contains? acc field)
|
||||
(if (and (= 1 (count field))
|
||||
(contains? acc (first field)))
|
||||
acc
|
||||
(cond
|
||||
(nil? field)
|
||||
(or (nil? field)
|
||||
(empty? field))
|
||||
acc
|
||||
|
||||
(or (= type :malli.core/missing-key)
|
||||
|
||||
@@ -392,7 +392,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "تحميل %s ملفات أساسية (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* ربما يحتوي على مكوّنات، رسوميات والوان و/أو خطوط."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -403,30 +403,30 @@ msgstr ""
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"سيتم ادراج الملفات التي لها مكتبات مشتركة في التصدير، مع الحفاظ على روابطهم."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "صدّر المكتبات المشتركة"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"لن يتم تضمين المكتبات المشتركة في التصدير ولن يتم إضافة أي أصول إلى "
|
||||
"المكتبة. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "عامل أصول المكتبة المشتركة كعناصر بسيطة"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr "سيتم تصدير ملفك مع دمج جميع الأصول الخارجية في مكتبة الملفات."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "تضمين أصول المكتبة المشتركة في مكتبات الملفات"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -380,7 +380,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Baixa %s fitxers estàndard (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Pot incloure components, gràfics, colors i/o tipografies."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -390,33 +390,33 @@ msgstr ""
|
||||
"voleu fer amb els seus recursos*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Els fitxers amb biblioteques compartides s’inclouran a l’exportació, "
|
||||
"mantenint la vinculació."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exporta les biblioteques compartides"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Les biblioteques compartides no s'inclouran en l'exportació i no s'afegiran "
|
||||
"recursos a la biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Tracta els recursos de la biblioteca compartida com a objectes bàsics"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"El fitxer s'exportarà amb tots els recursos externs fusionats a la "
|
||||
"biblioteca de fitxers."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr ""
|
||||
"Inclou els recursos de la biblioteca compartida a les biblioteques del "
|
||||
"fitxer"
|
||||
|
||||
@@ -530,7 +530,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Stáhnout %s soubory (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Může obsahovat komponenty, grafiku, barvy a/nebo typografii."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -540,33 +540,33 @@ msgstr ""
|
||||
"Co chcete dělat s jejich položkami*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Soubory se sdílenými knihovnami budou zahrnuty do exportu, čímž se zachová "
|
||||
"jejich propojení."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportovat sdílené knihovny"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Sdílené knihovny nebudou zahrnuty do exportu a do knihovny nebudou přidány "
|
||||
"žádné položky. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Zacházet s položkami sdílené knihovny jako se základními objekty"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Váš soubor bude exportován se všemi externími položkami sloučenými do "
|
||||
"knihovny souborů."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Zahrnout sdílené položky knihovny do knihoven souborů"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -6456,10 +6456,6 @@ msgstr "Nástroje"
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "Hodnota není platná"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Přejmenováním tohoto tokenu se přeruší jakýkoli odkaz na jeho starý název."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Položky"
|
||||
|
||||
@@ -573,7 +573,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "%s Standarddateien herunterladen (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* kann Komponenten, Grafiken, Farben und/oder Textstile enthalten."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -585,33 +585,33 @@ msgstr ""
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Dateien mit geteilten Bibliotheken werden exportiert, und ihre Verknüpfungen "
|
||||
"bleiben erhalten."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Geteilte Bibliotheken exportieren"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Geteilte Bibliotheken werden nicht exportiert und der Bibliothek werden "
|
||||
"keine Assets hinzugefügt. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Assets aus geteilten Bibliotheken als gewöhnliche Objekte behandeln"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Ihre Datei wird exportiert, und alle externen Assets werden der "
|
||||
"Dateibibliothek hinzugefügt."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Assets aus geteilten Bibliotheken in die Dateibibliothek aufnehmen"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -7175,12 +7175,6 @@ msgstr "Der Wert ist nicht gültig"
|
||||
msgid "workspace.tokens.value-with-percent"
|
||||
msgstr "Ungültiger Wert: % ist nicht zulässig."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr ""
|
||||
"Die Umbenennung dieses Tokens macht jeden Verweis auf seinen alten Namen "
|
||||
"kaputt."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Assets"
|
||||
|
||||
@@ -564,48 +564,48 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Download %s standard files (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Might include components, graphics, colors and/or typographies."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
msgid "dashboard.export.explain"
|
||||
msgstr ""
|
||||
"One or more files that you want to export are using shared libraries. What "
|
||||
"One or more files that you want to download are using shared libraries. What "
|
||||
"do you want to do with their assets*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Files with shared libraries will be included in the export, maintaining "
|
||||
"their linkage."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Export shared libraries"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Shared libraries will not be included in the export and no assets will be "
|
||||
"added to the library. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Treat shared library assets as basic objects"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Your file will be exported with all external assets merged into the file "
|
||||
"library."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Include shared library assets in file libraries"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
msgid "dashboard.export.title"
|
||||
msgstr "Export files"
|
||||
msgid "files-download-modal.title"
|
||||
msgstr "Download files"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:317
|
||||
msgid "dashboard.fonts.deleted-placeholder"
|
||||
@@ -7543,6 +7543,42 @@ msgstr "Color"
|
||||
msgid "workspace.tokens.composite-line-height-needs-font-size"
|
||||
msgstr "Line Height depends on Font Size. Add a Font Size to get the resolved value."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-token-references"
|
||||
msgstr "Remap Token References"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.renaming-token-from-to"
|
||||
msgstr "Renaming token from '%s' to '%s'"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.references-found"
|
||||
msgstr "%s references found in your design"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-explanation"
|
||||
msgstr "All references to this token will be automatically updated to use the new name."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.no-references-found"
|
||||
msgstr "No references found"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.no-remap-needed"
|
||||
msgstr "This token is not currently used in your design, so no remapping is needed."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remapping-in-progress"
|
||||
msgstr "Remapping token references..."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-and-rename"
|
||||
msgstr "Remap & Rename"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.rename-only"
|
||||
msgstr "Rename"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:78
|
||||
msgid "workspace.tokens.create-new-theme"
|
||||
msgstr "Create your first theme now."
|
||||
@@ -8032,6 +8068,14 @@ msgstr "Name"
|
||||
msgid "workspace.tokens.token-name-duplication-validation-error"
|
||||
msgstr "A token already exists at the path: %s"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs
|
||||
msgid "workspace.tokens.shadow-token-blur-value-error"
|
||||
msgstr "Blur value cannot be negative"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs
|
||||
msgid "workspace.tokens.shadow-token-spread-value-error"
|
||||
msgstr "Spread value cannot be negative"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:42, src/app/main/ui/workspace/tokens/management/create/form.cljs:68
|
||||
msgid "workspace.tokens.token-name-length-validation-error"
|
||||
msgstr "Name should be at least 1 character"
|
||||
@@ -8076,7 +8120,7 @@ msgstr "Type '%s' is not supported (%s)\n"
|
||||
msgid "workspace.tokens.use-reference"
|
||||
msgstr "Use a reference"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:131
|
||||
#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:133
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "The value is not valid"
|
||||
|
||||
@@ -8088,10 +8132,6 @@ msgstr "Invalid value: % is not allowed."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Invalid value: Units are not allowed."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Renaming this token will break any reference to its old name."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Assets"
|
||||
@@ -8449,6 +8489,9 @@ msgstr "Restore project"
|
||||
msgid "dashboard.delete-project-button"
|
||||
msgstr "Delete project"
|
||||
|
||||
msgid "dashboard.trash-info-text-no-projects"
|
||||
msgstr "Your trash is empty. Deleted files and projects will appear here."
|
||||
|
||||
msgid "dashboard.trash-info-text-part1"
|
||||
msgstr "Deleted files will remain in the trash for"
|
||||
|
||||
|
||||
@@ -573,48 +573,48 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Descargar %s archivos estándar (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Pueden incluir components, gráficos, colores y/o tipografias."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
msgid "dashboard.export.explain"
|
||||
msgstr ""
|
||||
"Uno o mas ficheros que quieres exportar usan librerias compartidas. ¿Qué "
|
||||
"Uno o mas ficheros que quieres descargar usan librerias compartidas. ¿Qué "
|
||||
"quieres hacer con los recursos*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Ficheros con librerias compartidas se inclurán en el paquete de exportación "
|
||||
"y mantendrán los enlaces."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportar librerias compartidas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Las biblioteca compartidas no se incluirán en la exportación y ningún "
|
||||
"recurso será incluido en la biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Usar los recursos como objetos básicos"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Tu fichero será exportado con todos los recursos dentro de la libreria del "
|
||||
"propio fichero."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Incluir librerias compartidas dentro de las librerias del fichero"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
msgid "dashboard.export.title"
|
||||
msgstr "Exportar ficheros"
|
||||
msgid "files-download-modal.title"
|
||||
msgstr "Descargar ficheros"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:317
|
||||
msgid "dashboard.fonts.deleted-placeholder"
|
||||
@@ -4420,6 +4420,42 @@ msgstr "Mostrar/ocultar recursos"
|
||||
msgid "shortcuts.toggle-colorpalette"
|
||||
msgstr "Mostrar/ocultar paleta de colores"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-token-references"
|
||||
msgstr "Actualizar referencias de token"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.renaming-token-from-to"
|
||||
msgstr "Renombrando el token de '%s' a '%s'"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.references-found"
|
||||
msgstr "%s referencias encontradas en tu diseño"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-explanation"
|
||||
msgstr "Todas las referencias a este token se actualizarán automáticamente para usar el nuevo nombre."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.no-references-found"
|
||||
msgstr "No se encontraron referencias"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.no-remap-needed"
|
||||
msgstr "Este token no se utiliza actualmente en tu diseño, por lo que no es necesario actualizar referencias."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remapping-in-progress"
|
||||
msgstr "Actualizando referencias de token..."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.remap-and-rename"
|
||||
msgstr "Actualizar referencias y renombrar"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/remapping_modal.cljs
|
||||
msgid "workspace.tokens.rename-only"
|
||||
msgstr "Renombrar"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:185
|
||||
msgid "shortcuts.toggle-focus-mode"
|
||||
msgstr "Mostrar/ocultar focus mode"
|
||||
@@ -7908,6 +7944,14 @@ msgstr "Nombre"
|
||||
msgid "workspace.tokens.token-name-duplication-validation-error"
|
||||
msgstr "Ya existe un token en la ruta: %s"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs
|
||||
msgid "workspace.tokens.shadow-token-blur-value-error"
|
||||
msgstr "El valor de blur no puede ser negativo"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs
|
||||
msgid "workspace.tokens.shadow-token-spread-value-error"
|
||||
msgstr "El valor de spread no puede ser negativo"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:42, src/app/main/ui/workspace/tokens/management/create/form.cljs:68
|
||||
msgid "workspace.tokens.token-name-length-validation-error"
|
||||
msgstr "El nombre debería ser de al menos 1 caracter"
|
||||
@@ -7958,10 +8002,6 @@ msgstr "El valor no es válido"
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Valor no válido: No se permiten unidades."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Al renombrar este token se romperán las referencias al nombre anterior"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Recursos"
|
||||
@@ -8302,6 +8342,9 @@ msgstr "Restaurar proyecto"
|
||||
msgid "dashboard.delete-project-button"
|
||||
msgstr "Eliminar proyecto"
|
||||
|
||||
msgid "dashboard.trash-info-text-no-projects"
|
||||
msgstr "Tu papelera está vacía. Los archivos y proyectos eliminados aparecerán aquí."
|
||||
|
||||
msgid "dashboard.trash-info-text-part1"
|
||||
msgstr "Los archivos eliminados permanecerán en la papelera durante"
|
||||
|
||||
@@ -8314,9 +8357,6 @@ msgstr "Después de eso, serán eliminados permanentemente."
|
||||
msgid "dashboard.trash-info-text-part4"
|
||||
msgstr "Si cambias de opinión, puedes restaurarlos o eliminarlos permanentemente desde el menú de cada archivo."
|
||||
|
||||
msgid "dashboard.deleted.delete-forever"
|
||||
msgstr "Eliminar para siempre"
|
||||
|
||||
msgid "dashboard.restore-all-confirmation.title"
|
||||
msgstr "Restaurar todos los proyectos y archivos"
|
||||
|
||||
@@ -8365,9 +8405,6 @@ msgstr "Hubo un error al restaurar los archivos."
|
||||
msgid "dashboard.errors.error-on-restore-file"
|
||||
msgstr "Hubo un error al restaurar el archivo %s."
|
||||
|
||||
msgid "dashboard.errors.error-on-restoring-files"
|
||||
msgstr "Hubo un error al restaurar archivos."
|
||||
|
||||
msgid "dashboard.errors.error-on-delete-files"
|
||||
msgstr "Hubo un error al eliminar archivos."
|
||||
|
||||
|
||||
@@ -444,7 +444,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Descargar %s archivos estándar (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Puede incluir componentes, gráficos, colores y/o tipografías."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -455,33 +455,33 @@ msgstr ""
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Los archivos con bibliotecas compartidas se incluirán en la exportación, "
|
||||
"manteniendo su vinculación."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportar bibliotecas compartidas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Las bibliotecas compartidas no se incluirán en la exportación y no se "
|
||||
"agregarán activos a la biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Trate los activos de biblioteca compartidos como objetos básicos"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Su archivo se exportará con todos los activos externos combinados en la "
|
||||
"biblioteca de archivos."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Incluir recursos de biblioteca compartidos en bibliotecas de archivos"
|
||||
|
||||
#: src/app/main/ui/dashboard/import.cljs:131
|
||||
|
||||
@@ -358,7 +358,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Deskargatu %s fitxategi estandar (.svn + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Osagaiak, grafikoak, koloreak edo/eta tipografiak izan ditzakete."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -368,31 +368,31 @@ msgstr ""
|
||||
"darabiltzate. Zer egin nahi duzu baliabideekin*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Partekatutako liburutegiak dituzten fitxategiak esportazio paketean sartuko "
|
||||
"dira eta loturak mantenduko dituzte."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Esportatu partekatutako liburutegiak"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Partekatutako liburutegiak ez dira esportazioan sartuko eta baliabide bat "
|
||||
"ere ez da liburutegian sartuko. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Erabili baliabideak oinarrizko objektu bezala"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr "Zure fitxategia baliabide guztiak bere baitan dituela esportatuko da."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Sartu partekatutako liburutegiak fitxategiaren liburutegietan"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -491,7 +491,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "دانلود %s عدد فایل های استاندارد (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* ممکن است شامل کامپوننتها، گرافیک، رنگها و/یا تایپوگرافی باشد."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -502,33 +502,33 @@ msgstr ""
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"فایلهای دارای کتابخانههای مشترک در اکسپورت گنجانده میشوند و پیوند خود را حفظ "
|
||||
"میکنند."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "اکسپورت کتابخانههای مشترک"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"کتابخانههای مشترک در صادرات گنجانده نخواهند شد و هیچ دارایی به کتابخانه "
|
||||
"اضافه نخواهد شد. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "داراییهای کتابخانه مشترک را به عنوان اشیاء اساسی در نظر بگیرید"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"فایل شما با تمام داراییهای خارجی که در کتابخانه فایل ادغام شدهاند اکسپورت "
|
||||
"میشود."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "داراییهای کتابخانه مشترک را در کتابخانههای فایل قرار دهید"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -381,7 +381,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Heinta %s standarafílur (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Útflyt deild søvn"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -573,7 +573,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Télécharger %s fichiers standard (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr ""
|
||||
"* Peut inclure les composants, les éléments graphiques, les couleurs et/ou "
|
||||
"les polices de caractère."
|
||||
@@ -586,35 +586,35 @@ msgstr ""
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Les fichiers avec des bibliothèques partagées seront inclus dans "
|
||||
"l'exportation, en maintenant leur liaison."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exporter les bibliothèques partagées"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Les bibliothèques partagées ne seront pas incluses dans l'exportation et "
|
||||
"aucune ressource ne sera ajoutée à la bibliothèque. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr ""
|
||||
"Considérer les ressources des bibliothèques partagées comme des objets "
|
||||
"basiques"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Votre fichier sera exporté avec toutes les ressources externes fusionnées "
|
||||
"dans la bibliothèque de fichiers."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr ""
|
||||
"Inclure les ressources des bibliothèques partagées dans les bibliothèques "
|
||||
"de fichiers"
|
||||
@@ -7893,10 +7893,6 @@ msgstr "Valeur non valide : % n'est pas autorisé."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Valeur non valide : les unités ne sont pas autorisées."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Si vous renommez ce token, toute référence à son ancien nom sera incorrecte."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Ressources"
|
||||
|
||||
1149
frontend/translations/fr_CA.po
Normal file
1149
frontend/translations/fr_CA.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -356,7 +356,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Descargar %s ficheiros estándar (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Pode incluir compoñentes, gráficos, cores e/ou fontes."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -366,33 +366,33 @@ msgstr ""
|
||||
"Que queres facer cos recursos?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Os ficheiros con bibliotecas compartidas incluiranse na exportación "
|
||||
"mantendo os vínculos."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportar bibliotecas compartidas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"As bibliotecas compartidas non se incluirán na exportación e non se "
|
||||
"engadirán recursos á biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Tratar os recursos da biblioteca compartida coma obxetos básicos"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"O teu ficheiro exportarase con todos os recursos externos metidos na "
|
||||
"biblioteca do ficheiro."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Incluir os recursos de bibliotecas compartidas na biblioteca do ficheiro"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -421,7 +421,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Sauke %s cikakken kundi (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "*akwai sassan,hotuna,launuka,da/kozane-zane."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -429,29 +429,29 @@ msgid "dashboard.export.explain"
|
||||
msgstr "za ka iya fitar da kundi daya ko fiye ta hanyar tura taska. \"me \"*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr "Manhajar tura kundi ta kunshi fitarwa, tattali mahaxarsu."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "fitar da manhajar tura kundi"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr "manhajar tura kundi ba ta shiga cikin fitarwa, wani amfaniqarawa a taska. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "lura da bayanan da ke cikin manhajar tura kundi"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"za ka iya fitar da kundi tare da haxe muhimman abubuwa, na waje a "
|
||||
"kunditaskira."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "tura taska ya qunshi bayanan da ke cikin kundin taskoki"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"PO-Revision-Date: 2026-01-03 20:01+0000\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"he/>\n"
|
||||
@@ -554,7 +554,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "הורדת %s קבצים תקניים (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* עשוי לכלול רכיבים, גרפיקה, צבעים ו/או טיפוגרפיות."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -564,28 +564,27 @@ msgstr ""
|
||||
"המשאבים שלהן*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr "קבצים עם ספריות משותפות יצורפו לייצוא, תוך שימור הקישוריות שלהם."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "ייצוא ספריות משותפות"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr "ספריות משותפות לא יצורפו לייצוא ואף משאב לא יתווסף לספריה. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "להתייחס למשאבים בספריות משותפות כעצמים בסיסיים"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr "הקובץ שלך ייוצא כשכל המשאבים החיצוניים ממוזגים לספריית הקבצים."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "לכלול משאבי ספריה משותפת בספריות הקבצים"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -1775,9 +1774,8 @@ msgid "inspect.empty.select"
|
||||
msgstr "ניתן לבחור צורה, לוח או קבוצה ולראות את המאפיינים והקוד שלהם"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "בחירת לשונית חקירה"
|
||||
msgstr "פרטי שכבה"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:137
|
||||
msgid "inspect.multiple-selected"
|
||||
@@ -7810,10 +7808,6 @@ msgstr "ערך שגוי: אסור %."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "ערך שגוי: אסור יחידות."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "שינוי שם האסימון הזה יפגע בכל הפניה לשם הישן שלו."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "משאבים"
|
||||
@@ -8352,3 +8346,25 @@ msgstr "אורך השם חייב להיות תו אחד לפחות"
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:85
|
||||
msgid "workspace.tokens.invalid-text-decoration-token-value"
|
||||
msgstr "ערך אסימון שגוי: מותר רק none, underline ו־strike-through"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "פרטים נוספים"
|
||||
|
||||
msgid "subscription.settings.management-dialog.step-2-description"
|
||||
msgstr ""
|
||||
"אפשר להוסיף את פרטי התשלום שלך היית כדי להשאיר את המינוי שלך פעיל ונטול "
|
||||
"תקלות גם אחרי תקופת הניסיון וגם כדי להמשיך לתמוך במיזם הקוד הפתוח שלנו. לא "
|
||||
"יתבצע שום חיוב עדיין."
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr "ערך אסימון שגוי: אפשר להפנות לאסימון font-family (משפחת גופנים) בלבד"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs
|
||||
msgid "workspace.tokens.invalid-token-value-shadow"
|
||||
msgstr "ערך שגוי: יש להפנות לאסימון הצללה מורכבת."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/form.cljs:775
|
||||
msgid "workspace.tokens.reference-composite-shadow"
|
||||
msgstr "נא למלא כינוי הצללת אסימון"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"PO-Revision-Date: 2025-12-27 05:00+0000\n"
|
||||
"Last-Translator: VKing9 <vaibhavrathod2282@gmail.com>\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"hi/>\n"
|
||||
@@ -559,7 +559,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "%s मानक फ़ाइलें डाउनलोड करें (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* इसमें कॉम्पोनेंट्स, ग्राफिक्स, रंग और/या टाइपोग्राफ़ी शामिल हो सकते हैं।"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -569,34 +569,33 @@ msgstr ""
|
||||
"लाइब्रेरीज़ का उपयोग कर रही हैं। आप उनके एसेट्स के साथ क्या करना चाहते हैं?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"साझा की गई लाइब्रेरीज़ वाली फ़ाइलें निर्यात में शामिल की जाएँगी, और उनका लिंक बनाए रखा "
|
||||
"जाएगा।"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "साझा लाइब्रेरीज़ निर्यात करें"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"साझा की गई लाइब्रेरीज़ निर्यात में शामिल नहीं की जाएँगी और लाइब्रेरी में "
|
||||
"कोई एसेट्स नहीं जोड़े जाएँगे। "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "साझा की गई लाइब्रेरी के एसेट्स को बुनियादी ऑब्जेक्ट्स के रूप में मानें"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"आपकी फ़ाइल निर्यात की जाएगी और सभी बाहरी एसेट्स(assets) फ़ाइल लाइब्रेरी में "
|
||||
"विलय कर दिए जाएँगे।"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "साझा की गई लाइब्रेरी के एसेट्स को फ़ाइल लाइब्रेरी में शामिल करें"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -7300,10 +7299,6 @@ msgstr "मान मान्य नहीं है"
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "अमान्य मान: इकाइयाँ अनुमति नहीं हैं।"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "इस टोकन का नाम बदलने से इसके पुराने नाम के किसी भी संदर्भ टूट जाएंगे।"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "एसेट्स"
|
||||
@@ -7752,9 +7747,8 @@ msgid "inspect.color-space-label"
|
||||
msgstr "रंग स्थान चुनें"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "निरीक्षण टैब चुनें"
|
||||
msgstr "परत जानकारी"
|
||||
|
||||
#: src/app/main/ui/inspect/styles/panels/tokens_panel.cljs:26
|
||||
msgid "inspect.tabs.styles.active-sets"
|
||||
@@ -8444,3 +8438,19 @@ msgstr "यह संस्करण आपके द्वारा लॉक
|
||||
#, unused
|
||||
msgid "workspace.versions.tooltip.locked-version"
|
||||
msgstr "लॉक किया गया संस्करण - केवल निर्माता ही इसे संशोधित कर सकता है"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "और जानकारी"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr "Invalid token value: आप केवल फ़ॉन्ट-परिवार token का संदर्भ ले सकते हैं"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs
|
||||
msgid "workspace.tokens.invalid-token-value-shadow"
|
||||
msgstr "अमान्य मूल्य: एक समग्र छाया टोकन का संदर्भ देना चाहिए।।"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/form.cljs:775
|
||||
msgid "workspace.tokens.reference-composite-shadow"
|
||||
msgstr "एक token छाया आलिया दर्ज करें"
|
||||
|
||||
@@ -529,7 +529,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Preuzmi %s standardne datoteke (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Može uključivati komponente, grafike, boje i/ili tipografije."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -539,33 +539,33 @@ msgstr ""
|
||||
"Što želiš učiniti s njihovim stavkama*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Datoteke sa zajedničkim bibliotekama bit će uključene u izvoz, održavajući "
|
||||
"njihovu poveznicu."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Izvezi zajedničke biblioteke"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Zajedničke biblioteke neće biti uključene u izvoz i nikakve stavke neće "
|
||||
"biti dodani u biblioteku. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Tretiraj stavke zajedničke biblioteke kao osnovne objekte"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Tvoja će datoteka biti izvezena sa svim vanjskim stavkama spojenim u "
|
||||
"biblioteku datoteka."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Uključi stavke zajedničke biblioteke u biblioteke datoteka"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -6477,10 +6477,6 @@ msgstr "Alati"
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "Vrijednost nije važeća"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Preimenovanje ovog tokena prekinut će sve reference na njegov stari naziv."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Stavke"
|
||||
|
||||
@@ -562,7 +562,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Unduh %s berkas standar (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Dapat mencakup komponen, grafik, warna dan/atau tipografi."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -572,31 +572,31 @@ msgstr ""
|
||||
"Apa yang ingin Anda lakukan dengan asetnya*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr "Berkas dengan pustaka bersama akan dimasukkan dalam hasil ekspor."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Ekspor pustaka bersama"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Pustaka bersama tidak akan dimasukkan dalam hasil ekspor dan tidak ada aset "
|
||||
"yang akan ditambahkan ke pustaka. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Perlakukan aset pustaka terbagi sebagai objek dasar"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Berkas Anda akan diekspor dengan semua aset eksternal tergabung dalam "
|
||||
"pustaka berkas."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Termasuk aset pustaka terbagi dalam pustaka berkas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -6855,10 +6855,6 @@ msgstr "Peralatan"
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "Nilai tidak valid"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Mengubah nama token ini akan merusak referensi nama lamanya."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Aset"
|
||||
|
||||
@@ -398,28 +398,28 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Buto %s ederede tozuru etozu (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Nwere Ike ịgụnye ngwa , esereese gasị, agwụgwara na/ma ọ bụ akara nkụpụta."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"A ga-atinye ederede nwere ọba ederede nkekọrịta ma gụnyere mbupu , ma "
|
||||
"jidekwa ụkpụrụ njikọ ha"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Bupu ọba ederede nkekọrịta"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Agaghị a tinye ọba ederede nkekọrịta na mbupu ma o nweghị ihe nnwe a ga a "
|
||||
"tinye ọ a ederede . "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Tinye ihe nnwe ọba ederede nkekọrịta n'ime ọ a ederede."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2025-12-31 22:01+0000\n"
|
||||
"Last-Translator: Nicola Bortoletto <nicola.bortoletto@live.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"it/>\n"
|
||||
"Language: it\n"
|
||||
@@ -570,7 +570,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Scarica %s file standard (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr ""
|
||||
"* Può includere componenti, elementi grafici, colori e/o elementi "
|
||||
"tipografici."
|
||||
@@ -582,34 +582,33 @@ msgstr ""
|
||||
"cosa desideri fare con le loro risorse*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"I file con librerie condivise verranno inclusi nell'esportazione, mantenendo "
|
||||
"il loro collegamento."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Esporta le librerie condivise"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Le librerie condivise non saranno incluse nell'esportazione e nessuna "
|
||||
"risorsa verrà aggiunta alla libreria. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Considera le risorse delle librerie condivise come oggetti di base"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Il tuo file verrà esportato con tutte le risorse esterne riunite nella "
|
||||
"libreria dei file."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Includi le risorse delle librerie condivise nelle librerie del file"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -1832,7 +1831,6 @@ msgstr ""
|
||||
"loro proprietà e il loro codice"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "Informazioni livello"
|
||||
|
||||
@@ -7940,12 +7938,6 @@ msgstr "Valore non valido: % non è consentito."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Valore non valido: le unità non sono consentite."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr ""
|
||||
"Rinominare questo token interromperà qualsiasi riferimento al suo vecchio "
|
||||
"nome."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Risorse"
|
||||
@@ -8506,3 +8498,13 @@ msgstr "Il nome deve essere di almeno 1 carattere"
|
||||
|
||||
msgid "subscription.settings.management-dialog.step-2-skip-button"
|
||||
msgstr "Salta per ora e inizia la prova"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "Maggiori informazioni"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr ""
|
||||
"Valore del token non valido: puoi fare riferimento solo a un token font-"
|
||||
"family"
|
||||
|
||||
@@ -299,7 +299,7 @@ msgid "dashboard.export-shapes.title"
|
||||
msgstr "エクスポートの選択"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "共有ライブラリとしてエクスポート"
|
||||
|
||||
#: src/app/main/ui/dashboard/fonts.cljs:206
|
||||
|
||||
@@ -334,7 +334,7 @@ msgid "dashboard.export-shapes.title"
|
||||
msgstr "Eksportuoti pažymėtą sritį"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Gali apimti komponentus, grafiką, spalvas ir (arba) tipografiją."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -344,35 +344,35 @@ msgstr ""
|
||||
"bendros bibliotekos. Ką norite daryti su jų komponentais*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Failai su bendromis bibliotekomis bus įtraukti į eksportą, išlaikant jų "
|
||||
"susiejimą."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Eksportuoti bendrai naudojamas bibliotekas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Bendrai naudojamos bibliotekos nebus įtrauktos į eksportą ir į biblioteką "
|
||||
"nebus pridėta jokių išteklių. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr ""
|
||||
"Bendrai naudojamus bibliotekos komponentus traktuokite kaip pagrindinius "
|
||||
"objektus"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Jūsų failas bus eksportuotas su visais išoriniais komponentais, sujungtais "
|
||||
"į failų biblioteką."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Įtraukti bendrai naudojamus bibliotekos komponentus į failų bibliotekas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-11-25 16:51+0000\n"
|
||||
"PO-Revision-Date: 2025-12-29 14:34+0000\n"
|
||||
"Last-Translator: Edgars Andersons <Edgars+Weblate@gaitenis.id.lv>\n"
|
||||
"Language-Team: Latvian <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"lv/>\n"
|
||||
@@ -8,10 +8,9 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural="
|
||||
"(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : "
|
||||
"((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.15-dev\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
|
||||
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.15.1\n"
|
||||
|
||||
#: src/app/main/ui/auth/register.cljs:215, src/app/main/ui/static.cljs:159, src/app/main/ui/viewer/login.cljs:100
|
||||
msgid "auth.already-have-account"
|
||||
@@ -572,7 +571,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Lejupielādēt %s standarta datnes (. svg +. json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* var ietvert sastāvdaļas, attēlus, krāsas un/vai burtu stilus un veidus."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -582,33 +581,33 @@ msgstr ""
|
||||
"iesākt ar to līdzekļiem*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Izguvē tiks iekļautas datnes ar koplietojamām bibliotēkām, saglabājot to "
|
||||
"sasaisti."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Izgūt koplietojamās bibliotēkas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Koplietojamās bibliotēkas netiks iekļautas izguvē, un bibliotēkai netiks "
|
||||
"pievienoti līdzekļi. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Attiekties pret koplietojamo bibliotēku līdzekļiem kā pret pamatobjektiem"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Datne tiks izgūta ar visiem ārējiem līdzekļiem, kas tiks apvienoti datnes "
|
||||
"bibliotēkā."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Iekļaut koplietojamos bibliotēkas līdzekļus datņu bibliotēkās"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -7582,12 +7581,6 @@ msgstr "Vērtība nav derīga"
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Nederīga vērtība: mērvienības nav atļautas."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr ""
|
||||
"Šīs tekstvienības pārdēvēšana salauzīs visas atsauces uz tās iepriekšējo "
|
||||
"nosaukumu."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Līdzekļi"
|
||||
@@ -7971,3 +7964,7 @@ msgstr "Pagaidām izlaist un uzsākt izmēģinājumu"
|
||||
|
||||
msgid "subscription.settings.management-dialog.step-2-add-payment-button"
|
||||
msgstr "Pievienot maksājumu informāciju"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "Vairāk informācijas"
|
||||
|
||||
@@ -226,7 +226,7 @@ msgid "dashboard.export-shapes"
|
||||
msgstr "എക്സ്പോർട്ട്"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* ഘടകങ്ങൾ, ഗ്രാഫിക്സ്, നിറങ്ങൾ അല്ലെങ്കിൽ മുദ്രണകലകൾ എന്നിവ ഉൾപ്പെടാം."
|
||||
|
||||
#: src/app/main/ui/auth/recovery.cljs:32
|
||||
|
||||
@@ -426,7 +426,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Muat turun %s fail standard (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Mungkin termasuk komponen, grafik, warna dan/atau tipografi."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -436,33 +436,33 @@ msgstr ""
|
||||
"kongsi. Apa yang anda mahu lakukan dengan aset mereka*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Fail dengan perpustakaan kongsi akan disertakan dalam eksport, mengekalkan "
|
||||
"hubungannya."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Eksport perpustakaan kongsi"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Perpustakaan kongsi tidak akan disertakan dalam eksport dan tiada aset akan "
|
||||
"ditambahkan ke perpustakaan. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Anggap aset perpustakaan kongsi sebagai objek asas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Fail anda akan dieksport dengan semua aset luaran digabungkan ke dalam "
|
||||
"pustaka fail."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Sertakan aset perpustakaan kongsi dalam pustaka fail"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2025-12-23 17:00+0000\n"
|
||||
"Last-Translator: Stephan Paternotte <stephan@paternottes.net>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"nl/>\n"
|
||||
"Language: nl\n"
|
||||
@@ -570,7 +570,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "%s standaardbestanden downloaden (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Kan componenten, afbeeldingen, kleuren en/of typografie bevatten."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -580,34 +580,33 @@ msgstr ""
|
||||
"bibliotheken. Wat wil je doen met hun assets*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Bestanden met gedeelde bibliotheken worden opgenomen in de export en hun "
|
||||
"koppelingen worden behouden."
|
||||
"Bestanden met gedeelde bibliotheken worden meegenomen in de export, incl. "
|
||||
"behoud van hun koppelingen."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Gedeelde bibliotheken exporteren"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Gedeelde bibliotheken worden niet opgenomen in de export en er worden geen "
|
||||
"assets aan de bibliotheek toegevoegd. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Gedeelde bibliotheek-assets als basisobjecten behandelen"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Je bestand wordt geëxporteerd met alle externe assets samengevoegd in de "
|
||||
"bestandsbibliotheek."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Inclusief gedeelde bibliotheek-assets in bestandsbibliotheken"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -1833,7 +1832,6 @@ msgstr ""
|
||||
"inspecteren"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "Laaginfo"
|
||||
|
||||
@@ -7968,12 +7966,6 @@ msgstr "Ongeldige waarde: % is niet toegestaan."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Ongeldige waarde: Eenheden zijn niet toegestaan."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr ""
|
||||
"Met het wijzigen van de naam van dit token, worden alle verwijzingen naar "
|
||||
"de oude naam verbroken."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Assets"
|
||||
@@ -8487,3 +8479,20 @@ msgstr "Nu overslaan en proefperiode starten"
|
||||
|
||||
msgid "subscription.settings.management-dialog.step-2-add-payment-button"
|
||||
msgstr "Betalingsgegevens toevoegen"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "Meer info"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr ""
|
||||
"Ongeldige tokenwaarde: je kunt alleen verwijzen naar een font-family-token"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs
|
||||
msgid "workspace.tokens.invalid-token-value-shadow"
|
||||
msgstr "Ongeldige waarde: moet verwijzen naar een samengesteld schaduwtoken."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/form.cljs:775
|
||||
msgid "workspace.tokens.reference-composite-shadow"
|
||||
msgstr "Voer een alias voor een schaduwtoken in"
|
||||
|
||||
@@ -360,7 +360,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Pobierz %s plików standardowych (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Może zawierać komponenty, grafikę, kolory i/lub typografię."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -370,33 +370,33 @@ msgstr ""
|
||||
"udostępnionych. Co chcesz zrobić z ich zasobami*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Pliki z bibliotekami współdzielonymi zostaną uwzględnione w eksporcie, z "
|
||||
"zachowaniem ich powiązania."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Eksportuj biblioteki udostępnione"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Biblioteki udostępnione nie zostaną uwzględnione w eksporcie i żadne zasoby "
|
||||
"nie zostaną dodane do biblioteki. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Traktuj zasoby biblioteki współdzielonej jako podstawowe obiekty"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Twój plik zostanie wyeksportowany ze wszystkimi zasobami zewnętrznymi "
|
||||
"połączonymi z biblioteką plików."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Uwzględnij zasoby bibliotek współdzielonych w bibliotekach plików"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -569,7 +569,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Baixar %s arquivos padrões (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Pode incluir componentes, gráficos, cores e/ou tipografias."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -579,33 +579,33 @@ msgstr ""
|
||||
"compartilhadas. O que você quer fazer com seus recursos*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Arquivos com bibliotecas compartilhadas serão incluídos na exportação, "
|
||||
"mantendo seu vínculo."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportar bibliotecas compartilhadas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Bibliotecas compartilhadas não serão incluídas na exportação e nenhum ativo "
|
||||
"será adicionado a biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Trate os ativos da biblioteca compartilhada como objetos básicos"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Seu arquivo será exportado com todos os ativos externos mesclados na "
|
||||
"biblioteca de ativos do arquivo."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr ""
|
||||
"Incluir ativos da biblioteca compartilhada na biblioteca de ativos do "
|
||||
"arquivo"
|
||||
@@ -5661,10 +5661,6 @@ msgstr "Ferramentas"
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "O valor não é válido"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Renomear este token quebrará quaisquer referência para o nome antigo."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Ativos"
|
||||
|
||||
@@ -543,7 +543,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Descarregar %s ficheiros standard (svg + json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Pode incluir componentes, gráficos, cores e/ou tipografia."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -553,33 +553,33 @@ msgstr ""
|
||||
"partilhadas. O que queres fazer com os recursos*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Ficheiros com bibliotecas partilhadas serão incluídos na exportação, "
|
||||
"mantendo as ligações."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportar bibliotecas partilhadas"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Bibliotecas partilhadas não serão incluídas na exportação e nenhum recurso "
|
||||
"será adicionado à biblioteca. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Trata os recursos da biblioteca partilhada como objetos básicos"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Os teus ficheiros serão exportados com todos os recursos externos "
|
||||
"incorporados na biblioteca de ficheiros."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Incluir recursos da biblioteca partilhada em bibliotecas de ficheiros"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -578,7 +578,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Descarcă %s fișiere standard (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Poate include componente, elemente grafice, culori și/sau tipografii."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -588,33 +588,33 @@ msgstr ""
|
||||
"biblioteci partajate. Ce vrei să faci cu obiectele lor*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Fișierele cu biblioteci partajate vor fi incluse în export, menținându-le "
|
||||
"legătura."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportă biblioteci partajate"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Bibliotecile partajate nu vor fi incluse în export și nu vor fi adăugate "
|
||||
"elemente în bibliotecă. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Tratează obiectele bibliotecii partajate ca obiecte de bază"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Fișierul dvs. va fi exportat cu toate activele externe îmbinate în "
|
||||
"biblioteca de fișiere."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Include obiectele bibliotecii partajate în bibliotecile de fișiere"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -7980,10 +7980,6 @@ msgstr "Valoare invalidă: % nu este permis."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Valoare invalidă: Unitățile nu sunt permise."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Redenumirea acestui token va distruge orice referință la numele său vechi."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Obiecte"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2025-12-30 16:00+0000\n"
|
||||
"Last-Translator: Vin <k3kelm4vw@mozmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -563,7 +563,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Скачать стандартные файлы (.svg + .json) (%s)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Могут содержать компоненты, цвета, графику, и/или типографику."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -573,33 +573,32 @@ msgstr ""
|
||||
"сделать с их ресурсами*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Файлы с общих библиотек будут включены в экспорт, сохраняя свою привязку."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Экспорт общих библиотек"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Общие библиотеки не будут включены в экспорт, и вложенные ресурсы не "
|
||||
"попадут в библиотеку экспорта. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Воспринимать ресурсы общей библиотеки как обычные объекты"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Ваш файл будет экспортирован с включением всех внешних ресурсов в "
|
||||
"библиотеку экспорта."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Включить ресурсы общей библиотеки в файловые библиотеки"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -932,7 +931,7 @@ msgstr "Снять статус общей библиотеки"
|
||||
|
||||
#: src/app/main/data/common.cljs:224
|
||||
msgid "dashboard.removed-from-team"
|
||||
msgstr "Вы больше не являетесь частью команды “%s“."
|
||||
msgstr "Вы больше не являетесь частью команды \"%s\"."
|
||||
|
||||
#: src/app/main/ui/settings/profile.cljs:78
|
||||
msgid "dashboard.save-settings"
|
||||
@@ -1389,7 +1388,7 @@ msgstr "Изображение слишком большое для вставк
|
||||
|
||||
#: src/app/main/data/media.cljs:70, src/app/main/data/workspace/media.cljs:193
|
||||
msgid "errors.media-type-mismatch"
|
||||
msgstr "Формат медиа не соответует расширению файла."
|
||||
msgstr "Формат медиа не соответствует расширению файла."
|
||||
|
||||
#: src/app/main/data/media.cljs:67, src/app/main/data/workspace/media.cljs:178, src/app/main/data/workspace/media.cljs:181, src/app/main/data/workspace/media.cljs:184, src/app/main/data/workspace/media.cljs:187
|
||||
msgid "errors.media-type-not-allowed"
|
||||
@@ -1554,7 +1553,7 @@ msgstr "Сообщество Penpot"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:105
|
||||
msgid "feedback.subject"
|
||||
msgstr "Краткое описание"
|
||||
msgstr "Тема"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:102
|
||||
msgid "feedback.subtitle"
|
||||
@@ -1860,7 +1859,7 @@ msgstr "Копировать в буфер обмена"
|
||||
|
||||
#: src/app/main/ui/inspect/styles/style_box.cljs:22
|
||||
msgid "inspect.tabs.styles.geometry-panel"
|
||||
msgstr "Размер и Положение"
|
||||
msgstr "Размер и положение"
|
||||
|
||||
#: src/app/main/ui/inspect/styles/style_box.cljs:60, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:179
|
||||
msgid "inspect.tabs.styles.toggle-style"
|
||||
@@ -1868,7 +1867,7 @@ msgstr "Переключить панель %s"
|
||||
|
||||
#: src/app/main/ui/inspect/styles/style_box.cljs:21
|
||||
msgid "inspect.tabs.styles.token-panel"
|
||||
msgstr "Наборы токенов и Темы"
|
||||
msgstr "Наборы токенов и темы"
|
||||
|
||||
#: src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:102, src/app/main/ui/inspect/styles/rows/properties_row.cljs:60
|
||||
msgid "inspect.tabs.styles.token-resolved-value"
|
||||
@@ -2013,7 +2012,7 @@ msgstr "Копировать цвет"
|
||||
|
||||
#: src/app/main/ui/dashboard/team.cljs:650
|
||||
msgid "labels.copy-invitation-link"
|
||||
msgstr "Копировать ссылку"
|
||||
msgstr "Скопировать ссылку"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:204
|
||||
msgid "labels.create"
|
||||
@@ -2173,7 +2172,7 @@ msgstr "Помощь"
|
||||
|
||||
#: src/app/main/ui/dashboard/sidebar.cljs:1020
|
||||
msgid "labels.help-learning"
|
||||
msgstr "Помощь и Обучение"
|
||||
msgstr "Помощь и обучение"
|
||||
|
||||
#: src/app/main/ui/dashboard/templates.cljs:91
|
||||
msgid "labels.hide"
|
||||
@@ -3000,7 +2999,7 @@ msgstr ""
|
||||
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
|
||||
#, unused
|
||||
msgid "modals.remove-shared-confirm.message"
|
||||
msgstr "Удалить “%s” из общей библиотеки"
|
||||
msgstr "Удалить \"%s\" из общей библиотеки"
|
||||
|
||||
#: src/app/main/ui/workspace/nudge.cljs:52
|
||||
msgid "modals.small-nudge"
|
||||
@@ -6491,3 +6490,209 @@ msgstr "Автосохранённые версии будут хранитьс
|
||||
#, unused
|
||||
msgid "workspace.viewport.click-to-close-path"
|
||||
msgstr "Нажмите для замыкания контура"
|
||||
|
||||
#: src/app/main/ui/dashboard/import.cljs:479
|
||||
msgid "dashboard.import.import-message"
|
||||
msgid_plural "dashboard.import.import-message"
|
||||
msgstr[0] "1 файл был успешно импортирован."
|
||||
msgstr[1] "Успешно импортировано файлов: %s"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:114, src/app/main/ui/dashboard/subscription.cljs:157
|
||||
msgid "subscription.dashboard.power-up.enterprise-plan"
|
||||
msgstr "Корпоративный тариф"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:109
|
||||
msgid "subscription.dashboard.power-up.enterprise-trial.top-title"
|
||||
msgstr "Корпоративный тариф (пробный)"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:84
|
||||
msgid "subscription.dashboard.power-up.professional.bottom-button"
|
||||
msgstr "Прокачаться!"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:82
|
||||
msgid "subscription.dashboard.power-up.professional.top-title"
|
||||
msgstr "Профессиональный тариф"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:93
|
||||
msgid "subscription.dashboard.power-up.trial.top-title"
|
||||
msgstr "Безлимитный тариф (пробный)"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:100, src/app/main/ui/dashboard/subscription.cljs:156
|
||||
msgid "subscription.dashboard.power-up.unlimited-plan"
|
||||
msgstr "Безлимитный тариф"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:81, src/app/main/ui/dashboard/subscription.cljs:92, src/app/main/ui/dashboard/subscription.cljs:99, src/app/main/ui/dashboard/subscription.cljs:108, src/app/main/ui/dashboard/subscription.cljs:113
|
||||
msgid "subscription.dashboard.power-up.your-subscription"
|
||||
msgstr "Ваша подписка:"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:137
|
||||
msgid "subscription.dashboard.team-plan"
|
||||
msgstr "Командный тариф"
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:202
|
||||
msgid "subscription.settings.management.dialog.payment-explanation"
|
||||
msgstr "Оплата после пробного периода. Кредитная карта сейчас не требуется."
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:154
|
||||
msgid "subscription.settings.management.dialog.currently-editors-title"
|
||||
msgid_plural "subscription.settings.management.dialog.currently-editors-title"
|
||||
msgstr[0] ""
|
||||
"В настоящее время в вашей команде есть %s человек, который может "
|
||||
"редактировать."
|
||||
msgstr[1] ""
|
||||
"В настоящее время в ваших командах есть %s человек(а), которые могут "
|
||||
"редактировать."
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:143, src/app/main/ui/settings/subscription.cljs:92, src/app/main/ui/settings/subscription.cljs:368, src/app/main/ui/settings/subscription.cljs:402, src/app/main/ui/settings/subscription.cljs:464
|
||||
msgid "subscription.settings.unlimited"
|
||||
msgstr "Безлимитный"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:142, src/app/main/ui/settings/subscription.cljs:88, src/app/main/ui/settings/subscription.cljs:367, src/app/main/ui/settings/subscription.cljs:390
|
||||
msgid "subscription.settings.unlimited-trial"
|
||||
msgstr "Безлимитный (пробный)"
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:394, src/app/main/ui/settings/subscription.cljs:406, src/app/main/ui/settings/subscription.cljs:470
|
||||
msgid "subscription.settings.unlimited.autosave-benefit"
|
||||
msgstr "30-дневное автосохранение версий и восстановление файлов"
|
||||
|
||||
#: src/app/main/ui/dashboard/sidebar.cljs:879
|
||||
msgid "labels.penpot-changelog"
|
||||
msgstr "Журнал изменений Penpot"
|
||||
|
||||
#: src/app/main/ui/dashboard/subscription.cljs:83
|
||||
msgid "subscription.dashboard.power-up.professional.bottom-description"
|
||||
msgstr ""
|
||||
"Дополнительное хранилище, восстановление файлов и многое другое для команд."
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:447
|
||||
msgid "subscription.settings.member-since"
|
||||
msgstr "Участник Penpot с: %s"
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:50
|
||||
msgid "subscription.settings.recommended"
|
||||
msgstr "Рекомендуется"
|
||||
|
||||
#: src/app/main/errors.cljs:309
|
||||
msgid "errors.deprecated.contact.text"
|
||||
msgstr "Связаться с нами"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:143
|
||||
msgid "feedback.other-ways-contact"
|
||||
msgstr "Другие способы связаться с нами"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:101
|
||||
msgid "feedback.title-contact-us"
|
||||
msgstr "Связаться с нами"
|
||||
|
||||
#: src/app/main/ui/settings/sidebar.cljs:136
|
||||
msgid "labels.contact-us"
|
||||
msgstr "Связаться с нами"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:110, src/app/main/ui/settings/feedback.cljs:111
|
||||
msgid "feedback.type"
|
||||
msgstr "Тип"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:115
|
||||
msgid "feedback.type.doubt"
|
||||
msgstr "Сомнение"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:113
|
||||
msgid "feedback.type.idea"
|
||||
msgstr "Идея"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:114
|
||||
msgid "feedback.type.issue"
|
||||
msgstr "Вопрос"
|
||||
|
||||
#: src/app/main/ui/settings/feedback.cljs:122
|
||||
msgid "feedback.description-placeholder"
|
||||
msgstr "Пожалуйста, опишите причину вашего обращения"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/assets.cljs:172
|
||||
msgid "workspace.assets.add-library"
|
||||
msgstr "Добавить библиотеку"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/themes.cljs:36
|
||||
msgid "labels.themes"
|
||||
msgstr "Темы"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:86
|
||||
msgid "workspace.tokens.active-themes"
|
||||
msgstr "Активных тем: %s"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/themes/create_modal.cljs:376
|
||||
msgid "workspace.tokens.back-to-themes"
|
||||
msgstr "К списку тем"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/themes/theme_selector.cljs:74
|
||||
msgid "workspace.tokens.edit-themes"
|
||||
msgstr "Изменить темы"
|
||||
|
||||
#: src/app/main/ui/workspace/context_menu.cljs:215
|
||||
msgid "workspace.shape.menu.copy-paste-as"
|
||||
msgstr "Скопировать/Вставить как..."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:96
|
||||
msgid "shortcuts.copy-link"
|
||||
msgstr "Скопировать ссылку"
|
||||
|
||||
#: src/app/main/ui/workspace/context_menu.cljs:202
|
||||
msgid "workspace.shape.menu.copy-link"
|
||||
msgstr "Скопировать ссылку"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:165
|
||||
msgid "shortcuts.rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
#: src/app/main/ui/workspace/context_menu.cljs:328
|
||||
msgid "workspace.shape.menu.rename"
|
||||
msgstr "Переименовать"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:432
|
||||
msgid "settings.remove-color"
|
||||
msgstr "Удалить цвет"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:118
|
||||
msgid "workspace.options.blur-options.remove-blur"
|
||||
msgstr "Удалить размытие"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:226, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:261
|
||||
msgid "workspace.options.export.remove-export"
|
||||
msgstr "Удалить экспорт"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/fill.cljs:223
|
||||
msgid "workspace.options.fill.remove-fill"
|
||||
msgstr "Удалить заливку"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/shadow.cljs:156, src/app/main/ui/workspace/sidebar/options/rows/shadow_row.cljs:160
|
||||
msgid "workspace.options.shadow-options.remove-shadow"
|
||||
msgstr "Удалить тень"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/options/menus/stroke.cljs:201
|
||||
msgid "workspace.options.stroke.remove-stroke"
|
||||
msgstr "Удалить обводку"
|
||||
|
||||
#: src/app/main/ui/workspace/plugins.cljs:88
|
||||
msgid "workspace.plugins.remove-plugin"
|
||||
msgstr "Удалить плагин"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:107, src/app/main/ui/inspect/styles.cljs:134
|
||||
msgid "labels.styles"
|
||||
msgstr "Стили"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/versions.cljs:56
|
||||
#, markdown
|
||||
msgid "subscription.workspace.versions.warning.enterprise.subtext-owner"
|
||||
msgstr "Если вы хотите увеличить этот лимит, напишите нам на [%s](mailto)"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/versions.cljs:58
|
||||
#, markdown
|
||||
msgid "subscription.workspace.versions.warning.subtext-member"
|
||||
msgstr ""
|
||||
"Если вы хотите увеличить этот лимит, свяжитесь с владельцем команды: [%s]"
|
||||
"(mailto)"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar/versions.cljs:57
|
||||
#, markdown
|
||||
msgid "subscription.workspace.versions.warning.subtext-owner"
|
||||
msgstr "Если вы хотите увеличить этот лимит, [обновите тариф|target:self](%s)"
|
||||
|
||||
@@ -479,7 +479,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Преузмите &s стандардних датотека (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Може укључивати компоненте, графику, боје и/или типографије."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -489,33 +489,33 @@ msgstr ""
|
||||
"Шта желите да урадите са њиховим средстрвима*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Датотеке са дељеним библиотекама ће бити укључене у извоз, одржавајући "
|
||||
"њихову повезаност."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Извези дељене библиотеке"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Дељене библиотеке неће бити укључене у извоз, а средства неће бити додата у "
|
||||
"библиотеку. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Третирајте средства заједничке библиотеке као основне објекте"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Ваша датотека ће бити извезена са свим спољним средствима спојеним у "
|
||||
"библиотеку датотека."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Укључите средства дељених библиотека у библиотеке датотека"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2025-12-30 16:00+0000\n"
|
||||
"Last-Translator: Anton Palmqvist <apq@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"sv/>\n"
|
||||
"Language: sv\n"
|
||||
@@ -570,7 +570,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Ladda ner %s standardfiler (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Kan inkludera komponenter, grafik, färger och/eller typografier."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -580,33 +580,33 @@ msgstr ""
|
||||
"vill du göra med deras tillgångar*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Filer med delade bibliotek kommer att ingå i exporten, bibehåller deras "
|
||||
"koppling."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Exportera delade bibliotek"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Delade bibliotek ingår inte i exporten och inga tillgångar kommer att "
|
||||
"läggas till biblioteket. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Behandla delade bibliotekstillgångar som grundobjekt"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Din fil kommer att exporteras med alla externa tillgångar som sammanfogade "
|
||||
"i filbiblioteket."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Inkludera delade bibliotekstillgångar i filbibliotek"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -1809,7 +1809,6 @@ msgstr ""
|
||||
"och kod"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "Lagerinfo"
|
||||
|
||||
@@ -4722,9 +4721,8 @@ msgid "subscription.settings.sucess.dialog.title"
|
||||
msgstr "Du är %!"
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:440
|
||||
#, fuzzy
|
||||
msgid "subscription.settings.support-us-since"
|
||||
msgstr "Du har stöttat oss med detta abonnemang sedan: %"
|
||||
msgstr "Du har stöttat oss med detta abonnemang sedan: %s"
|
||||
|
||||
#: src/app/main/ui/settings/subscription.cljs:472, src/app/main/ui/settings/subscription.cljs:488
|
||||
msgid "subscription.settings.try-it-free"
|
||||
@@ -7756,7 +7754,6 @@ msgstr ""
|
||||
"0,5)."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/token_pill.cljs:120
|
||||
#, fuzzy
|
||||
msgid "workspace.tokens.original-value"
|
||||
msgstr "Ursprungligt värde: %s"
|
||||
|
||||
@@ -7782,7 +7779,6 @@ msgid "workspace.tokens.reference-error"
|
||||
msgstr "Referensfel: "
|
||||
|
||||
#: src/app/main/data/workspace/tokens/warnings.cljs:15, src/app/main/data/workspace/tokens/warnings.cljs:19, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:56, src/app/main/ui/workspace/colorpicker/color_tokens.cljs:84, src/app/main/ui/workspace/sidebar/options/rows/color_row.cljs:102, src/app/main/ui/workspace/tokens/management/create/form_input_token.cljs:109, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:41, src/app/main/ui/workspace/tokens/management/create/input_tokens_value.cljs:46, src/app/main/ui/workspace/tokens/management/token_pill.cljs:121
|
||||
#, fuzzy
|
||||
msgid "workspace.tokens.resolved-value"
|
||||
msgstr "Uträknat värde: %s"
|
||||
|
||||
@@ -7856,7 +7852,6 @@ msgid "workspace.tokens.themes-list"
|
||||
msgstr "Temalista"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:194, src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:195, src/app/main/ui/workspace/tokens/management/create/form.cljs:629, src/app/main/ui/workspace/tokens/management/create/form.cljs:630
|
||||
#, fuzzy
|
||||
msgid "workspace.tokens.token-description"
|
||||
msgstr "Beskrivning"
|
||||
|
||||
@@ -7928,10 +7923,6 @@ msgstr "Ogiltigt värde: % är inte tillåtet."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Ogiltigt värde: Enheter är ej tillåtna."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Om du byter namn på denna token bryts alla referenser till dess gamla namn."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Tillgångar"
|
||||
@@ -8441,3 +8432,20 @@ msgstr "En token finns redan på denna sökväg: %s"
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:42, src/app/main/ui/workspace/tokens/management/create/form.cljs:68
|
||||
msgid "workspace.tokens.token-name-length-validation-error"
|
||||
msgstr "Namnet måste innehålla minst 1 tecken"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "Mer info"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr ""
|
||||
"Ogiltigt token-värde: du kan bara referera till en teckensnittsfamiljs-token"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs
|
||||
msgid "workspace.tokens.invalid-token-value-shadow"
|
||||
msgstr "Ogiltigt värde: måste referera till en sammansatt skuggnings-token."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/form.cljs:775
|
||||
msgid "workspace.tokens.reference-composite-shadow"
|
||||
msgstr "Ange ett token-skuggalias"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2025-12-22 15:34+0000\n"
|
||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
||||
"PO-Revision-Date: 2025-12-23 17:00+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/penpot/frontend/"
|
||||
"tr/>\n"
|
||||
"Language: tr\n"
|
||||
@@ -571,7 +571,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "%s standart dosyayı indir (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* Bileşenleri, grafikleri, renkleri ve/veya tipografileri içerebilir."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -581,33 +581,33 @@ msgstr ""
|
||||
"kütüphaneleri kullanıyor. Bunların varlıklarıyla ne yapmak istiyorsunuz*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Paylaşılan kütüphanelere sahip dosyalar, bağlantılarını koruyarak dışarı "
|
||||
"aktarmaya dahil edilecek."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Paylaşılan kütüphaneleri dışarı aktar"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Paylaşılan kütüphaneler dışarı aktarmaya dahil edilmeyecek ve kütüphaneye "
|
||||
"hiçbir varlık eklenmeyecek. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Paylaşılan kütüphane varlıklarını temel nesneler olarak ele al"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Dosyanız, tüm harici varlıklar kütüphane dosyasına birleştirilmiş olarak "
|
||||
"dışarı aktarılacak."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Dosya kütüphanelerine paylaşılan kütüphane varlıklarını dahil et"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -1816,7 +1816,6 @@ msgstr ""
|
||||
"seçin"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:166
|
||||
#, fuzzy
|
||||
msgid "inspect.layer-info"
|
||||
msgstr "Katman bilgisi"
|
||||
|
||||
@@ -7935,12 +7934,6 @@ msgstr "Geçersiz değer: % izin verilmiyor."
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Geçersiz değer: Birimlere izin verilmiyor."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr ""
|
||||
"Bu tokenin adını değiştirmek, eski adına yapılan tüm referansları "
|
||||
"bozacaktır."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Varlıklar"
|
||||
@@ -8455,3 +8448,20 @@ msgstr "Şimdilik atlayın ve deneme sürümünü başlatın"
|
||||
|
||||
msgid "subscription.settings.management-dialog.step-2-add-payment-button"
|
||||
msgstr "Ödeme bilgilerini ekleyin"
|
||||
|
||||
#: src/app/main/ui/inspect/right_sidebar.cljs:240
|
||||
msgid "inspect.empty.more"
|
||||
msgstr "Daha fazla bilgi"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs:93
|
||||
msgid "workspace.tokens.invalid-font-family-token-value"
|
||||
msgstr ""
|
||||
"Geçersiz token değeri: yalnızca font-family tokenine referans verebilirsiniz"
|
||||
|
||||
#: src/app/main/data/workspace/tokens/errors.cljs
|
||||
msgid "workspace.tokens.invalid-token-value-shadow"
|
||||
msgstr "Geçersiz değer: bileşik gölge tokenine referans vermelidir."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/form.cljs:775
|
||||
msgid "workspace.tokens.reference-composite-shadow"
|
||||
msgstr "Bir token gölge takma adı girin"
|
||||
|
||||
@@ -565,7 +565,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "Завантажити %s стандартних файлів (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* цебто компоненти, графіки, кольори та/або типографіки."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -575,33 +575,33 @@ msgstr ""
|
||||
"плануєте зробити з їхніми ресурсами*?"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"Файли з спільними бібліотеками буде додано до експорту зі збереженням "
|
||||
"зв'язків між ними."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "Експортувати спільні бібліотеки"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Спільні бібліотеки не буде додано до експорту, а ресурси не будуть додані "
|
||||
"до бібліотеки. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "Розглядати ресурси спільної бібліотеки як базові об'єкти"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"Ваш файл буде експортовано зі всіма зовнішніми ресурсами, об'єднаними у "
|
||||
"файл бібліотеки."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "Додати ресурси спільної бібліотеки до файлу бібліотеки"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -7437,10 +7437,6 @@ msgstr "Значення не є дійсним"
|
||||
msgid "workspace.tokens.value-with-units"
|
||||
msgstr "Помилкове значення: Одиниці не дозволені."
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "Якщо перейменувати токен, посилання на старе імʼя буде розірвано."
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "Ресурси"
|
||||
|
||||
@@ -418,39 +418,39 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "danlóòdù %s àwọn ojúlówó fáìli (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* ó le ní àwọn ẹ̀yà ara, àwòrán àti àwon àwọ̀ àti / tàbí àtẹ̀jáde."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr ""
|
||||
"àwọn fáìli tí ó wà nínú yàrá ìkàwé pípín á dàpọ̀ mọ́ ti ìfiráńṣẹ́, fún "
|
||||
"síṣetọ́jútheir linkage ìsopọ̀ wọn."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "ṣe ìfiráńṣẹ́ yàrá ìkàwé pípín"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr ""
|
||||
"Shared libraries will not be included in the export and no assets will be "
|
||||
"yàrá ìkàwé pípín kò ní sí nínú ti ìfiráńṣẹ́ àti pé kò ni ohun ìní kan tí "
|
||||
"a ó fi kún yàrá ìkàwé. "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "ṣe ìtọ́jú ohun ìní iyàrá ìkàwé pípín bí i nǹkan tó jẹ́ kókó"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr ""
|
||||
"á fi fáìlì rẹ ráńṣẹ́ pẹ̀lú gbogbo àwọn ohun ìní tó wà láyìíka ni a ó papọ̀ "
|
||||
"sínú fáìlì yàrá ìkàwé."
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "da ohun ìní yàrá ìkàwé pípín pọ̀ mọ́ fáìlì yàrá ìkàwé"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -537,7 +537,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "下载 %s 标准文件 (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* 可能包含组件、图形、颜色和/或排版。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -546,27 +546,27 @@ msgstr "你想导出的一个或多个文件用到了共享库。你想怎么处
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr "使用了共享库的文件将会在导出时保持引用关系。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "导出共享库"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr "导出文件中将不包含共享库,素材也不会被添加到库中。 "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "将共享库素材作为基本对象"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr "导出您的文件时所有的外部素材将会被合并到库中。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "将共享库素材加入文件库"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
|
||||
@@ -508,7 +508,7 @@ msgid "dashboard.export-standard-multi"
|
||||
msgstr "下載%s個標準檔案 (.svg + .json)"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:156
|
||||
msgid "dashboard.export.detail"
|
||||
msgid "files-download-modal.description-2"
|
||||
msgstr "* 可能會包含元件、圖像、顏色及/或文字編排。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:155
|
||||
@@ -517,27 +517,27 @@ msgstr "你想匯出的單個或多個檔案中使用了共用資料庫,你想
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:164
|
||||
#, fuzzy
|
||||
msgid "dashboard.export.options.all.message"
|
||||
msgid "files-download-modal.options.all.message"
|
||||
msgstr "使用了共用資料庫的檔案將被包含在匯出內,並保持他們的連結關係。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:165
|
||||
msgid "dashboard.export.options.all.title"
|
||||
msgid "files-download-modal.options.all.title"
|
||||
msgstr "匯出共享媒體庫"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:166
|
||||
msgid "dashboard.export.options.detach.message"
|
||||
msgid "files-download-modal.options.detach.message"
|
||||
msgstr "共用資料庫將不包含在匯出檔案內,且資產不會被加入資料庫。 "
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:167
|
||||
msgid "dashboard.export.options.detach.title"
|
||||
msgid "files-download-modal.options.detach.title"
|
||||
msgstr "將檔案庫資源視為基本物件"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:168
|
||||
msgid "dashboard.export.options.merge.message"
|
||||
msgid "files-download-modal.options.merge.message"
|
||||
msgstr "您的檔案將連同所有外部資源將一併匯出到檔案庫中。"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:169
|
||||
msgid "dashboard.export.options.merge.title"
|
||||
msgid "files-download-modal.options.merge.title"
|
||||
msgstr "將共享資料庫的內容加入檔案資料庫"
|
||||
|
||||
#: src/app/main/ui/exports/files.cljs:147
|
||||
@@ -6295,10 +6295,6 @@ msgstr "工具"
|
||||
msgid "workspace.tokens.value-not-valid"
|
||||
msgstr "該值無效"
|
||||
|
||||
#: src/app/main/ui/workspace/tokens/management/create/border_radius.cljs:181, src/app/main/ui/workspace/tokens/management/create/form.cljs:602
|
||||
msgid "workspace.tokens.warning-name-change"
|
||||
msgstr "重新命名此權杖(token)將會中斷對其舊名稱的任何參照。"
|
||||
|
||||
#: src/app/main/ui/workspace/sidebar.cljs:139, src/app/main/ui/workspace/sidebar.cljs:146
|
||||
msgid "workspace.toolbar.assets"
|
||||
msgstr "資源"
|
||||
|
||||
Reference in New Issue
Block a user